Compare commits
9 Commits
v1.0
...
fe7ba21061
| Author | SHA1 | Date | |
|---|---|---|---|
| fe7ba21061 | |||
| 90ff66223c | |||
| b7a243603c | |||
| fa26d6b301 | |||
| 6bb1bc35d7 | |||
| ead085ad26 | |||
| 74a801c6f2 | |||
| 0059095e38 | |||
| 8c72403c85 |
@@ -107,8 +107,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Setup F-Droid Server Tools
|
- name: Setup F-Droid Server Tools
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
SUDO=""
|
||||||
sudo apt-get install -y fdroidserver sshpass
|
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
|
- name: Initialize or fetch F-Droid Repository
|
||||||
env:
|
env:
|
||||||
@@ -125,10 +132,17 @@ jobs:
|
|||||||
|
|
||||||
- name: Copy new APK to repo
|
- name: Copy new APK to repo
|
||||||
run: |
|
run: |
|
||||||
# The app-release.apk name should ideally include the version number
|
set -e
|
||||||
# so it doesn't overwrite older versions in the repo.
|
mkdir -p fdroid/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
|
# 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
|
- name: Generate F-Droid Index
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -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.
|
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
|
## Requirements
|
||||||
|
|
||||||
### Validated
|
### Validated
|
||||||
@@ -23,11 +35,13 @@ Users can see what needs doing today, mark it done, and trust the app to schedul
|
|||||||
|
|
||||||
### Active
|
### Active
|
||||||
|
|
||||||
- [ ] Data export/import (JSON)
|
- [ ] Horizontal calendar strip home screen (replacing stacked daily plan)
|
||||||
- [ ] English localization
|
- [ ] Overdue task carry-over with visual accent
|
||||||
- [ ] Room cover photos from camera or gallery
|
|
||||||
- [ ] Task completion history log
|
- [ ] Task completion history log
|
||||||
- [ ] Additional task sorting (alphabetical, interval, effort)
|
- [ ] 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
|
### 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 |
|
| 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
81
.planning/REQUIREMENTS.md
Normal 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)*
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
## Milestones
|
## Milestones
|
||||||
|
|
||||||
- **v1.0 MVP** — Phases 1-4 (shipped 2026-03-16)
|
- **v1.0 MVP** — Phases 1-4 (shipped 2026-03-16)
|
||||||
|
- **v1.1 Calendar & Polish** — Phases 5-7 (in progress)
|
||||||
|
|
||||||
## Phases
|
## Phases
|
||||||
|
|
||||||
@@ -18,6 +19,47 @@ See `milestones/v1.0-ROADMAP.md` for full phase details.
|
|||||||
|
|
||||||
</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
|
## Progress
|
||||||
|
|
||||||
| Phase | Milestone | Plans Complete | Status | Completed |
|
| 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 |
|
| 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 |
|
| 3. Daily Plan and Cleanliness | v1.0 | 3/3 | Complete | 2026-03-16 |
|
||||||
| 4. Notifications | 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 | - |
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
---
|
---
|
||||||
gsd_state_version: 1.0
|
gsd_state_version: 1.0
|
||||||
milestone: v1.0
|
milestone: v1.1
|
||||||
milestone_name: MVP
|
milestone_name: Calendar & Polish
|
||||||
status: shipped
|
status: ready
|
||||||
stopped_at: v1.0 milestone complete
|
stopped_at: Roadmap created — ready for Phase 5
|
||||||
last_updated: "2026-03-16T20:00:00.000Z"
|
last_updated: "2026-03-16T21:00:00.000Z"
|
||||||
last_activity: 2026-03-16 — v1.0 MVP milestone shipped
|
last_activity: 2026-03-16 — Roadmap created for v1.1 (phases 5-7)
|
||||||
progress:
|
progress:
|
||||||
total_phases: 4
|
total_phases: 3
|
||||||
completed_phases: 4
|
completed_phases: 0
|
||||||
total_plans: 13
|
total_plans: 0
|
||||||
completed_plans: 13
|
completed_plans: 0
|
||||||
percent: 100
|
percent: 0
|
||||||
---
|
---
|
||||||
|
|
||||||
# Project State
|
# Project State
|
||||||
@@ -21,37 +21,38 @@ progress:
|
|||||||
See: .planning/PROJECT.md (updated 2026-03-16)
|
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.
|
**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
|
## Current Position
|
||||||
|
|
||||||
Milestone: v1.0 MVP — SHIPPED 2026-03-16
|
Phase: 5 — Calendar Strip
|
||||||
Status: All 4 phases complete, 13/13 plans executed, 89 tests passing
|
Plan: Not started
|
||||||
Next: `/gsd:new-milestone` for v1.1
|
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
|
## Performance Metrics
|
||||||
|
|
||||||
**Velocity:**
|
| Metric | v1.0 | v1.1 |
|
||||||
- Total plans completed: 13
|
|--------|------|------|
|
||||||
- Total execution time: ~1.3 hours
|
| Phases | 4 | 3 planned |
|
||||||
- Average duration: ~6 min/plan
|
| Plans | 13 | TBD |
|
||||||
|
| LOC (lib) | 7,773 | TBD |
|
||||||
**By Phase:**
|
| Tests | 89 | TBD |
|
||||||
|
|
||||||
| 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 |
|
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
### Decisions
|
### 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
|
### Pending Todos
|
||||||
|
|
||||||
@@ -59,10 +60,12 @@ None.
|
|||||||
|
|
||||||
### Blockers/Concerns
|
### 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
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-03-16
|
Last session: 2026-03-16
|
||||||
Stopped at: v1.0 milestone complete
|
Stopped at: Roadmap created, ready for Phase 5 planning
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
Next action: `/gsd:plan-phase 5`
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.jlmak.household_keeper
|
package de.jeanlucmakiola.household_keeper
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
||||||
Reference in New Issue
Block a user