Skip to content

New UI#21

Merged
Seryiza merged 26 commits into
mainfrom
new-ui
Apr 24, 2026
Merged

New UI#21
Seryiza merged 26 commits into
mainfrom
new-ui

Conversation

@Seryiza
Copy link
Copy Markdown
Contributor

@Seryiza Seryiza commented Apr 24, 2026

No description provided.

Seryiza and others added 21 commits April 24, 2026 15:23
Replace the admin-grade UI with the warm-paper design system across the
5 primary pages (Dashboard, Inbound Messages, Simulate Sender, Unmapped
Codes, Terminology Map); Accounts and Outgoing Messages keep their
existing bodies inside a gray-card frame. Everything server-rendered on
the existing Bun+TypeScript stack, no client build step — htmx for
partial swaps, Alpine for local state, Tailwind v4 vendored.

Highlights:
- Dashboard: scripted demo runner with 4-step live stepper + ticker,
  worker-health dots, coverage / messages-processed KPIs.
- Inbound Messages: list + htmx detail pane with 4 tabs (Structured /
  Raw HL7 / FHIR resources / Timeline via Aidbox \`_history\`); JSON
  syntax highlighting + scrollable viewer on FHIR tab; Replay button
  with loading feedback; "processing" animated chip replaces static
  "pending".
- Unmapped Codes: queue + editor split, LOINC suggestion scoring
  (substring-only for v1), manual-search typeahead (6 rows), msg count
  now reflects real waiting-message count (not Task-dedupe 1-always),
  partial URLs redirect non-htmx hits.
- Terminology Map: KPI strip, facet popovers, table + detail two-pane,
  Add/Edit modal with htmx-aware CRUD + filter preservation + error
  banner, LOINC typeahead anchored with position:fixed to escape
  modal overflow clipping. Click-to-select row highlight Alpine-driven.
- Dead code purge: deletes the legacy renderLayout/renderNav scaffolding
  and the old Tailwind pages (code-mappings, mapping-tasks, mllp-client,
  the Inbound half of messages.ts), renames shared-layout.ts →
  hl7-display.ts.

See ai/tickets/2026-04-23-ui-design-system-refactor.md for the full
plan, per-task review notes, and deferred follow-ups.
…ilot

- Inbound list: stable snapshot + per-row live status via Alpine
  setInterval (hx-trigger='every 5s' stops firing after outerHTML
  self-swap). Detail header self-polls same way so Replay flips chip
  to terminal state without reload.
- Paginator: Aidbox page=N (HAPI's _getpagesoffset is not supported);
  page size 20 to fit a typical laptop viewport.
- Filter chips replaced with column-header popovers on TYPE and STATUS
  (server-side via ?type=/?status= URL params).
- 'Received today' now uses local midnight (was UTC, dropping late-
  evening-local rows in positive-UTC zones).
- Terminology: autocomplete=off + role=searchbox on the main search to
  kill browser autosuggest; revert type=search so hx-preserve keeps
  focus across swaps. Hide the 'Created: unknown' block when the
  ConceptMap has no timestamp.
- Elm-style sound-typing pilot on Inbound: new
  src/ui/domain/incoming-message.ts introduces a branded MessageId,
  a tagged-union ParsedIncomingMessage with 8 variants (each carrying
  exactly the fields its status guarantees), a boundary parser, and
  assertNever for exhaustiveness. Readers in inbound.ts and
  inbound-detail.ts consume the parsed type; switches end in
  assertNever so adding a new variant fails to compile at every site
  that forgot it. Two @ts-expect-error tests document the
  compile-time guarantees.

Typecheck clean. 1947 unit tests pass (+10 net).
ipasechnikov and others added 5 commits April 24, 2026 15:29
Workers now check for unprocessed messages every 1s instead of 5s, making
batch pipelines move 5x faster. Standalone services still default to 60s.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@Seryiza Seryiza merged commit 99ca45d into main Apr 24, 2026
1 check failed
@ipasechnikov ipasechnikov deleted the new-ui branch April 24, 2026 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants