# Phase 8 — progress log > Canonical record for Phase 8 (8a public route, 8b PWA shell, 8c markdown context). > Mirrored to the Apple Notes note titled "Phase 8 — Public intake + PWA + project context". > Workflow: a task moves `pending → in_progress → done` as I work it; TDD red/green noted where applicable. ## How to read - `[ ]` pending - `[~]` in progress - `[x]` done — TDD green + commit landed - `[!]` blocked, needs decision --- ## Plan 8a — Public intake links and route - [x] Task 1: Schema — `c99be4d`. Bridge: plan assumed `getOrCreateCollection` extended existing select values; it doesn't, so added `ensureCardsCreatedByRoleValues` and extended `ensureActivityActionValues`. Tests: 446 pass. - [x] Task 2: Token generator — `36572d9`. 24 bytes CSPRNG → base64url → 32 chars. `isIntakeToken` matches. - [x] Task 3: Best-effort client IP — `f608931`. x-forwarded-for → x-real-ip → "unknown". - [x] Task 4: Rate limiter — `70ce019`. 60 req / 5 min per opaque key, in-memory, lossy on restart. 4 unit tests. - [x] Task 5: Token resolver and daily counter — `3ece6cb`. `resolveIntakeLink`, `isLinkUsable` with lazy date-reset, `validateIntakeLinkForStep` returns 3-valued LinkState. - [x] Task 6: Middleware carve-out — `65b0cf4`. `/intake/:path*` short-circuits before cookie check. - [x] Task 7: Public Server Action — `9081659`. token-shape → rate-limit → daily-cap → `nextStep`. Same `InterviewStep` shape as signed-in. - [x] Task 8: Public submission route — `4004aec`. `POST /api/public/intake`. Sibling of `/api/client/intake` with `created_by_role='anonymous'` set in code. Dropped vestigial `tokenHeader` line per the plan's own comment. - [ ] Task 9: Minimal intake layout - [ ] Task 10: The public intake page - [ ] Task 11: The public wizard - [ ] Task 12: The "thanks" page - [ ] Task 13: Card submitted-by badge - [ ] Task 14: Owner actions for intake links - [ ] Task 15: The intake links panel - [ ] Task 16: Wire the panel into the admin page - [ ] Task 17: Integration tests — the public route - [ ] Task 18: Integration tests — the owner UI actions - [ ] Task 19: Full verification ## Plan 8b — PWA shell - [ ] Task 1: The source SVG - [ ] Task 2: The icon build script - [ ] Task 3: The manifest - [ ] Task 4: The service worker - [ ] Task 5: The manifest link in the intake layout - [ ] Task 6: Manual install verification - [ ] Task 7: Final test run ## Plan 8c — Per-project markdown context - [ ] Task 1: Schema - [ ] Task 2: The intake context extension - [ ] Task 3: The prompt modules - [ ] Task 4: The prompt tests - [ ] Task 5: The owner editor - [ ] Task 6: Wire the editor into the admin page - [ ] Task 7: Full verification