diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index a69b025..d4457fd 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -18,6 +18,7 @@ Decimal phases appear between their surrounding integers in numeric order. - [x] **Phase 3: Event Write-Back + PWA Install** - Full event CRUD written back to Fastmail, PWA manifest + service worker, guided iOS install flow (completed 2026-06-07) - [ ] **Phase 4: Shared Lists + Live Sync** - Named collaborative lists with item CRUD and real-time SSE co-edit sync - [ ] **Phase 5: Web Push Notifications** - VAPID push for event reminders, event changes, and list-change alerts +- [ ] **Phase 6: UX Polish** - All-day visual distinction, event-form date/recurrence behavior, recurring-series edit, and auth-flow smoothing ## Phase Details @@ -158,10 +159,29 @@ Plans: **Plans**: TBD +### Phase 6: UX Polish + +**Goal**: Smooth the rough edges surfaced during live use — clearer all-day events, saner event-form date/recurrence behavior, recurring-series editing, and auth-flow polish — so the app feels slick for the non-technical Apple member (hard UX constraint). +**Mode:** mvp +**Depends on**: Phase 3 (calendar/event-form polish); Phase 4 for any list-related polish +**Requirements**: TBD +**Success Criteria** (what must be TRUE): + + 1. All-day events are visually distinct from timed events at a glance + 2. The event form keeps a sane duration when the start moves, all-day edits don't grow the event, and a recurrence can be bounded (repeat-until / count) + 3. A recurring series can be edited as a whole + 4. A session that expires mid-use redirects cleanly to sign-in instead of hanging on a generic error + 5. Unauthenticated cold load shows a neutral "signing you in…" splash — no calendar/"sign-in required" flash before Authelia + +**Candidate scope** (promote via `/gsd-review-backlog` at planning): 999.2 (login flash), 999.3 (session-timeout redirect), 999.6 (all-day visual), 999.7 (form end-tracking + all-day-edit off-by-one), 999.8 (recurrence bound), 999.9 (recurring-series edit). 999.4 (reminders) and 999.5 (provider setup) are more feature than polish — decide at planning. + +**Plans**: TBD +**UI hint**: yes + ## Progress **Execution Order:** -Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 +Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 Note: Phase 4 depends only on Phase 1 and can begin as soon as Phase 1 is complete. It is serialized here to reduce work-in-progress. | Phase | Plans Complete | Status | Completed | @@ -171,6 +191,7 @@ Note: Phase 4 depends only on Phase 1 and can begin as soon as Phase 1 is comple | 3. Event Write-Back + PWA Install | 12/12 | Complete | 2026-06-07 | | 4. Shared Lists + Live Sync | 0/? | Not started | - | | 5. Web Push Notifications | 0/? | Not started | - | +| 6. UX Polish | 0/? | Not started | - | ## Backlog @@ -299,3 +320,4 @@ Plans: Plans: - [ ] TBD (promote with /gsd-review-backlog when ready) + diff --git a/.planning/STATE.md b/.planning/STATE.md index 4183ec9..9dc11be 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -7,11 +7,11 @@ stopped_at: "Phase 03 (event-write-back-pwa-install) COMPLETE — Gate 2 verifie last_updated: "2026-06-07T23:30:00.000Z" last_activity: 2026-06-07 progress: - total_phases: 5 + total_phases: 6 completed_phases: 3 total_plans: 21 completed_plans: 21 - percent: 60 + percent: 50 --- # Project State @@ -30,7 +30,7 @@ Plan: Not started Status: Phase 03 complete — ready to plan Phase 04 Last activity: 2026-06-07 -Progress: [██████░░░░] 60% (3 of 5 phases) +Progress: [█████░░░░░] 50% (3 of 6 phases) ## Performance Metrics @@ -87,6 +87,10 @@ Recent decisions affecting current work: - [Phase ?]: D-02 calendar picker: hidden when writableCalendars.length === 1, shown when >1 — authoritative from GET /api/events/writable-calendars - [Phase ?]: T-03-15 XSS: EventForm renders all values as plain-text JSX children; no dangerouslySetInnerHTML in code +### Roadmap Evolution + +- Phase 6 added (2026-06-07): UX Polish — all-day visual distinction, event-form date/recurrence behavior, recurring-series edit, auth-flow smoothing. Candidate scope pulls from backlog 999.2/999.3/999.6/999.7/999.8/999.9. + ### Pending Todos - **Fix `docs/deployment.md` local-dev command** — the documented dev run is wrong: the API dev script (`node --watch dist/index.js`) does NOT load `.env`, and `DB_HOST` defaults to `localhost` with an empty password. Correct local-dev command is: `pnpm --filter @familysync/api build && set -a; source .env; set +a && DEV_AUTH_BYPASS=true DB_HOST=localhost pnpm --filter @familysync/api dev` (+ `pnpm --filter @familysync/pwa dev`). Consider adding `--env-file=.env` to the dev script so this is automatic. (Surfaced during Phase 2 UAT.) diff --git a/.planning/phases/06-ux-polish/.gitkeep b/.planning/phases/06-ux-polish/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.planning/phases/06-ux-polish/.gitkeep @@ -0,0 +1 @@ +