Sharing lived in a settings panel and a menu three levels deep. That is where a grant is managed and not where it is used: somebody who opens this app every morning to check on a parent does not go through settings to do it, and the design standards draw the same line, settings being account utilities rather than feature destinations. So the dashboard carries one compact card listing the records shared with this account, each row a one-tap switch through the existing flow. It is a doorway and not a preview. No numbers, no last reading. A slice of somebody else's record on the delegate's own dashboard would sit outside the one frame the design leans on, the banner naming the record you are inside. An account nobody has shared with sees nothing at all. The other half is the receipt: a reading, a lab result or a dose recorded under a switch now says which record it landed in, because "Saved" alone is the confirmation somebody acting for another person does not need. The undo on the dose toast goes at the same time, since a delegate cannot remove what they recorded and an undo they can see is one the server refuses. Also here: the lines the owner's activity view owes each admitted verb, as a translated mapping with a fallback, so a later release filing a verb it has never heard of still renders a sentence rather than a blank row.
src/components/
React components. The UI primitives are shadcn/ui (new-york style, zinc base) over Radix + Tailwind 4 + Lucide; everything above the primitives is feature-grouped by surface. Components are server components unless they need a hook, state, or browser API, in which case they open with "use client". Charts use Recharts 3 — replacing the chart library requires explicit approval.
Primitives and shell
ui/— shadcn/ui primitives (button, dialog, sheet, table, …). Generated by the shadcn CLI; keep edits minimal and on-style.layout/— the app shell: sidebar, topbar, bottom nav.providers.tsx,version-poller.tsx— top-level context providers and the self-healing stale-shell poller.i18n/— translation context + locale switcher.
Feature groups
insights/— insight status, assessment cards, Coach surface, advisor cards (the largest group).medications/— medication cards, the schedule wizard, intake timeline, detail history.settings/— the section components behind each settings page.measurements/,mood/,dashboard/— entry forms, lists, dashboard tiles.charts/— Recharts wrappers.monitoring/— Umami / GlitchTip client bootstrap.gamification/,targets/,comparison/,doctor-report/,clinician/,onboarding/,admin/— the remaining per-surface groups.
Conventions
Kebab-case filenames; React component exports stay PascalCase regardless. (A handful of PascalCase-filename outliers under medications/ + onboarding/ are pre-existing drift, noted in ../../CLAUDE.md.) Every t() call needs a matching key in messages/en.json — guarded by i18n-call-site-coverage.test.ts. Data reads go through TanStack Query with keys from @/lib/query-keys and unwrap (await res.json()).data. Tests live in __tests__/.