Skip to content
André Paul Grandsire edited this page Aug 8, 2026 · 4 revisions

Do It - Developer Documentation

This document provides an overview of the Do It project architecture and how to navigate its source code.

Project Overview

Do It is a GNOME task manager application written in TypeScript, using GTK4 and libadwaita. It targets Linux/GNOME only.

Architecture

src/
├── actions/           # Gio SimpleAction handlers
├── persistence/       # Data storage implementation (gio-persistence.ts)
├── static/            # Static configuration grouped by domain (actions, settings, sorting, sidebar, tasks, messages)
├── store/             # Stateful stores (list-store.ts, project-store.ts)
├── views/             # UI code counterparts (e.g., doit.ts)
├── widgets/           # UI components (`.ui` files)
├── utils/             # Utility functions and settings
└── *.ts               # App entry points and shared types

Key Concepts

Shared Types (src/)

  • app.types.ts: Types like ITask
  • app.enums.ts: Enums like SortingField, SortingStrategy, AppSignals
  • app.strings.ts: Localized strings
  • app.wrapper.ts: Application lifecycle

Static config (src/static/)

Static configuration grouped by domain: action names (actions.ts), settings keys (settings.ts), sorting options (sorting.ts), sidebar items (sidebar.ts), task icons (tasks.ts), and debug messages (messages.ts).

Actions (src/actions/)

Gio SimpleAction handlers that wire UI interactions to application behavior.

Views (src/views/)

GTK widget implementations that display tasks and manage the UI (e.g., doit.ts, task-item.ts).

Widgets (src/widgets/)

GTK4 .ui templates loaded via GResource.

Persistence (src/persistence/)

File-based JSON storage using Gio (gio-persistence.ts).

Stores (src/store/)

Stateful stores that coordinate app-wide state and emit signals (e.g., list-store.ts holds the tasks, project-store.ts discovers projects from the task store).

Utils (src/utils/)

Helper functions: settings access (settings.ts), sorting logic (sort.ts, tasks.sort.ts), logging (log-manager.ts), and the build-time generated application.js.

Import Aliases

The project uses a single TypeScript path alias (defined in tsconfig.json):

  • ~ → src

Building

  • Use Meson (meson setup build && ninja -C build)
  • Use yarn dev for development

Resources