Mobile Day Rituals — Phone-Native Rebuild

For Agents

Replaces the old StandupStreamSheet (a 90vh sheet that crammed 5 desktop standup components together). Now four focused phone-native sheets, each self-contained, each fetching its own data through the relevant hooks. Wired in MobilePlan with time-aware CTAs. See mobile-native-feel for the surrounding architecture.

Why the rebuild

The original StandupStreamSheet (commit 9f39ff3) reused desktop components inside a single tall sheet. On a phone this:

  • Forced the user to scroll past unrelated controls to reach the next step
  • Inherited desktop popup-driven inputs (StandupInput opens an overlay popup) that fight iOS keyboard behavior
  • Made the morning intake form (one prompt at a time, varying datapoint types) feel cramped

Replacement (commit b7626d9): 4 focused sheets, each phone-native, each fetched independently.

The Four Sheets

SheetPurposeInputs
MorningCheckinSheetSingle scrollable form per datapointNUMBER pill rows (44px tap), SCALE round-circle rows (0..max), BOOLEAN big two-button toggle, TEXT autosizing textarea
StandupNotesSheetPhone journal feedBottom-pinned composer (NOT desktop popup) + type chips (GOAL=copper, BLOCKER=amber, WIN=emerald)
LunchCheckinSheetMid-day checkinGoals checklist + free-text + Check-in stamp
EveningReflectionSheetEnd-of-dayAutosizing summary textarea + day-in-numbers stat strip + Close-day stamp

Phone-Native Input Controls (Datapoint Types)

TypeControl
NUMBERRow of 44px-tap pills, value rendered prominently
SCALE (0..max)Round-circle row, all values visible at a glance
BOOLEANTwo-column big-button toggle (Yes / No)
TEXTAutosizing textarea (grows with content)

Wiring in MobilePlan

MobilePlan owns 5 separate sheet states (one per ritual + a Block edit sheet). CTAs are time-aware:

CTA visible when
Morning ritual!morning_completed_at
Lunch checkin — morning done && lunch not done
Evening reflection — morning done && evening not done
Standup notes — always

Self-contained sheets

Each sheet fetches its own data via the relevant hooks (useDatapointConfigs, useDatapoints, useUpsertDatapoint, etc.). No orchestration in MobilePlan — it just opens/closes them.

Type-Chip Brand Tints

StandupNotesSheet chips use brand-tinted backgrounds (NOT plain bg-zinc-100):

TypeBackgroundTextSource
GOALcopper-tintedwarm-blacklevandor-brand
BLOCKERamber-tintedamber-900semantic
WINemerald-tintedemerald-900semantic