Email verification is no longer enforced (see backend), and sign-up now
auto-signs-in, so route to clinic onboarding instead of /verify-email.
Update CLAUDE.md: the app now talks to ../backend (auth + patient API),
route protection via proxy.ts, and build/type-check guidance.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Connects the UI-only app to the new backend over Better Auth + a small
patient API client, replacing the in-memory fixture and placeholder identity.
- Better Auth React client (lib/auth-client.ts) + shared access-control
roles; API client (lib/api-client.ts) sending credentials cross-origin.
- Designed (auth) route group: login, signup, verify-email, forgot/reset
password, clinic onboarding, and accept-invite.
- proxy.ts (this Next's renamed middleware) optimistic redirect + an
authoritative client AppAuthGuard requiring a session and active clinic.
- Real identity in nav-user (useSession + sign out); the unused team
switcher repurposed as an organization (clinic) switcher; Care-team
settings tab manages members and invitations.
- lib/patients.ts now calls the org-scoped API (types unchanged); patients
table and create/edit dialog updated for async create/update.
- next.config: standalone output + Dockerfile for containerized runs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Patients: new /patients directory table (name, MRN, age·sex, status,
last seen, allergies) with search + Add patient; clicking a row opens
the record in the chat via /?patient=<#>. chat-panel reads that search
param (Suspense-wrapped) and runs the lookup once on arrival. Sidebar
"Patients" now links to /patients; lib/patients gains listPatients().
- Settings: re-themed to clinical tabs (Profile · Records · Signing ·
Care team · Developers) — clinician profile, patient notifications,
patient-owned-storage/signed-records features, and a Signing key panel.
Same layout/components, only content changed.
- Sidebar footer: Polar-style NavUser (avatar + name + chevron) opening a
menu upward — Settings · Docs & GitHub · Theme · Log out. Collapsed
("locked"): avatar only, name on hover (tooltip), menu opens to the
right. Placeholder identity (no auth yet).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extensions like ColorZilla inject attributes (cz-shortcut-listen) into
<body> before React hydrates, causing a benign hydration mismatch.
suppressHydrationWarning on <body> is the standard fix; it only ignores
attribute diffs on <body> itself, not its children.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- globals.css: lighten --background (content panel) and deepen --sidebar so
the panel reads as a lighter neutral charcoal floating on a near-black rail,
matching the Polar reference. Pure lightness change; panel stays below
--card so cards still pop.
- patient-cards.tsx: row uses items-stretch so all cards share one height
(no more ragged/taller cards); add no-scrollbar to hide the horizontal
scrollbar while keeping scroll.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- globals.css: thin dark-themed scrollbar (Firefox + WebKit) so scroll
areas no longer show the white default; `no-scrollbar` regions still win.
- patient-cards.tsx: render the cards in a horizontal scroll row (each
w-80 shrink-0 snap-start), loading skeletons included.
- chat-input.tsx: wire the controls — Attach opens a file picker with
removable chips; Access / response mode / specialty / facility / time
range are real DropdownMenu radio selectors (via a SelectPill helper)
that remember the choice. Mic stays visual-only for now. Layout/styling
unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- chat-panel.tsx: `/10293` now triggers a lookup, not just `/patient 10293`
(regex accepts an optional `patient` keyword; matches digits only so
`/help` etc. still fall through to the normal reply).
- app/layout.tsx: make <body> a fixed h-dvh, overflow-hidden shell so the
page no longer shows its own scrollbar; each route's SidebarInset already
scrolls internally (chat = overflow-hidden, settings = overflow-y-auto).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>