roadmap(06): add Phase 6 — UX Polish
phase.add appended the entry after the 999.x backlog (the decimal backlog convention confused the auto-placement). Moved it into Phase Details before ## Progress, added it to the top checklist + Progress table + execution order, gave it goal/success-criteria/candidate-scope (promotes backlog 999.2/3/6/7/8/9), renamed the dir to 06-ux-polish, and bumped STATE to 6 phases (50%).
This commit is contained in:
+23
-1
@@ -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)
|
- [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 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 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
|
## Phase Details
|
||||||
|
|
||||||
@@ -158,10 +159,29 @@ Plans:
|
|||||||
|
|
||||||
**Plans**: TBD
|
**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
|
## Progress
|
||||||
|
|
||||||
**Execution Order:**
|
**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.
|
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 |
|
| 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 |
|
| 3. Event Write-Back + PWA Install | 12/12 | Complete | 2026-06-07 |
|
||||||
| 4. Shared Lists + Live Sync | 0/? | Not started | - |
|
| 4. Shared Lists + Live Sync | 0/? | Not started | - |
|
||||||
| 5. Web Push Notifications | 0/? | Not started | - |
|
| 5. Web Push Notifications | 0/? | Not started | - |
|
||||||
|
| 6. UX Polish | 0/? | Not started | - |
|
||||||
|
|
||||||
## Backlog
|
## Backlog
|
||||||
|
|
||||||
@@ -299,3 +320,4 @@ Plans:
|
|||||||
Plans:
|
Plans:
|
||||||
|
|
||||||
- [ ] TBD (promote with /gsd-review-backlog when ready)
|
- [ ] TBD (promote with /gsd-review-backlog when ready)
|
||||||
|
|
||||||
|
|||||||
+7
-3
@@ -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_updated: "2026-06-07T23:30:00.000Z"
|
||||||
last_activity: 2026-06-07
|
last_activity: 2026-06-07
|
||||||
progress:
|
progress:
|
||||||
total_phases: 5
|
total_phases: 6
|
||||||
completed_phases: 3
|
completed_phases: 3
|
||||||
total_plans: 21
|
total_plans: 21
|
||||||
completed_plans: 21
|
completed_plans: 21
|
||||||
percent: 60
|
percent: 50
|
||||||
---
|
---
|
||||||
|
|
||||||
# Project State
|
# Project State
|
||||||
@@ -30,7 +30,7 @@ Plan: Not started
|
|||||||
Status: Phase 03 complete — ready to plan Phase 04
|
Status: Phase 03 complete — ready to plan Phase 04
|
||||||
Last activity: 2026-06-07
|
Last activity: 2026-06-07
|
||||||
|
|
||||||
Progress: [██████░░░░] 60% (3 of 5 phases)
|
Progress: [█████░░░░░] 50% (3 of 6 phases)
|
||||||
|
|
||||||
## Performance Metrics
|
## 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 ?]: 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
|
- [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
|
### 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.)
|
- **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.)
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
Reference in New Issue
Block a user