pediatric-ai-scribe-v3/public/components
Daniel 39c1663334 feat: invite-only registration
registration_enabled was a single switch: open to anyone, or closed to
everyone. This adds the setting an operator actually wants in between — open
to people you invited.

A code is single-use, expires (7 days by default, 90 maximum), and can be
revoked or deleted. It is stored hashed with only its last four characters
kept, because an invite grants account creation and a database dump should
not hand someone a working one. The code is readable exactly once, in the
response that creates it.

The claim is a single conditional UPDATE carrying every condition, so two
registrations racing the same code cannot both succeed. It happens after the
account exists, so a code is never spent on a failed registration — and if
the race is lost, the just-created account is removed rather than left behind
as a free registration. The rejection never says which of the four reasons
applied; distinguishing them would tell someone probing codes which guesses
were closer.

Codes avoid I, L, O and U so they survive being read aloud or copied off a
screen, and matching ignores case and separators.

The sign-up field appears only when the server says a code is required. The
admin card creates, lists, revokes and deletes, and carries the toggle.

Verified against the live database: create, claim, second claim refused,
unknown code refused, revoking a used code refused, delete. 684 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dv6sqaY6Vq3ChZHMem3cnU
2026-09-10 23:12:07 +02:00
..
admin-docs.html feat: ED multi-stage UX, extensions polish, docs viewer + application-logic docs 2026-04-28 03:09:38 +02:00
admin.html feat: invite-only registration 2026-09-10 23:12:07 +02:00
assistant.html fix: stop iOS zoom, compact model control, quieter composer, better search 2026-09-10 15:26:43 +02:00
bedside.html feat: don't-miss tooltip after notes + bedside suture selector 2026-04-28 03:09:38 +02:00
calculators.html fix(nav): move image lightbox to index.html so NRP + seizure pathways 2026-04-23 18:58:38 +02:00
catchup.html Fix quiz SQL bug, security hardening, componentize HTML, speed improvements 2026-03-23 20:01:54 -04:00
chart.html v10: Local Whisper transcription, bigger text areas, flexible AI memory 2026-03-28 22:00:30 +00:00
cms.html feat: integrate durable image jobs/private assets into current core 2026-09-07 16:53:42 +02:00
diagrams.html stabilize assistant and add diagrams 2026-05-08 00:23:00 +02:00
dictation.html v10: Local Whisper transcription, bigger text areas, flexible AI memory 2026-03-28 22:00:30 +00:00
ed-encounter.html feat: ED multi-stage UX, extensions polish, docs viewer + application-logic docs 2026-04-28 03:09:38 +02:00
encounter.html Fix TTS axios/Vertex, generic toast, add stop button to encounter 2026-03-29 22:09:56 -04:00
extensions.html feat: add extension import preview 2026-05-08 22:26:53 +02:00
faq.html remove browser whisper transcription 2026-05-08 07:33:12 +02:00
hospital.html v10: Local Whisper transcription, bigger text areas, flexible AI memory 2026-03-28 22:00:30 +00:00
learning.html Render presentations as slides in Learning Hub viewer 2026-03-24 03:04:14 -04:00
notes.html feat: ED encounters + notes model selector; remove AI corrections; fix notes framing 2026-04-28 03:09:38 +02:00
pe-guide.html feat(pe-guide): Cardiovascular system with APTM auscultation SVG 2026-04-22 20:15:08 +02:00
settings.html fix: correct a false Settings claim; make every test child's stdout pure TAP 2026-09-10 15:41:44 +02:00
sickvisit.html v6.2: Session management, password change, audit logging, refine context, UI fixes 2026-04-08 20:27:45 +02:00
soap.html Add pause/stop buttons to SOAP note recording 2026-04-11 05:19:12 +02:00
vaxschedule.html Fix quiz SQL bug, security hardening, componentize HTML, speed improvements 2026-03-23 20:01:54 -04:00
wellvisit.html Match TTS voices to the selected LiteLLM model 2026-07-30 17:34:34 +02:00