Pomotree is a local-first task Pomodoro app with a focus-tree workflow, interruption capture, and a native macOS menu-bar shell. The core product follows docs/focus_tree_implementation_ready_design_doc.md; current implementation status lives in docs/repo-context.md.
- Create root tasks, subtasks, and slash-delimited task paths locally.
- Render and edit a compact task tree with safe move/cycle protection and archive-preserved history.
- Start a focus session from a task or from an unassigned intention.
- Support default, 25-minute, 50-minute, and custom focus durations.
- Pause and resume with persisted pause records and wall-clock recovery.
- Automatically enter the required
finishingstate when a running timer expires. - Save as completed or partial, mark the attributed task done, or discard.
- Correct end-of-session and recent-session task attribution while preserving original attribution snapshots.
- Capture interruptions without mutating timer state and convert interruptions into tasks.
- Show Today stats, recent sessions, and subtree task focus totals.
- Persist all data locally in IndexedDB via Dexie.
- Export and import Pomotree JSON with schema version 1.
- Surface storage-unavailable and active-session recovery warnings in the UI.
- Run as a Tauri v2 macOS app with a tray/menu-bar popover and an optional dashboard window.
src/app/page.tsxis the full dashboard UI.src/app/menubar/page.tsxandsrc/app/menubar/MenubarApp.tsxare the compact menu-bar UI.src/lib/services/pomotree.tsowns task/session/interruption/settings/import-export write flows and Dexie transaction boundaries.src/lib/services/stats.tsandsrc/lib/services/taskSelectors.tsprovide derived read models for UI and tests.src/lib/store/useAppStore.tswraps service calls in a Zustand store and refreshes snapshots after mutations.src/lib/db/*defines Dexie schema/defaults.src/types/domain.tsandsrc/lib/validation/domain.tsdefine domain types and import validation.src-tauri/src/lib.rsowns native tray behavior, popover positioning, dashboard window creation, and tray status updates.
npm run dev
npm run lint
npm run build
npm run test
npm run e2eFor local browser verification in this workspace, use http://localhost:3001/ when a dev server is started on port 3001.
npm run tauri:dev
npm run tauri:dev:current
npm run tauri:buildtauri:devstarts Next on port 3000 and opens/menubarin the native shell.tauri:dev:currentattaches to an already-runninghttp://localhost:3001/menubardev server.tauri:buildruns a static Next export and packages a macOS.app.- The Tauri WebView uses its own local IndexedDB storage, separate from the browser profile.
The current app is covered by Vitest service/unit tests and Playwright Chromium E2E tests, including the dashboard flow, storage-unavailable warning, and menubar flow.
See:
docs/repo-context.mdfor implementation status, stack choices, architecture, validation, and deferred items.docs/tauri-menubar-spike.mdfor native menu-bar behavior and packaging notes.