Conversation
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).
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.