Library
What's new
A running log of changes to the atlas. Newest first.
- Content
v1.3.0 — case-15: vestibular paroxysmia
Case bank grew from 14 to 15 with the addition of case-15 (vestibular paroxysmia). A 58-year-old engineer with brief, frequent vertigo attacks, normal interictal exam, normal CDP, and MRI showing neurovascular cross-compression of the right vestibulocochlear nerve. The SBA tests recognition against BPPV (wrong duration and provocation), Ménière's (wrong duration and missing audiometric component), and vestibular migraine (wrong duration and missing migraine history). Bárány Society 2016 criteria for VP added as a new reference (Strupp et al.). The case joins the family of 'normal CDP as teaching point' cases (case-12 cervicogenic, case-14 SCD, case-15 VP) — a deliberate cluster that teaches what CDP cannot do as part of teaching what it can.
- Chore
v1.2.1 — contributor guide
CONTRIBUTING.md added at the project root with step-by-step instructions for adding clinical cases, quiz questions, glossary terms, references, disease archetypes, and corrections to existing prose. Written for clinicians and trainees without web-development experience: setup with a colleague's help, file-by-file orientation, workflow with npm test integrity checks, common-mistakes section, and getting-unstuck guidance. The atlas was always designed to be edited by clinicians; this is the missing documentation that makes that real. README updated to point at it.
- FeatureContent
Phase 9 — audiogram companion
Audiogram component added on disease pages and case pages where audiometry is part of the clinical picture. Hand-rolled SVG with standard conventions: red O for right ear air conduction, blue X for left ear air conduction, brackets for bone conduction, log-spaced frequency axis (250 Hz–8 kHz), downward-positive dB HL axis with severity bands (Normal / Mild / Moderate / Mod-severe / Severe / Profound) labelled at the right. Per-archetype audiometric signatures authored for: normal hearing (paired with normal CDP as baseline), vestibular neuritis (normal hearing — the audiogram absence supports the diagnosis), Ménière's (low-mid frequency SNHL on the affected side), vestibular schwannoma (asymmetric high-frequency SNHL), bilateral vestibulopathy after meningitis (severe bilateral SNHL — cochlear implantation candidacy implication), and age-related multifactorial decline (symmetric presbycusis). Special-case SCD audiogram for case-14 showing low-frequency air-bone gap with supranormal bone conduction — the third-window signature that CDP can't detect. The audiogram appears as a companion figure beneath the CDP figures, with a 2–4 sentence interpretation tying the two signatures together. Archetypes without a meaningful audiometric signature (BPPV, PPPD, central, vestibular migraine, aphysiologic) intentionally don't show an audiogram — silence is the right signal.
- Content
Phase 8 — quiz and case bank expansion
Quiz bank grew from 24 to 40 questions, biased toward Trainee and Clinician levels so the Leitner deck cycles more substantively. New questions cover descending motor pathways, age-adjusted score interpretation, large trial-to-trial variability, surface-dependent patterns from peripheral neuropathy, prolonged MCT workup, compensation in chronic peripheral loss, directional ADT asymmetry, persistent neuritis sequelae, interictal Ménière's versus acute neuritis, visual preference in PPPD, cerebellar atrophy presenting first on ADT, BPPV with CDP, harness artefact handling, composite test-retest reliability, schwannoma baseline, and the limits of medico-legal interpretation. Clinical case bank grew from 8 to 14 cases, filling four gaps: paediatric bilateral vestibulopathy after meningitis, persistent post-concussion dizziness with PPPD picture, multifactorial elderly faller (using a new age-related-multifactorial archetype), cervicogenic dizziness with normal CDP, post-resection compensation at 6 weeks, and superior canal dehiscence syndrome. Two cases use the normal archetype as a deliberate teaching point: a normal CDP is itself an informative finding when the clinical question is whether the test contributes diagnostically. One new disease archetype (age-related-multifactorial) joins the trainer rotation.
- ContentFeature
Phase 7 — content, figures, v1.0
Module prose authored for all 16 modules and 81 sections — every section that was 'awaiting authoring' now has paragraphs at its declared reading level. The level filter and audio narration systems finally have content to layer and read. Two new inline figures: an animated long-loop reflex-arc diagram on the anatomy module (pulses transit foot → spinal cord → brainstem → spinal cord → foot, with round-trip time labelled as the MCT latency), and an interactive electrode placement map on the technique module showing the four common surface EMG sites for posturography. Both respect prefers-reduced-motion. Print-all now compiles real prose rather than placeholders. README rewritten as a working v1.0 reference with full project layout, engineering rules, deployment guide, and per-data-file authoring guide. This is the v1.0 release.
- FeatureContent
Phase 6 — level filter, narration, tracking
Reading-level filter actually filters. CSS rules keyed off html[data-level] × [data-levels] hide off-level sections; the data-level attribute is set pre-hydration so there's no flash of wrong sections. Module pages show a 'Showing X of Y sections · Trainee' chip below the title. Audio narration: 5 timestamped scripts (anatomy, technique, normal, SOT, vestibular neuritis) with collapsible inline player. The transcript is canonical — HEAD-checks the audio file and falls back to transcript-only when no MP3 is hosted. Cues are clickable to seek; active cue highlights as audio plays. Visit tracking: page-visibility-aware accumulator that only counts time while the tab is visible, flushes every 30s and on unmount. Two new top-strip metrics (Chapters visited, Time on atlas) and a per-chapter time-spent table on /progress sorted by total time. Live recording loop on the SOT simulator: a checkbox that runs a 30 fps sweep cursor across every condition's trace and reseeds noise every 20 seconds. Honours prefers-reduced-motion. The pulsing red dot beside the label confirms the loop is active.
- Feature
Phase 5 — polish: print, search, bookmarks
Print system: per-module Print button using window.print(), A4 page geometry with 18×16 mm margins, break-inside-avoid on figures and cards, all reading levels forced visible on paper. /print-all aggregates every module outline, all 8 cases with full SBA rationales, the 24-question quiz as an answer key, the glossary, and the references into a single printable document. ⌘K / Ctrl+K search palette mounted globally, wired to the existing unified search index with arrow-key navigation and aria-activedescendant. Sidebar Search button (platform-aware ⌘ vs Ctrl hint) opens the palette. What's new amber badge on the sidebar marks unseen changelog entries; visiting the changelog clears it. Bookmarks: glossary terms have a star toggle (persisted to localStorage), surfaced on /progress with a definition snippet. Bookmarks survive the progress reset by design — they're curation, not performance.
- FeatureContent
Phase 4 — interactive routes
/quiz with Browse, Leitner spaced review (5 boxes, 10min/1d/3d/7d/21d intervals), 3-in-a-row streak review, and Timed mode (10 questions in 5 minutes, personal best persisted). 24 hand-authored single-best-answer questions, each option with its own rationale, deep-linked to module anchors. /cases with 8 hand-authored clinical cases bound to disease archetypes for deterministic figures; per-case progress, prev/next nav, level-filtered index. /practice pattern trainer with infinite random cases, finding checklist grouped by domain, graded reveal counting correct/missed/over-called. /compare side-by-side comparison with overlay and panels-vs-normal modes. /progress dashboard surfacing every locally-stored metric with confirmation-gated reset.
- FeaturePerformance
Phase 3 — simulators and figures
Hand-rolled SVG simulators land: SOT six-condition interactive with archetype picker, live sway traces, fall detection, and computed sensory ratios. MCT translation figure with platform onset, latency band, and amplitude marker. ADT adaptation curve across 5 trials with normal-vs-non-adapting tone. SOT pattern-bars comparison figure embedded on every disease module page. All theme-aware via CSS custom properties. Pure-math trace synthesis in lib/sim/traces.ts; 30 unit tests cover determinism and plausibility.
- ContentChore
Phase 2 — content architecture
Disease archetypes, finding vocabulary, glossary seed list, references, and module outlines authored as pure-TS data layers. No UI work yet — the data binds to Phase 3 simulators and Phase 4 interactive routes.
- FeatureChore
Phase 1 — atlas scaffold
Next.js 16 + React 19 App Router scaffold. Theming with pre-hydration flash-of-wrong-theme prevention, reading-level toggle, SSR-safe localStorage via useSyncExternalStore, sidebar, footer with disclaimer, 28 statically-rendered routes.