Milestone v1.0: FamilySync MVP #1

Merged
luckberg merged 376 commits from gsd/v1.0-milestone into main 2026-06-10 17:39:19 -04:00
3 changed files with 31 additions and 4 deletions
Showing only changes of commit 35871cd8cf - Show all commits
+23 -1
View File
@@ -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)
+7 -3
View File
@@ -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.)
+1
View File
@@ -0,0 +1 @@