Build Log · June 22, 2026
Hearth: Phase 3 UI
Wired /today to real access helpers, built /me, /people, /people/[profileId], and added the capture destination selector — HOUSEHOLD_ID hardcode gone from the critical path.
- Hearth
- Multi-member
- UI
- Auth
- new routes
- 3
- auth bridge helper
- 1
- access helpers wired
- 5
- tsc errors
- 0
new routes
auth bridge helper
access helpers wired
tsc errors
Timeline
Start
Ignition + orientation
Read last retro, implementation plan, access.ts, existing pages
20m
getHouseholdForUser()
Auth bridge added to lib/access.ts — maps Clerk userId to { householdId, memberId }
35m
/today wired
auth() + getHouseholdForUser() + getSharedHearthItems() — HOUSEHOLD_ID gone
50m
/me built
Personal view: getMemberPersonalItems(), grouped by type
1h
/people + /people/[id]
Profile list + profile page using getProfileItems()
1.5h
Capture destination
Page loads spaces + profiles, NotebookList gets destination selector
1.75h
Nav + tsc
My Space + People added to nav. tsc --noEmit: clean.
What shipped
lib/access.ts — getHouseholdForUser(userId): maps Clerk userId to { householdId, memberId }
/today/page.tsx — replaced hardcoded HOUSEHOLD_ID with auth() + getHouseholdForUser() + getSharedHearthItems()
/me/page.tsx — personal view: getMemberPersonalItems(), shows private tasks + assigned items, grouped by type
/people/page.tsx — profile list grouped by type (adult/child/pet/house/vehicle), links to profile pages
/people/[profileId]/page.tsx — profile page: getProfileItems(), today + upcoming items, 404 on unknown profileId
/capture/page.tsx — loads sharedSpace + personalSpace + profiles, builds typed destination[] array
capture/actions.ts — routeToDate accepts optional { spaceId, visibility } destination
NotebookList.tsx — CaptureDestination type exported, destinations prop, selector renders when >1 option
layout.tsx — My Space (/me) + People (/people) added to desktop sidebar + mobile overflow nav
“The hardcode is gone. The auth bridge is in. The household knows who you are.”