ForgeKitFORGEKIT

Build Log

Hearth: Phase 3 UI

June 22, 2026

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.

HearthMulti-memberUIAuth
3
new routes
1
auth bridge helper
5
access helpers wired
0
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.

Session close
Hearth: Phase 3 UI — June 22, 2026 · ForgeKit