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
calculators.html
catchup.html
chart.html
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
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
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
learning.html
notes.html
pe-guide.html
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
soap.html
vaxschedule.html
wellvisit.html Match TTS voices to the selected LiteLLM model 2026-07-30 17:34:34 +02:00