4.7 KiB
4.7 KiB
Focus Seed 1.0.2 Local Database Product Loop
Status: historical implementation/reference plan. Superseded for active product direction by ../product-current-baseline.md.
Decision Header
- Objective: move Focus Seed from a simple local MVP into a richer offline-first product with durable history, user-facing settings, and basic retention feedback.
- Worth doing: yes. History and statistics need relational data; the current JSON document is no longer the right foundation.
- Scale: large-high-risk. This changes persistence, state loading, settings IA, and Journey value.
- Mode: full workflow with checkpoints.
- Success evidence:
flutter analyze,flutter test, release AAB build, manifest permission review, mojibake scan, and emulator smoke on Today/Journey/Me. - Key assumption: no account, no cloud, no server, no ads/billing SDKs, no media permissions in this release.
Product Boundary
Focus Seed remains a private local focus companion. The 1.0.2 goal is not to add breadth for its own sake; it is to close the daily loop:
- Pick one daily priority.
- Complete focused time.
- Mark a few habits.
- Capture one reflection.
- See meaningful progress over time.
Explicit Non-Goals
- No LLM.
- No account or cloud sync.
- No ads, subscriptions, billing, Firebase, or analytics SDK.
- No user photo/video editing in 1.0.2. Media would add storage, privacy, permission, backup, and UI complexity before the core loop is strong enough.
- No user-facing JSON import/export. JSON can remain a debug-only migration tool if needed.
Data Architecture
Use Drift + SQLite as the local persistence boundary.
Tables:
daily_intentions: daily priority text by date.focus_sessions: planned minutes, actual seconds, start/end timestamps, completion status.habits: title, sort order, archived timestamp.habit_logs: habit completion by date.reflections: mood, note, date.app_settings: small key/value settings such as default focus duration.
Repository boundary:
- UI and controllers talk to a repository/store interface.
- Drift implementation owns queries and migrations.
- Existing
AppStatecan remain as an application snapshot while the database becomes source of truth. - V1 JSON document is migrated once into SQLite, then the app reads from SQLite.
Settings IA
User-facing settings:
- Appearance: theme.
- Focus preferences: default session duration.
- Privacy and data: local-only explanation, clear today's data, clear all local data.
- About: version and privacy summary.
Debug-only settings:
- Language switch.
- Developer data tools only if needed for migration QA.
Remove from user-facing UI:
- Export JSON.
- Import JSON.
Journey Enhancements
P0 for Journey:
- Show useful progress at a glance, not just raw recent records.
Add:
- Current streak.
- Focus minutes this week.
- Habit completion this week.
- Reflection count this week.
- Recent focus sessions.
- Recent reflections.
Today Enhancements
Copy:
- Replace "Choose one outcome" with user language: "What matters today?" / "写下今天最重要的一件事".
- Replace "Today's intention" with "Today's priority" / "今日重点".
Interaction:
- Add small success feedback after completing a focus session, habit, or reflection.
- Keep P0 action visible; no decorative element may compete with the timer or priority.
- Use implicit animations only; no continuous distracting motion.
Workflow
Phase 0: Plan checkpoint
- Create branch.
- Add this plan.
- Commit the plan.
Phase 1: Database foundation
- Add Drift dependencies.
- Create database tables and DAO/repository.
- Add migration from existing local JSON state.
- Keep controllers stable by returning an
AppStatesnapshot. - Tests: migration, CRUD, statistics.
- Commit.
Phase 2: Settings cleanup
- Remove user-facing JSON import/export.
- Add clear today's data and clear all data confirmations with impact text.
- Keep language switch debug-only.
- Tests: settings visibility and destructive confirmations.
- Commit.
Phase 3: Retention value
- Add Journey summary cards and history sections backed by database queries.
- Add focus preference for default duration if safe.
- Tests: statistics and visible Journey labels.
- Commit.
Phase 4: QA and release artifact
- Mojibake scan.
flutter analyze.flutter test.flutter build appbundle --release.- Emulator smoke for Today/Journey/Me.
- Commit final polish.
Acceptance Gate
- No user-facing JSON wording.
- No new Android runtime permissions.
- Existing installed 1.0.1 data migrates.
- New install starts with local database seed data.
- Journey gives at least three useful progress signals.
- Settings reads as user product settings, not developer tools.
- Worktree is clean after checkpoint commit.