chore: complete v1.0 MVP milestone
Some checks failed
Build and Release to F-Droid / build-and-deploy (push) Has been cancelled

Archive roadmap and requirements to milestones/, evolve PROJECT.md
with validated requirements and decision outcomes, reorganize
ROADMAP.md with milestone grouping, create retrospective.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 20:10:01 +01:00
parent 36126acc18
commit 1a1a10c9ea
7 changed files with 263 additions and 197 deletions

View File

@@ -2,7 +2,7 @@
## What This Is
A local-first Flutter app for organizing household chores and one-time projects, built for personal/couple use on Android. Takes the room-based task scheduling model (inspired by BeTidy), strips cloud/account/social features, and wraps it in a calm, minimal Material 3 UI. Fully offline, free, privacy-respecting — all data stays on-device.
A local-first Flutter app for organizing household chores, built for personal/couple use on Android. Uses a room-based task scheduling model where users create rooms, add recurring tasks with frequency intervals, and the app auto-calculates the next due date after each completion. Features a daily plan home screen, bundled German-language task templates, room cleanliness indicators, and daily summary notifications. Fully offline, free, privacy-respecting — all data stays on-device.
## Core Value
@@ -12,20 +12,22 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
### Validated
(None yet — ship to validate)
- Room CRUD with icons and drag-and-drop reorder — v1.0
- Task CRUD with frequency intervals and due date calculation — v1.0
- Daily plan view with overdue/today/upcoming sections — v1.0
- Task completion with auto-scheduling of next due date — v1.0
- Bundled task templates per room type (German only, 14 room types) — v1.0
- Daily summary notification with configurable time — v1.0
- Light/dark theme with calm Material 3 palette — v1.0
- Cleanliness indicator per room (based on overdue vs on-time) — v1.0
### Active
- [ ] Room CRUD with icons and optional photos
- [ ] Task CRUD with frequency intervals and due date calculation
- [ ] Daily plan view with overdue/today/upcoming sections
- [ ] Task completion with auto-scheduling of next due date
- [ ] Bundled task templates per room type (German only)
- [ ] Daily summary notification
- [ ] Light/dark theme with calm Material 3 palette
- [ ] Cleanliness indicator per room (based on overdue vs on-time)
- [ ] Task sorting (due date, alphabetical, interval, effort)
- [ ] Task history (completion log per task)
- [ ] Data export/import (JSON)
- [ ] English localization
- [ ] Room cover photos from camera or gallery
- [ ] Task completion history log
- [ ] Additional task sorting (alphabetical, interval, effort)
### Out of Scope
@@ -34,8 +36,9 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
- Subscription model / in-app purchases — free forever
- Family profile sharing across devices — single-device app
- Server-side infrastructure — zero backend
- Data export/import (JSON) — deferred to v1.1
- English localization — deferred to v1.1 (ship German-only MVP)
- AI-powered task suggestions — overkill for curated templates
- Per-task push notifications — daily summary is more effective
- Firebase or any Google cloud services — contradicts local-first design
- Real-time cross-device sync — potential future self-hosted feature
- Tablet-optimized layout — future enhancement
- Statistics & insights dashboard — v2.0
@@ -44,11 +47,11 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
## Context
- Inspired by BeTidy (iOS/Android household cleaning app) — taking the proven room-based model, removing cloud/social, refining the UI
- Shipped v1.0 MVP with 10,588 LOC Dart (7,773 lib + 2,815 test), 89 tests
- Tech stack: Flutter + Dart, Riverpod 3 + code generation, Drift 2.31 SQLite, GoRouter, flutter_local_notifications
- Inspired by BeTidy (iOS/Android household cleaning app) — room-based model, no cloud/social
- Built for personal use with partner on a shared Android device; may publish publicly later
- Code and comments in English; UI strings German-only for MVP
- Room photos are nice-to-have for MVP — icon-only rooms are sufficient initially
- Developer is new to Drift (SQLite ORM) — plan should account for learning curve
- Code and comments in English; UI strings German-only for v1.0
- Gitea (self-hosted on Hetzner) for version control; no CI/CD pipeline yet
## Constraints
@@ -57,20 +60,23 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
- **Platform**: Android-first (iOS later)
- **Offline**: 100% offline-capable, zero network dependencies
- **Privacy**: No data leaves the device, no analytics, no tracking
- **Language**: German-only UI for MVP, English code/comments
- **Language**: German-only UI for v1.0, English code/comments
- **No CI**: No automated build pipeline initially
## Key Decisions
| Decision | Rationale | Outcome |
|----------|-----------|---------|
| Riverpod over Bloc | Modern, compile-safe, less boilerplate, Dart-native | — Pending |
| Drift over raw sqflite | Type-safe queries, compile-time validation, migration support | — Pending |
| Android-first | Primary device is Android; iOS follows | — Pending |
| German-only MVP | Primary user language; defer localization infrastructure | — Pending |
| No CI initially | Keep scope focused on the app itself | — Pending |
| Calm Material 3 palette | Muted greens, warm grays, gentle blues — calm productivity, not playful | — Pending |
| Clean Architecture | Feature-based folder structure with data/domain/presentation layers | — Pending |
| Riverpod 3 over Bloc | Modern, compile-safe, less boilerplate, Dart-native | Good — code generation works well, @riverpod annotation reduces boilerplate |
| Drift over raw sqflite | Type-safe queries, compile-time validation, migration support | Good — DAOs with stream queries provide reactive UI, migration workflow established |
| Android-first | Primary device is Android; iOS follows | Good — no iOS-specific issues encountered |
| German-only MVP | Primary user language; defer localization infrastructure | Good — ARB localization infrastructure in place from Phase 1, ready for English |
| No CI initially | Keep scope focused on the app itself | Good — manual dart analyze + flutter test sufficient for solo dev |
| Calm Material 3 palette | Muted greens, warm grays, gentle blues — calm productivity | Good — sage & stone theme (seed 0xFF7A9A6D) with warm charcoal dark mode |
| Clean Architecture | Feature-based folder structure with data/domain/presentation layers | Good — clear separation, easy to navigate |
| Calendar-anchored scheduling | Monthly/quarterly/yearly tasks anchor to original day-of-month with clamping | Good — handles Feb 28/31 edge cases correctly with anchor memory |
| flutter_local_notifications v21 | Standard Flutter notification package, TZ-aware scheduling | Good — inexactAllowWhileIdle avoids SCHEDULE_EXACT_ALARM complexity |
| Manual StreamProvider for drift types | riverpod_generator throws InvalidTypeException with drift Task type | Revisit — may be fixed in future riverpod_generator versions |
---
*Last updated: 2026-03-15 after initialization*
*Last updated: 2026-03-16 after v1.0 milestone*