Roadmap
This roadmap describes the active product direction. It replaces the older phase list that predated provider sync, task blocks, buckets, settings, and the calendar refactors.
Current Product Shape
Dainvo is a local-first desktop calendar workspace with:
- local calendars and local event CRUD
- Google, Outlook, Apple Calendar, and generic CalDAV sync/mutation paths
- basic recurrence expansion
- ICS import/export
- local, Todoist, Microsoft To Do, Google Tasks, and TickTick parent tasks
- task blocks as calendar work sessions
- buckets as calendar time blocks that can contain tasks
- settings for calendar, tasks, appearance, accounts, reminders, shortcuts, and sync
- Microsoft Teams, Google Meet, Zoom, and Webex online meeting support
- main-process reminders and safe provider/token boundaries
Projects are not exposed in the active app. The repository still has project tables, IPC names, and compatibility services because buckets originally shared that namespace and future Projects may return. Treat those names as compatibility details unless a future project explicitly re-enables Projects.
Near-Term Stability Work
- Keep reducing
CalendarPage.tsxby extracting focused mutation hooks and rendering components. - Keep calendar, task, provider, bucket, account, and settings behavior behind existing typed preload APIs.
- Keep visible-range calendar loading bounded for events, tasks, and buckets.
- Continue tightening startup, migration, sync, and database shutdown behavior.
- Add tests for extracted helpers, validation, services, and repository changes when behavior changes.
Feature Direction
- Calendar: maintain FullCalendar as UI-only while preserving app-owned toolbar, sidebars, compact popups, context menus, details panel, and modals.
- Tasks: keep parent tasks separate from task blocks; task blocks remain local scheduling records.
- Task providers: keep provider projects/lists as provider metadata for sync/composer/sidebar filtering. Todoist project mirroring into Dainvo Projects is future-only.
- Buckets: keep buckets independent from Projects and render them as
kind: 'bucket'calendar items. - Settings: extend existing DaisyUI settings sections and typed preference persistence instead of adding ad hoc controls.
- Documents and Projects: keep as future planning unless explicitly scoped.
Release Hardening
- Keep
pnpm lint,pnpm typecheck,pnpm test, andpnpm buildpassing. - Keep provider tests mocked; automated tests must not call live Google, Microsoft, Apple Calendar, CalDAV, Todoist, TickTick, Zoom, Webex, Supabase, or Stripe services.
- Keep OAuth tokens, database paths, provider payloads, and raw sync data out of the renderer and logs.
- Add packaging, signing/notarization, and release QA notes before a stable desktop release.