Feat: v2.7 — sidebar UX, well visit subtabs, larger boxes, sick visit reorder

- Remove duplicate milestones sidebar button; well visit button now works correctly
- Move Sick Visit sidebar entry to just below Well Visit (before Vaccine/Catch-Up)
- Sick Visit remains its own standalone tab (not a subtab)
- Well Visit subtabs: By Visit Age | Milestones | SSHADESS (12+) | Visit Note
- Dramatically larger transcript boxes (min-height 240px, max-height 600px)
- Dramatically larger note output boxes (min-height 480px) — beautiful scrollable
- Collapsible desktop sidebar with localStorage persistence
- Update README with full feature list
- Bump docker-compose to v2.7
This commit is contained in:
Daniel Onyejesi 2026-03-22 19:14:41 -04:00
parent 78730a669f
commit 38d07ff37f
4 changed files with 103 additions and 99 deletions

View file

@ -9,12 +9,19 @@ AI-powered clinical documentation platform for pediatric medicine. Generates HPI
- **Hospital Course Generator** — paste progress notes, AI generates prose, day-by-day, organ-system (ICU), or psych format summaries - **Hospital Course Generator** — paste progress notes, AI generates prose, day-by-day, organ-system (ICU), or psych format summaries
- **Chart Review / Precharting** — summarize outpatient, subspecialty, and ED notes into a precharting brief - **Chart Review / Precharting** — summarize outpatient, subspecialty, and ED notes into a precharting brief
- **SOAP Note Generator** — full SOAP or subjective-only from dictation - **SOAP Note Generator** — full SOAP or subjective-only from dictation
- **Developmental Milestones** — AAP/Nelson milestone tracker with narrative, structured list, or 3-sentence summary output - **Well Visit / Preventive Care** — AAP 2025 Bright Futures periodicity; vaccines, screenings, billing codes; By Visit Age, Milestones, SSHADESS (12+), and Visit Note subtabs
- **Sick Visit Note** — quick documentation with auto-suggested ROS and PE systems from chief complaint
- **Developmental Milestones** — AAP/Nelson milestone tracker (birth11 years) with narrative, structured list, or 3-sentence summary; copy to Visit Note
- **SSHADESS Assessment** — adolescent psychosocial screening for ages 12+; auto-fills into Visit Note
- **Vaccine Schedule** — full AAP immunization schedule reference
- **Catch-Up Schedule** — catch-up immunization guide
- **Plain text output** — all documents generated without markdown, ready to paste into any EHR - **Plain text output** — all documents generated without markdown, ready to paste into any EHR
- **Read Aloud** — browser TTS reads generated documents; ElevenLabs (Adam voice) supported - **Read Aloud** — browser TTS reads generated documents; ElevenLabs (Adam voice) supported
- **Copy & Export** — one-click copy or export to Nextcloud - **Copy & Export** — one-click copy or export to Nextcloud
- **Refine & Shorten** — edit any document with plain-language AI instructions - **Refine & Shorten** — edit any document with plain-language AI instructions
- **Per-tab model selector** — choose fast vs. smart vs. reasoning models per task - **Per-tab model selector** — choose fast vs. smart vs. reasoning models per task
- **Collapsible sidebar** — desktop sidebar collapses to icon rail, state persisted
- **Save & Resume** — encounters saved with unique IDs; persist across page refresh
- **Admin Panel** — user management, registration control, audit logs - **Admin Panel** — user management, registration control, audit logs
- **2FA** — TOTP-based two-factor authentication - **2FA** — TOTP-based two-factor authentication
- **Multi-provider AI** — OpenRouter, AWS Bedrock, or Azure OpenAI - **Multi-provider AI** — OpenRouter, AWS Bedrock, or Azure OpenAI

View file

@ -1,6 +1,6 @@
services: services:
pediatric-scribe: pediatric-scribe:
image: danielonyejesi/pediatric-ai-scribe-v3:v2.6 image: danielonyejesi/pediatric-ai-scribe-v3:v2.7
ports: ports:
- "3552:3000" - "3552:3000"
env_file: env_file:

View file

@ -98,7 +98,7 @@ body{font-family:'Inter',system-ui,sans-serif;background:var(--g50);color:var(--
.card-header h3{font-size:13px;font-weight:600;color:var(--g700);display:flex;align-items:center;gap:6px;} .card-header h3{font-size:13px;font-weight:600;color:var(--g700);display:flex;align-items:center;gap:6px;}
/* EDITABLE BOX */ /* EDITABLE BOX */
.editable-box{min-height:100px;max-height:280px;overflow-y:auto;padding:12px 16px;font-size:13px;line-height:1.8;outline:none;} .editable-box{min-height:240px;max-height:600px;overflow-y:auto;padding:14px 18px;font-size:13px;line-height:1.8;outline:none;border-radius:0 0 var(--radius) var(--radius);}
.editable-box:empty::before{content:attr(data-placeholder);color:var(--g400);} .editable-box:empty::before{content:attr(data-placeholder);color:var(--g400);}
/* NOTE ENTRY (hospital course, chart review) */ /* NOTE ENTRY (hospital course, chart review) */
@ -148,7 +148,7 @@ body{font-family:'Inter',system-ui,sans-serif;background:var(--g50);color:var(--
.output-card.hidden{display:none;} .output-card.hidden{display:none;}
.output-header{background:var(--green-light);border-bottom-color:var(--green);} .output-header{background:var(--green-light);border-bottom-color:var(--green);}
.output-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;} .output-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.output-text{padding:16px;font-size:13px;line-height:1.8;outline:none;min-height:80px;white-space:pre-wrap;} .output-text{padding:20px 24px;font-size:13px;line-height:1.9;outline:none;min-height:480px;white-space:pre-wrap;overflow-y:auto;}
.model-tag{font-size:10px;padding:2px 7px;background:var(--g200);border-radius:4px;color:var(--g600);} .model-tag{font-size:10px;padding:2px 7px;background:var(--g200);border-radius:4px;color:var(--g600);}
/* REFINE BAR */ /* REFINE BAR */

View file

@ -174,14 +174,14 @@
<span>SOAP Note</span> <span>SOAP Note</span>
</button> </button>
<span class="sidebar-section-label">Pediatric</span> <span class="sidebar-section-label">Pediatric</span>
<button class="tab-btn" data-tab="wellvisit" data-subtab="milestones">
<i class="fas fa-baby"></i>
<span>Milestones</span>
</button>
<button class="tab-btn" data-tab="wellvisit"> <button class="tab-btn" data-tab="wellvisit">
<i class="fas fa-calendar-check"></i> <i class="fas fa-calendar-check"></i>
<span>Well Visit</span> <span>Well Visit</span>
</button> </button>
<button class="tab-btn" data-tab="sickvisit">
<i class="fas fa-thermometer-half"></i>
<span>Sick Visit</span>
</button>
<button class="tab-btn" data-tab="vaxschedule"> <button class="tab-btn" data-tab="vaxschedule">
<i class="fas fa-table"></i> <i class="fas fa-table"></i>
<span>Vaccine Schedule</span> <span>Vaccine Schedule</span>
@ -190,10 +190,6 @@
<i class="fas fa-rotate"></i> <i class="fas fa-rotate"></i>
<span>Catch-Up Schedule</span> <span>Catch-Up Schedule</span>
</button> </button>
<button class="tab-btn" data-tab="sickvisit">
<i class="fas fa-thermometer-half"></i>
<span>Sick Visit</span>
</button>
<span class="sidebar-section-label">Account</span> <span class="sidebar-section-label">Account</span>
<button class="tab-btn" data-tab="settings"> <button class="tab-btn" data-tab="settings">
<i class="fas fa-cog"></i> <i class="fas fa-cog"></i>
@ -1316,7 +1312,7 @@
</div> </div>
</div> </div>
<div style="padding:8px 16px;"> <div style="padding:8px 16px;">
<div id="sick-transcript" class="editable-box" contenteditable="true" style="min-height:80px;" data-placeholder="Transcript appears here. Physician can dictate the HPI and encounter details."></div> <div id="sick-transcript" class="editable-box" contenteditable="true" data-placeholder="Transcript appears here. Physician can dictate the HPI and encounter details."></div>
</div> </div>
</div> </div>
@ -1374,6 +1370,7 @@
<button class="btn-sm btn-ghost" id="sick-shorten-btn"><i class="fas fa-compress"></i> Shorter</button> <button class="btn-sm btn-ghost" id="sick-shorten-btn"><i class="fas fa-compress"></i> Shorter</button>
</div> </div>
</div> </div>
</section> </section>
<!-- ===== TAB: SETTINGS ===== --> <!-- ===== TAB: SETTINGS ===== -->