Build Log · July 2, 2026

Steady Me + Give Me 20 Minutes — Jan's Respite Pillars

Shipped two real-time caregiver-respite features on Rick's portrait page: an in-the-moment calming button, and a one-shot handoff so Jan can leave the room for a bit — both pressure-tested through the Crucible before building.

  • Known
  • Feature
  • Ethics
  • Crucible
new Council-reviewed features shipped
2

new Council-reviewed features shipped

new DB table (takeover_sessions)
1

new DB table (takeover_sessions)

new public no-login routes
2

new public no-login routes

iterative redesigns on the Recent Notes collapse
3

iterative redesigns on the Recent Notes collapse

Timeline

  1. Start

    Ignition + Charge — Steady Me

    Zeb pasted a GPT-drafted design for an in-the-moment 'HELP' button, reframed softer per the pasted exchange

  2. Early

    Crucible Council — architect + steward

    Pressure-tested the AI-authorship boundary and cut escalation/notify from v1

  3. Mid

    Steady Me shipped, then Recent Notes redesigned 3x

    Live feedback loop: collapse the list -> collapse the whole section -> keep quick-add always visible, toggle top-right

  4. Late

    Give Me 20 Minutes — second Charge, second Council pass

    architect + ux personas recommended reusing existing token/entryType patterns and cutting the mood picker

  5. Close

    Post-build Crucible audit + wrap

    Confirmed shipped features matched Council recommendations before closing

What shipped

  • SteadyMePanel.tsx — real-time grounding button on Rick's portrait page: calm/breathing screen, then one suggested phrase + one action pulled only from approved entryEnrichments (what_helps), generic disclosed fallback when nothing approved yet, closing affirmation on both exit paths

  • GiveMe20Panel.tsx + takeover_sessions DB table + /takeover/[token] public route (no login) — Jan creates a one-shot, time-boxed handoff session (helper name + 10/20/30 min), gets a shareable link, helper sees a takeover card (say/do/avoid/go-get-someone-if), optional 'What worked?' step writes a handoff_note

  • /api/portraits/[id]/takeover (authed, creates session) and /api/takeover-complete (public, closes session + optional note)

  • proxy.ts — added /takeover(.*) to public routes

  • RecentNotesSection.tsx — collapsed the Recent Notes block behind one toggle after 3 rounds of live redesign; quick-add stays always visible, toggle sits top-right aligned with the heading, everything else (suggestions, notes list, See earlier notes, Day history) hides behind it

  • Fixed a real soft-delete gap found during self-review: the /takeover page's entry query was missing isNull(portraitEntries.deletedAt), which would have let deleted what_helps/what_hurts entries surface on a public no-login card

  • Fixed broken pronoun/name logic caught during self-review in the takeover card's 'go get someone if' copy and greeting line (session.helperName.split(' ')[0] breaks for free-text names like 'the neighbor')

“ok, good. i kinda liked the show 7 notes / hide better when it was in the top right aligned with the header...”
— Zeb, closing out the third Recent Notes redesign round