Delivery Roadmap
Delivery approach
Deliver a narrow, trustworthy local-first app before implementing synchronization. The sequencing below deliberately validates irreversible foundations—identity, revisions, persistence, and editor behavior—before adding destinations or new client platforms.
Phase 0 — Product and technical foundations
Outcome: decisions that prevent rework in the core model.
- Confirm target minimum Android/iOS versions and native UI technology choices.
- Choose local database, KMP concurrency approach, Markdown parser/renderer, and dependency policy.
- Write UX flows and wireframes for editor, history, local recovery, and task lists; document future sync/folder-conflict flows without building their UI.
- Finalize canonical Markdown/front-matter format and compatibility/versioning policy.
- Use the extension design reference to identify stable data, command, permission, and provenance contracts before exposing public extension APIs.
- Define revision retention policy and privacy/security baseline.
- Establish CI, code style, modular project skeleton, test fixtures, and crash/error reporting policy.
Exit criteria: Architecture decision records (ADRs) are approved; sample Markdown files round-trip; test app can call a shared KMP use case from both platforms.
Phase 1 — Local-first core
Outcome: a dependable single-device note app.
- Implement notebook and note CRUD, the hidden default notebook, pinned notes, multi-select move/delete, and move/archive/delete/restore flows with an Undo bar instead of confirmations.
- Implement quick capture, including the app-icon long-press action on both platforms.
- Implement automatic titles: first-line fallback everywhere, plus an on-device model behind a runtime availability check (Apple Foundation Models, Android Gemini Nano via ML Kit GenAI).
- Implement fuzzy note lookup, note-to-note links (
[[, tap to follow), and the per-session back/forward note history, with the last open note restored on launch. - Implement transactional persistence, schema migrations, stable IDs, and tombstones; reserve clean module/data boundaries for a future outbox rather than implementing one.
- Implement immutable revision snapshots, revision browsing, comparison/preview, and restore-as-new-revision.
- Build native live-preview rich editors on both platforms, backed by a shared Markdown codec and semantic document-edit operations. Do not ship a source-editing mode.
- Add interactive task lists: create, check, and uncheck items through visual controls; serialize their state to canonical Markdown; support nested lists and accessible controls.
- Add editor autosave, undo/redo strategy, task-aware search indexing, and native accessibility support.
- Add keyboard formatting toolbar with selection-safe command behavior, including checklist insertion.
Exit criteria: Offline acceptance tests pass across app restart; history recovery is verified; task items can be checked/unchecked on both platforms and remain correct after restart; no-edit save does not create duplicate revisions; accessibility and keyboard flows have manual QA coverage.
Phase 2 — iOS polish and beta readiness
Outcome: a coherent native iOS and Android beta with dependable local functionality.
- Finish iOS editor toolbar, history, navigation, and platform-specific lifecycle handling.
- Perform migration, storage, performance, accessibility, localization-readiness, and privacy review.
- Recruit a limited beta, collect opt-in diagnostics, and define data-recovery support procedures.
Exit criteria: Beta release checklist is complete; known limitations and recovery steps are published; success metrics are instrumented without collecting note contents.
Future Phase 3 — Sync platform and Android folder sync
Outcome: safe, understandable current-state file sync on Android.
- Implement destination registry, capability contract, sync coordinator, retry queue, status model, and diagnostics.
- Implement managed folder layout, deterministic exporter/importer, identity metadata, and hash/version comparison.
- Integrate Android Storage Access Framework permissions and background scheduling.
- Build conflict staging and recovery UI; test interruptions, revoked access, duplicate filenames, renames, external edits, and external deletes.
- Add import/export guides and user-facing capability disclosures.
Exit criteria: A test matrix demonstrates no silent data loss across interrupted sync, external edits, and folder re-selection; UI correctly states that folder sync does not provide app-managed remote history.
Extension sequencing note
The plan intentionally excludes content-tool plugins (for example drawing, diagram, and rich visual-document tools) from the current extension design target. No extension implementation or plugin runtime is in Release 1. After a future folder-sync implementation, prioritize constrained templates/capture and import/export primitives. Only then consider metadata-driven views, research connectors, AI providers, and—on desktop—advanced automation, as described in the extension design reference.
Future Phase 4 — History-aware cloud sync
Outcome: multi-device sync that can transport revision history safely.
- Select cloud/storage model and account/identity approach.
- Implement encrypted transport, conditional writes, incremental discovery, tombstones, and history graph transfer.
- Add device enrollment, conflict-resolution UX, sign-out/data-retention behavior, and recovery documentation.
- Run reliability tests for offline edits on multiple devices, partial upload, large histories, and account recovery.
Exit criteria: Cross-device scenarios preserve every branch or make conflicts recoverable; security review approves the selected threat model.
Future Phase 5 — Desktop and web clients
Outcome: additional clients use the same domain and sync protocols without weakening data guarantees.
- Extract/strengthen platform-neutral KMP APIs for desktop targets.
- Build desktop native/Compose UI after validating editor and local-storage needs. Started on 2026-10-11 (D-76): Linux, macOS and Windows together, Compose UI in
app/desktopUi. - Choose web architecture deliberately: Kotlin/Wasm/JS shared-domain options, browser storage limits, offline support, and secure credential handling.
- Reuse the sync protocol and file format; add client compatibility testing and migration controls.
Exit criteria: New clients round-trip notes and revisions safely with existing mobile clients; platform-specific constraints are documented.
Continuous quality work
| Area | Required practice |
|---|---|
| Core correctness | KMP unit/property tests for revision, merge, ID, serialization, and migration rules |
| Future sync | Once implemented, contract tests run against every destination; fault injection covers timeout/retry/duplicate events |
| UI | Native UI tests for editing, task toggle, formatting selection, history restore, conflict and permissions flows |
| Data safety | Backup/export/import drills with representative datasets and corrupted-file fixtures |
| Performance | Measure startup, editor latency, search, and history size; add initial/repeated sync measurement when sync exists |
| Security | Dependency updates, secret scanning, least-permission review, and threat-model reviews before cloud work |
Initial backlog ordering
- Project skeleton and ADRs.
- IDs, data schema, migrations, repositories, and revision transaction.
- Notebook/note screens and native live-preview editor.
- History browser and restore flow.
- Search and editor toolbar.
- Beta hardening and iOS parity.
- Future: sync interfaces, outbox, capability UI, and test harness.
- Future: Android local-folder extension.