9 Commits

48 changed files with 200 additions and 43 deletions

View File

@@ -107,8 +107,15 @@ jobs:
- name: Setup F-Droid Server Tools
run: |
sudo apt-get update
sudo apt-get install -y fdroidserver sshpass
SUDO=""
if command -v sudo >/dev/null 2>&1; then
SUDO="sudo"
fi
$SUDO apt-get update
# sshpass from apt, fdroidserver via pip to get a newer androguard that
# can parse modern Flutter/AGP APKs (apt ships fdroidserver 2.2.1 which crashes)
$SUDO apt-get install -y sshpass rsync python3-pip
pip3 install --break-system-packages --upgrade fdroidserver
- name: Initialize or fetch F-Droid Repository
env:
@@ -125,10 +132,17 @@ jobs:
- name: Copy new APK to repo
run: |
# The app-release.apk name should ideally include the version number
# so it doesn't overwrite older versions in the repo.
VERSION_TAG=${GITHUB_REF#refs/tags/} # gets 'v1.0.0'
cp build/app/outputs/flutter-apk/app-release.apk fdroid/repo/my_flutter_app_${VERSION_TAG}.apk
set -e
mkdir -p fdroid/repo
# Prefer tag name for release builds; fallback to ref name for manual runs.
REF_NAME="${GITHUB_REF_NAME:-${GITHUB_REF##*/}}"
SAFE_REF_NAME="$(echo "$REF_NAME" | tr '/ ' '__' | tr -cd '[:alnum:]_.-')"
if [ -z "$SAFE_REF_NAME" ]; then
SAFE_REF_NAME="${GITHUB_SHA:-manual}"
fi
cp build/app/outputs/flutter-apk/app-release.apk "fdroid/repo/my_flutter_app_${SAFE_REF_NAME}.apk"
- name: Generate F-Droid Index
run: |

View File

@@ -8,6 +8,18 @@ A local-first Flutter app for organizing household chores, built for personal/co
Users can see what needs doing today, mark it done, and trust the app to schedule the next occurrence — without thinking about it.
## Current Milestone: v1.1 Calendar & Polish
**Goal:** Replace the stacked daily plan with a horizontal calendar strip UI, add task completion history, and task sorting options.
**Target features:**
- Horizontal date-strip calendar with day abbreviation + date number cards
- Month color shift for visual boundary between months
- Day-selection shows tasks in a list below the strip
- Undone tasks carry over to the next day with color accent (overdue marker)
- Task completion history log
- Additional task sorting (alphabetical, interval, effort)
## Requirements
### Validated
@@ -23,11 +35,13 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
### Active
- [ ] Data export/import (JSON)
- [ ] English localization
- [ ] Room cover photos from camera or gallery
- [ ] Horizontal calendar strip home screen (replacing stacked daily plan)
- [ ] Overdue task carry-over with visual accent
- [ ] Task completion history log
- [ ] Additional task sorting (alphabetical, interval, effort)
- [ ] Data export/import (JSON) — deferred
- [ ] English localization — deferred
- [ ] Room cover photos from camera or gallery — deferred
### Out of Scope
@@ -79,4 +93,4 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
| 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-16 after v1.0 milestone*
*Last updated: 2026-03-16 after v1.1 milestone started*

81
.planning/REQUIREMENTS.md Normal file
View File

@@ -0,0 +1,81 @@
# Requirements: HouseHoldKeaper
**Defined:** 2026-03-16
**Core Value:** Users can see what needs doing today, mark it done, and trust the app to schedule the next occurrence — without thinking about it.
## v1.1 Requirements
Requirements for milestone v1.1 Calendar & Polish. Each maps to roadmap phases.
### Calendar UI
- [ ] **CAL-01**: User sees a horizontal scrollable date-strip with day abbreviation (Mo, Di...) and date number per card
- [ ] **CAL-02**: User can tap a day card to see that day's tasks in a list below the strip
- [ ] **CAL-03**: User sees a subtle color shift at month boundaries for visual orientation
- [ ] **CAL-04**: Calendar strip auto-scrolls to today on app launch
- [ ] **CAL-05**: Undone tasks carry over to the next day with a red/orange color accent marking them as overdue
### Task History
- [ ] **HIST-01**: Each task completion is recorded with a timestamp
- [ ] **HIST-02**: User can view past completion dates for any individual task
### Task Sorting
- [ ] **SORT-01**: User can sort tasks alphabetically
- [ ] **SORT-02**: User can sort tasks by frequency interval
- [ ] **SORT-03**: User can sort tasks by effort level
## Future Requirements
Deferred to future release. Tracked but not in current roadmap.
### Data
- **DATA-01**: User can export all data as JSON
- **DATA-02**: User can import data from JSON backup
### Localization
- **LOC-01**: User can switch UI language to English
### Rooms
- **ROOM-01**: User can set a cover photo for a room from camera or gallery
## Out of Scope
Explicitly excluded. Documented to prevent scope creep.
| Feature | Reason |
|---------|--------|
| Weekly/monthly calendar views | Overcomplicates UI — date strip is sufficient for task app |
| Drag tasks between days | Not needed — tasks auto-schedule based on frequency |
| Calendar sync (Google/Apple) | Contradicts local-first, offline-only design |
| Task statistics/charts | Deferred to v2.0 — history log is the foundation |
## Traceability
Which phases cover which requirements. Updated during roadmap creation.
| Requirement | Phase | Status |
|-------------|-------|--------|
| CAL-01 | Phase 5 | Pending |
| CAL-02 | Phase 5 | Pending |
| CAL-03 | Phase 5 | Pending |
| CAL-04 | Phase 5 | Pending |
| CAL-05 | Phase 5 | Pending |
| HIST-01 | Phase 6 | Pending |
| HIST-02 | Phase 6 | Pending |
| SORT-01 | Phase 7 | Pending |
| SORT-02 | Phase 7 | Pending |
| SORT-03 | Phase 7 | Pending |
**Coverage:**
- v1.1 requirements: 10 total
- Mapped to phases: 10
- Unmapped: 0
---
*Requirements defined: 2026-03-16*
*Last updated: 2026-03-16 after roadmap creation (phases 5-7)*

View File

@@ -3,6 +3,7 @@
## Milestones
- **v1.0 MVP** — Phases 1-4 (shipped 2026-03-16)
- **v1.1 Calendar & Polish** — Phases 5-7 (in progress)
## Phases
@@ -18,6 +19,47 @@ See `milestones/v1.0-ROADMAP.md` for full phase details.
</details>
**v1.1 Calendar & Polish (Phases 5-7):**
- [ ] **Phase 5: Calendar Strip** - Replace the stacked daily plan home screen with a horizontal scrollable date-strip and day-task list
- [ ] **Phase 6: Task History** - Record every task completion with a timestamp and expose a per-task history view
- [ ] **Phase 7: Task Sorting** - Add alphabetical, interval, and effort sort options to task lists
## Phase Details
### Phase 5: Calendar Strip
**Goal**: Users navigate their tasks through a horizontal date-strip that replaces the stacked daily plan, seeing today's tasks by default and any day's tasks on tap
**Depends on**: Phase 4 (v1.0 shipped — all data layer and scheduling in place)
**Requirements**: CAL-01, CAL-02, CAL-03, CAL-04, CAL-05
**Success Criteria** (what must be TRUE):
1. The home screen shows a horizontal scrollable strip of day cards, each displaying the German day abbreviation (Mo, Di, Mi...) and the date number
2. Tapping any day card updates the task list below the strip to show that day's tasks, with the selected card visually highlighted
3. On app launch the strip auto-scrolls so today's card is centered and selected by default
4. When two adjacent day cards span a month boundary, a subtle color shift or divider makes the boundary visible without extra chrome
5. Tasks that were not completed on their due date appear in subsequent days' lists with a red/orange accent marking them as overdue
**Plans**: TBD
### Phase 6: Task History
**Goal**: Users can see exactly when each task was completed in the past, building trust that the scheduling loop is working correctly
**Depends on**: Phase 5
**Requirements**: HIST-01, HIST-02
**Success Criteria** (what must be TRUE):
1. Every task completion (tap done in any view) is recorded in the database with a precise timestamp — data persists across app restarts
2. From a task's detail or context menu the user can open a history view listing all past completion dates for that task in reverse-chronological order
3. The history view shows a meaningful empty state if the task has never been completed
**Plans**: TBD
### Phase 7: Task Sorting
**Goal**: Users can reorder task lists by the dimension most useful to them — name, how often the task recurs, or how much effort it requires
**Depends on**: Phase 5
**Requirements**: SORT-01, SORT-02, SORT-03
**Success Criteria** (what must be TRUE):
1. A sort control (dropdown, segmented button, or similar) is visible on task list screens and persists the chosen sort across app restarts
2. Selecting alphabetical sort orders tasks A-Z by name within the visible list
3. Selecting interval sort orders tasks from most-frequent (daily) to least-frequent (yearly/custom) intervals
4. Selecting effort sort orders tasks from lowest effort to highest effort level
**Plans**: TBD
## Progress
| Phase | Milestone | Plans Complete | Status | Completed |
@@ -26,3 +68,6 @@ See `milestones/v1.0-ROADMAP.md` for full phase details.
| 2. Rooms and Tasks | v1.0 | 5/5 | Complete | 2026-03-15 |
| 3. Daily Plan and Cleanliness | v1.0 | 3/3 | Complete | 2026-03-16 |
| 4. Notifications | v1.0 | 3/3 | Complete | 2026-03-16 |
| 5. Calendar Strip | v1.1 | 0/? | Not started | - |
| 6. Task History | v1.1 | 0/? | Not started | - |
| 7. Task Sorting | v1.1 | 0/? | Not started | - |

View File

@@ -1,17 +1,17 @@
---
gsd_state_version: 1.0
milestone: v1.0
milestone_name: MVP
status: shipped
stopped_at: v1.0 milestone complete
last_updated: "2026-03-16T20:00:00.000Z"
last_activity: 2026-03-16 — v1.0 MVP milestone shipped
milestone: v1.1
milestone_name: Calendar & Polish
status: ready
stopped_at: Roadmap created — ready for Phase 5
last_updated: "2026-03-16T21:00:00.000Z"
last_activity: 2026-03-16 — Roadmap created for v1.1 (phases 5-7)
progress:
total_phases: 4
completed_phases: 4
total_plans: 13
completed_plans: 13
percent: 100
total_phases: 3
completed_phases: 0
total_plans: 0
completed_plans: 0
percent: 0
---
# Project State
@@ -21,37 +21,38 @@ progress:
See: .planning/PROJECT.md (updated 2026-03-16)
**Core value:** Users can see what needs doing today, mark it done, and trust the app to schedule the next occurrence — without thinking about it.
**Current focus:** v1.0 shipped — planning next milestone
**Current focus:** v1.1 Calendar & Polish — Phase 5: Calendar Strip
## Current Position
Milestone: v1.0 MVP — SHIPPED 2026-03-16
Status: All 4 phases complete, 13/13 plans executed, 89 tests passing
Next: `/gsd:new-milestone` for v1.1
Phase: 5 — Calendar Strip
Plan: Not started
Status: Ready to plan Phase 5
Last activity: 2026-03-16 — Roadmap for v1.1 written (phases 5-7)
Progress: [##########] 100%
```
Progress: [ ░░░░░░░░░░░░░░░░░░░░ ] 0% (0/3 phases)
```
## Performance Metrics
**Velocity:**
- Total plans completed: 13
- Total execution time: ~1.3 hours
- Average duration: ~6 min/plan
**By Phase:**
| Phase | Plans | Total | Avg/Plan |
|-------|-------|-------|----------|
| 1 - Foundation | 2 | 15 min | 7.5 min |
| 2 - Rooms and Tasks | 5 | 35 min | 7.0 min |
| 3 - Daily Plan and Cleanliness | 3 | 11 min | 3.7 min |
| 4 - Notifications | 3 | 16 min | 5.3 min |
| Metric | v1.0 | v1.1 |
|--------|------|------|
| Phases | 4 | 3 planned |
| Plans | 13 | TBD |
| LOC (lib) | 7,773 | TBD |
| Tests | 89 | TBD |
## Accumulated Context
### Decisions
All v1.0 decisions are recorded in PROJECT.md Key Decisions table with outcomes.
| Decision | Rationale |
|----------|-----------|
| Calendar strip replaces daily plan home screen | v1.1 goal per PROJECT.md — not additive, the stacked overdue/today/upcoming sections are removed |
| Phase 5 before Phase 6 and 7 | Calendar strip is the primary UI surface; history and sorting operate within or alongside it |
| Phase 6 and 7 both depend on Phase 5 only | History and sorting are independent of each other — could execute in either order |
| HIST-01 and HIST-02 in same phase | Data layer (HIST-01) is only 1-2 DAO additions; grouping with the UI (HIST-02) keeps the phase coherent |
### Pending Todos
@@ -59,10 +60,12 @@ None.
### Blockers/Concerns
None — all v1.0 blockers resolved.
- The existing HomeScreen (daily plan with overdue/today/upcoming) will be replaced entirely in Phase 5. Verify no other screen references the daily plan provider before deleting it, or migrate references.
- CAL-05 (overdue carry-over with color accent) requires a query that returns tasks by their original due date relative to a selected day — confirm the existing DailyPlanDao can be adapted or a new CalendarDao is needed.
## Session Continuity
Last session: 2026-03-16
Stopped at: v1.0 milestone complete
Stopped at: Roadmap created, ready for Phase 5 planning
Resume file: None
Next action: `/gsd:plan-phase 5`

View File

@@ -1,4 +1,4 @@
package com.jlmak.household_keeper
package de.jeanlucmakiola.household_keeper
import io.flutter.embedding.android.FlutterActivity