Files
vigilcare-records/docs/designs/design-doc.md
T
Trent 56e100a495
CI / backend (push) Successful in 6m31s
CI / frontend (push) Successful in 58s
feature: Design System, App Shell, and Login Redesign
2026-08-12 03:37:17 +08:00

2370 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VigilCare Records — UI/UX Design Specification
## 1. Product Design Direction
### Product character
VigilCare Records should feel:
* Clinical, but not sterile
* Enterprise-grade, but not visually heavy
* Trustworthy and controlled
* Optimized for repetitive daily workflows
* Extremely clear about data state
* Conservative around destructive or irreversible actions
* Fast for trained operators
* Understandable for occasional clinical users
The interface should communicate one central idea:
**Nothing becomes clinical truth until it has passed the required human review.**
The product should therefore visually distinguish:
1. Source evidence
2. Draft/extracted data
3. Verified data
4. Approved clinical data
5. Promoted/live data
These states should never become visually ambiguous.
---
# 2. Core Visual System
## 2.1 Overall visual language
Use a modern flat enterprise interface with:
* White primary surfaces
* Very light cool-gray application background
* Dark navy navigation
* Strong blue primary actions
* Restrained semantic colors
* Rounded but not excessively rounded containers
* Minimal shadows
* Thin borders
* High information density without appearing cramped
Avoid:
* Excessive gradients
* Glassmorphism
* Large decorative illustrations inside operational pages
* Purple-heavy AI/SaaS aesthetics
* Excessive pill-shaped UI
* Floating cards everywhere
* Oversized typography
* Large amounts of animation
VigilCare should look like software designed for a hospital workstation rather than a consumer productivity app.
---
# 3. Color System
## Primary
### VigilCare Navy
`#08254A`
Used for:
* Sidebar
* Logo backdrop
* Strong structural navigation
* Selected dark-mode elements
### Primary Blue
`#155EEF`
Used for:
* Primary CTA
* Selected navigation item
* Links
* Focus states
* Progress indicators
* Active tabs
### Primary Blue Hover
`#0B4FD6`
### Soft Blue
`#EEF4FF`
Used for:
* Selected rows
* Informational panels
* Active filters
* Non-critical status backgrounds
---
## Neutral
### Page Background
`#F7F9FC`
### Surface
`#FFFFFF`
### Strong Text
`#101828`
### Body Text
`#344054`
### Secondary Text
`#667085`
### Disabled Text
`#98A2B3`
### Border
`#E4E7EC`
### Strong Border
`#D0D5DD`
---
## Semantic colors
### Success
Foreground: `#079455`
Background: `#ECFDF3`
Use for:
* Verification passed
* Promotion complete
* Valid records
* Healthy service state
### Warning
Foreground: `#DC6803`
Background: `#FFFAEB`
Use for:
* Low-confidence OCR
* Approaching SLA
* Validation warning
* Uncertain comparison
### Error
Foreground: `#D92D20`
Background: `#FEF3F2`
Use for:
* Rejection
* Validation failure
* Critical discrepancy
* Failed upload
### Critical Clinical
Foreground: `#B42318`
Background: `#FEE4E2`
Reserve stronger red treatment for actual clinical urgency.
This distinction matters:
**A workflow error is not automatically a clinical emergency.**
---
# 4. Typography
## Font family
Primary:
**Inter**
Fallback:
`Inter, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`
For JSON/code:
**JetBrains Mono** or **Roboto Mono**
---
## Type scale
### Page title
28 px
Weight: 650700
Line height: 34 px
Examples:
* Data Entry
* Verification
* Clinical Approval
* Patient History
---
### Major section heading
20 px
Weight: 600
Line height: 28 px
---
### Card heading
16 px
Weight: 600
Line height: 24 px
---
### Field/section label
14 px
Weight: 600
---
### Primary body
14 px
Weight: 400
Line height: 2022 px
---
### Secondary/meta text
12 px
Weight: 400500
Line height: 18 px
---
### Table heading
12 px
Weight: 600
Uppercase should generally be avoided.
---
### Large metric
2832 px
Weight: 650
Used only for:
* Queue counts
* Throughput
* Accuracy
* Important dashboard numbers
---
## Typography rule
Clinical values should have more visual weight than labels.
Example:
BP
**138/88 mmHg**
not:
**BP**
138/88 mmHg
---
# 5. Spacing System
Use an 8 px base grid.
Core values:
* 4 px — micro spacing
* 8 px — related items
* 12 px — compact controls
* 16 px — standard component gap
* 24 px — card padding
* 32 px — section separation
* 4048 px — large page separation
Default page gutter:
**2432 px**
---
# 6. Border Radius
Avoid excessive softness.
### Small controls
6 px
### Inputs/buttons
8 px
### Cards
10 px
### Large containers
12 px
Avoid 2030 px consumer-style card radii.
---
# 7. Shadow System
Cards should rely mainly on borders.
Default card:
`border: 1px solid #E4E7EC`
Optional:
`box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04)`
Dialogs:
`0 8px 24px rgba(16,24,40,0.12)`
---
# 8. Application Shell
## Sidebar
Desktop width:
**208224 px**
Background:
VigilCare Navy.
### Structure
Logo
Main workspace:
* Dashboard
* Intake
* Cover Sheets
* Data Entry
* Verification
* Clinical Approval
* Live Capture
* Patient History
Supervision:
* Supervisor Dashboard
* Workload / Queues
* Reports
Administration:
* Users
* Master Data
* FHIR Explorer
* Configuration
* Audit Logs
Items should be conditionally shown based on permissions.
Do not show inaccessible features disabled unless there is a strong reason.
---
## Selected item
Background:
`#155EEF`
Text:
white
Icon:
white
Border radius:
68 px
---
## Header
Height:
64 px
Contains:
* Global search
* Alerts
* Help
* Current user
* Role
* Facility/site selector where applicable
Keep headers thin because most users need vertical workspace.
---
# 9. Global Interaction Principles
## Autosave
For entry workflows:
Display a subtle state:
`Saved 10:24:31`
Do not show repeated success notifications.
States:
* Saving…
* Saved
* Save failed
Failure must become visually prominent.
---
## Keyboard support
Data-entry users should be able to complete most tasks without the mouse.
Recommended:
* `Ctrl/Cmd + S` — save draft
* `Alt + N` — next document
* `Alt + P` — previous document
* `Alt + F` — flag/reject
* `Alt + V` — submit for verification
* `+/-` — zoom
* `R` — rotate when document viewer has focus
---
## Status labels
Use semantic labels consistently.
Examples:
* Uploaded
* In Entry
* Pending Verification
* Verification Rejected
* Pending Approval
* Approved
* Promoted
* Superseded
* Failed
Never use several different names for the same state.
---
# 10. LOGIN
## Objective
Authenticate the user and route them automatically according to authorization.
---
## Important correction
**Remove the role selector from the generated Login concept.**
The backend should determine roles through authentication/JWT claims.
A user should not select:
> Data Entry Operator / Verifier / Clinician
before authentication.
If a user possesses multiple authorized roles, role switching can happen **after login**.
---
## Layout
Two-column desktop layout.
### Left — Brand panel
Approximately 45%.
Dark navy.
Contains:
VigilCare Records logo
Headline:
**Digitize. Verify. Trust.**
Subtext explaining that scanned clinical records become governed structured data.
Optional restrained illustration:
Paper record → verified digital record.
Avoid feature marketing clutter.
---
### Right — Authentication
Centered card around 420460 px wide.
Fields:
Username/email
Password
Optional:
Remember device
Actions:
**Sign In**
Secondary:
Forgot password
Hospital SSO, if actually supported.
---
## Typography
Headline: 3842 px
Login heading: 28 px
Input labels: 14 px / 600
---
## Visual emphasis
The authentication form should dominate the right side.
No dashboard UI should be displayed prominently enough to distract from authentication.
---
# 11. DASHBOARD
## Objective
Answer:
**What work requires my attention right now?**
This should change depending on role.
---
## Top metrics
Examples:
* My Assignments
* Awaiting Verification
* Awaiting Approval
* Promoted Today
Supervisor roles may instead see:
* Total queue
* Oldest batch
* Rejection rate
* Throughput
---
## Main content
Recommended structure:
### Left 65%
My Queue / Batch Queue
Columns:
Batch ID
Type
Track
Progress
Status
Priority
Age / SLA
### Right 35%
My workflow status
Recent activity
Quick actions
---
## Avoid
Do not fill the dashboard with system infrastructure monitoring.
API/Postgres/Redis status belongs in administration or monitoring unless failures affect current work.
---
# 12. INTAKE
## Objective
Turn incoming scans into a valid digitization batch.
---
## Layout
Two-column layout.
### Main — 70%
Upload area
Batch configuration
### Right — 30%
Recent uploads
---
## Upload zone
Large bordered drop target.
Supports:
PDF
JPEG
PNG
Display:
Max 25 MB
Primary:
**Upload Files**
Secondary:
Drag and drop
Do not use three equally prominent upload CTAs.
---
## Batch Details
Fields:
### Batch Type
Examples:
* Registration
* Vitals
* Labs
* Medications
* Allergies
* Mixed Chart
### Track
Radio/select:
**Backfill**
Historical or archival document workflow.
**Live Capture**
Documents generated as part of current bedside workflows.
### Patient Link
Optional.
Search:
MRN
Name
### Cover Sheet Code
Optional.
Barcode/QR scan automatically fills compatible metadata.
---
## Right panel
Recent uploads.
Columns:
File
Batch
Status
Uploaded
Operator
---
## States
Uploading
Processing
Ready
Failed
Duplicate detected
Barcode recognized
---
## Styling
The upload zone should be approximately the largest visual element.
Blue dashed border only during empty/drop state.
Once files are selected, transition into a file list rather than keeping a huge empty drop zone.
---
# 13. COVER SHEETS
## Objective
Generate physical/digital separators that reliably reconnect scanned paper to system metadata.
---
## Layout
Top section:
50 / 50 split.
Left:
Generation form
Right:
Live preview
Bottom:
Existing cover sheet table
---
## Generation form
Fields:
Quantity
Batch/document type
Track
Patient — optional
Entry clerk — optional
Primary CTA:
**Generate Cover Sheets**
---
## Preview
Show an accurate printable representation.
Include:
VigilCare logo
QR code
Human-readable batch identifier
Barcode if applicable
Document type
Track
Patient identifier when supplied
Generation timestamp
---
## Existing cover sheets
Filters:
Search
Used / unused / partially used
Type
Track
Date
Actions:
Download PDF
Batch download
Regenerate only if business rules permit
---
## Styling
The preview should resemble real paper.
White canvas
Thin gray border
Minimal UI decoration
---
# 14. DATA ENTRY
This is one of the application's most important screens.
## Objective
Allow operators to accurately transcribe scanned records with minimal context switching.
---
# Layout
Three working regions:
### Left — Batch/document queue
Approx. 20%
### Center — Source document viewer
Approx. 3540%
### Right — Structured data entry
Approx. 4045%
On smaller desktop screens the queue may collapse.
---
# Queue
Tabs:
Uploaded
In Entry
Rejected
Each item shows:
Batch ID
Facility
Document count
Progress
Assigned operator
Status
Reason when rejected
Selected row:
Soft blue background + blue border.
---
# Document Viewer
Must support:
Zoom
Pan
Rotate
Fit width
Fit page
Fullscreen
Page thumbnails
Page forward/back
Optional contrast enhancement if later supported.
Document should remain visually neutral.
Do not apply decorative shadows beyond a subtle page shadow.
---
# Data Entry Form
Group logically:
Patient
Encounter
Observations
Labs
Medications
Allergies
Other required sections based on `fieldRequirements`.
---
## OCR treatment
OCR must appear as an assistant, not an authority.
Examples:
`OCR 98%`
Use small confidence badges beside values.
Recommended rules:
95100%
Subtle green
8094%
Amber
<80%
Red/strong warning
Never automatically imply verification because confidence is high.
---
## Required fields
Small red asterisk.
Validation occurs:
* inline
* on blur
* on submission
Avoid waiting until submission to display obvious errors.
---
## Bottom action bar
Sticky.
Left:
Flag / reject document
Center:
Save Draft
Primary:
**Submit for Verification**
Right:
Next document
---
## Design principle
Users should visually scan:
**source → field → source → field**
with as little eye travel as possible.
---
# 15. VERIFICATION
This screen requires stronger evidence comparison.
## Objective
Answer:
**Does the draft accurately represent the source document?**
---
# Layout
### Left
Verification queue
### Center
Source scan
### Right
Entered draft with validation markers
---
# Separation of Duties
Prominent but restrained information banner:
**Separation of Duties Enforced**
Entered by:
Arjun Menon
Current verifier:
Priya Nair
If same user:
Disable verification.
Show:
**You cannot verify a batch you entered.**
Do not allow the user to proceed until another batch is selected.
---
# Field comparison states
### Match
Green check.
### Warning / uncertain
Amber.
### Mismatch
Red.
### Missing
Blue/neutral missing state.
Avoid relying only on color.
Add icons/text.
---
# Field interaction
Verifier should be able to click a field and:
* See corresponding source region if OCR coordinates exist
* Mark correct
* Mark incorrect
* Add comment
---
# Verification decision
Sticky bottom area.
Options:
Pass
Reject
Reject requires:
Reason
Optional comment
Example rejection reasons:
* Incorrect transcription
* Missing required data
* Wrong patient
* Poor scan quality
* Incorrect document classification
* Incomplete chart
---
## Primary CTA
When Pass selected:
**Pass Verification**
When Reject selected:
**Return for Rework**
Avoid generic “Submit Decision.”
---
# 16. CLINICAL APPROVAL
## Objective
Provide clinical oversight only where policy requires it.
This screen should feel meaningfully different from ordinary verification.
---
## Top metrics
Keep limited.
Useful:
Awaiting Approval
Overdue
Approved Today
Average Review Time
Avoid vanity metrics.
---
# Layout
Queue
Source
Verified Draft
Clinical Risk / Summary
---
## Clinical summary sidebar
Show:
Patient
Encounter
High-stakes values
Reason approval is required
Examples:
Critical observation
Medication
Allergy
Clinical rule
High-risk document type
---
## Clinical flags
Use red carefully.
Example:
Temperature 38.2°C
Antibiotic recorded
Critical lab
These are **clinical signals**, unlike workflow validation errors.
---
## Retroactive Alerts
If supported:
Toggle:
**Run alert evaluation after promotion**
Supporting copy:
May generate alerts for clinical criteria represented in historical records.
It should not sound like alerts occurred contemporaneously.
---
## Approval actions
Approve
Reject
Approval confirmation should clearly state:
> Approval will promote the verified records into live clinical tables.
Primary:
**Approve & Promote**
Destructive:
**Reject Batch**
Rejection requires reason.
---
## Promotion result
After successful action display:
Patient records promoted
Encounter promoted
Observations promoted
Alerts generated: X
Audit event recorded
---
# 17. LIVE CAPTURE
## Objective
Provide a much lighter bedside workflow than backfill entry.
This should **not** look like the full Data Entry screen.
---
# Layout
Top:
Patient / encounter selection
Main:
Observation table
Bottom:
Attestation + authentication
Right:
Submission outcome / alert results
---
# Patient / Encounter
Choice:
New encounter
Existing encounter
Patient search:
MRN
Name
Once selected, display a compact patient banner.
---
# Observation table
Columns:
Time
Type
Value
Unit
Notes
Source
Actions
Use keyboard-friendly row creation.
Primary inline action:
**+ Add Observation**
---
# Attestation
Required:
> I attest that the information entered above accurately reflects the observations captured at the point of care.
Capture:
Clinician
Role
Location
Timestamp
---
# Password confirmation
Keep visually separate from normal data input.
Purpose:
Explicit clinical attestation.
---
# Submission
Primary:
**Submit Encounter**
After success:
Do not simply return to an empty page.
Show outcome panel.
---
# Critical alerts
If downstream scoring generates alerts, display them immediately.
Examples:
MEWS score elevated
Fever
NEWS2 threshold reached
Use high-visibility clinical alert presentation.
---
# 18. PATIENT HISTORY
## Objective
Explain the complete lineage of structured clinical information.
---
# Search
MRN
Patient name
Date filters
---
# Patient summary
Compact horizontal panel.
MRN
Name
DOB
Sex
Status
Record count
Active versions
Superseded versions
---
# Timeline
Recommended event types:
Uploaded
Entered
Verified
Rejected
Approved
Promoted
Corrected
Superseded
Use consistent icons.
---
# Timeline styling
Vertical or chronological table hybrid.
Timestamp on left.
Event in middle.
Actor / facility on right.
Status tag.
Expandable details.
---
# Corrections
Corrections must clearly show:
Original value
New value
Reason
Corrected by
Time
Superseded version
Example:
Hemoglobin
13.2 g/dL
13.6 g/dL
Never visually imply the old record disappeared.
---
# Audit detail panel
Selecting an event opens a right panel containing:
Event
Actor
Role
Timestamp
Batch
Reason
Related version
Audit events
---
# 19. SUPERVISOR DASHBOARD
## Objective
Help supervisors identify:
* queue buildup
* aging work
* quality problems
* staffing imbalance
* bottlenecks
It is an operational dashboard, not an executive BI product.
---
# Metric row
Total in queues
Intake
Data Entry
Verification
Approval
On Hold
---
# Priority information
### Queue age
Highlight oldest age more strongly than average.
Example:
Verification
**18h 32m**
---
# Operational analytics
Useful charts:
Queue aging
Rejection trend
Throughput
Cycle time
Stage distribution
---
# Bottleneck table
Columns:
Queue
Batch
Problem
Age
Priority
Assigned to
Records
Action
This may be the most useful element on the page.
---
# Team workload
Per-user:
In progress
Completed today
SLA performance
Open assignments
Avoid using simplistic leaderboards.
Healthcare operations should not encourage employees to optimize speed at the expense of accuracy.
---
# Refresh
Auto-refresh:
30 sec / 1 min / 5 min
Manual:
Refresh Now
Never refresh the page in a way that destroys the user's context.
---
# 20. FHIR EXPLORER
## Objective
Provide administrators and integration staff a safe, read-only way to inspect exposed FHIR R4 resources.
It should feel somewhat more technical than the rest of the application.
---
# Resource search
Resource type:
Patient
Encounter
Observation
Then dynamic parameters based on the selected resource.
---
# Workspace
Three columns:
### Left
Search results
### Center
FHIR resource
### Right
Human-readable summary
---
# Tabs
Resource Details
Raw JSON
Tree View
`$everything`
CapabilityStatement
---
# Raw JSON
Font:
JetBrains Mono
13 px
Line height:
20 px
Basic syntax highlighting.
Do not over-style like an IDE.
---
# Read-only indication
Always visible:
🔒 Read Only
This is important enough that the status should remain visible when scrolling.
---
# CapabilityStatement
Present both:
Human-readable capability summary
Raw resource
---
# 21. Navigation by Role
Navigation should be permission-based.
## Intake Operator
Dashboard
Intake
Cover Sheets
---
## Data Entry Operator
Dashboard
Data Entry
Patient History if authorized
---
## Verifier
Dashboard
Verification
Patient History
---
## Clinical Approver
Dashboard
Clinical Approval
Patient History
---
## Clinician
Dashboard
Live Capture
Patient History
---
## Supervisor
Dashboard
Supervisor Dashboard
Queues
Workload
Reports
History
---
## Administrator
Everything appropriate plus:
Users
Master Data
Configuration
Audit Logs
FHIR Explorer
---
# 22. Page Density
VigilCare is primarily desktop workstation software.
Recommended minimum:
1280 × 800
Optimized:
1440 × 900 and above
Entry and Verification particularly benefit from:
1920 × 1080
---
## Density modes
Potential future feature:
Comfortable
Compact
Operators working through hundreds of records may prefer Compact.
---
# 23. Forms
Input height:
3640 px
Do not use oversized 4856 px consumer inputs.
Labels stay above the fields.
Long forms should use grouped sections rather than floating forms inside unrelated cards.
---
# 24. Tables
Header:
44 px
Rows:
4856 px
Selected row:
Soft blue.
Hover:
Very subtle gray/blue.
Numeric values should align consistently.
Tables should support:
Sorting
Filtering
Pagination
Keyboard row navigation where appropriate
---
# 25. Icons
Use a single icon library.
Recommended:
Lucide
or
Phosphor
Outline weight around:
1.52 px
Avoid mixing:
Filled icons
Emoji
Multiple icon families
---
# 26. Empty States
Empty states should be operational.
Bad:
> Nothing here yet!
Better:
> No batches are waiting for verification.
> New batches appear here after data entry is submitted.
CTA where relevant:
**Return to Dashboard**
---
# 27. Loading
Prefer:
Skeleton rows
Inline loaders
Specific component loading
Avoid blocking the entire application with a spinner.
---
# 28. Error States
Errors must explain:
What happened
What was preserved
What the user should do
Example:
**Upload failed**
`records_042.pdf` could not be stored.
Your batch settings were preserved.
[Retry Upload]
---
# 29. Confirmation Dialogs
Only use confirmation for meaningful actions.
Examples:
Approve & Promote
Reject Batch
Supersede Record
Delete unsubmitted upload
Do not confirm harmless navigation.
---
# 30. Audit Visibility
Wherever a governance transition occurs, show:
Actor
Role
Timestamp
Previous state
New state
Reason if applicable
Transitions should feel traceable throughout the product.
---
# 31. Accessibility
Target:
WCAG 2.1 AA
Requirements:
Minimum text contrast 4.5:1
Visible keyboard focus
Semantic labels
ARIA descriptions
Do not communicate state by color alone
Minimum interactive target around 3640 px
Tables navigable by keyboard
Document viewer controls accessible
---
# 32. Responsive Behavior
VigilCare is primarily desktop software.
Do not force complex Entry and Verification workflows into a phone layout.
Suggested support:
### Desktop
Full functionality
### Tablet
Supervisory, history, approval and live capture supported
### Mobile
Primarily:
Patient history
Notifications
Simple live capture
Approval review where appropriate
Avoid full backfill transcription on mobile.
---
# 33. Motion
Keep extremely subtle.
Allowed:
150200 ms hover
Panel expand/collapse
Toast appearance
Modal transition
Avoid:
Bouncing elements
Animated gradients
Large transitions
Dashboard count animations
Healthcare software should feel stable.
---
# 34. Most Important Screen Hierarchy
The visual hierarchy of the application should reflect workflow risk.
### Level 1 — Source evidence
Original scanned document
### Level 2 — Entered structured information
Draft data
### Level 3 — Verification status
Human verification results
### Level 4 — Clinical approval
Clinical decision when required
### Level 5 — Promotion
Live clinical record
This hierarchy should remain recognizable across every workflow.
---
# 35. Recommended Final Sidebar
For consistency, I would use these exact labels:
**WORKSPACE**
Dashboard
Intake
Cover Sheets
Data Entry
Verification
Clinical Approval
Live Capture
Patient History
**SUPERVISION**
Supervisor Dashboard
Queues
Workload
Reports
**ADMINISTRATION**
Users
Master Data
FHIR Explorer
Configuration
Audit Logs
Navigation is filtered by role and permission.
---
# 36. Corrections to the Generated Concepts
Several adjustments should be made before treating the screenshots as implementation references.
### Login
Remove the role selector.
Roles come from authentication.
---
### Data Entry naming
Use **Data Entry** consistently.
Do not alternate between “Entry” and “Data Entry.”
---
### Approval naming
Use **Clinical Approval** consistently.
Do not simultaneously show:
Clinical Approval
and
Approvals
as separate navigation items unless they actually represent different concepts.
---
### Dashboard infrastructure metrics
Move detailed:
PostgreSQL
Redis
MinIO
FHIR API
service health into Administration.
The normal operator dashboard should prioritize work.
---
### OCR
Do not label extracted values as inherently correct.
OCR confidence represents machine confidence, not clinical correctness.
---
### Verification
The source scan and entered value should dominate the page.
Analytics are secondary.
---
### Patient History
Promotion should normally identify the user who performed the approval/promotion action according to actual backend workflow. Do not assume the data-entry operator promoted the record.
---
### Clinical Approval
Use the strongest semantic color only for clinical risks and irreversible actions.
Routine workflow warnings should use amber.
---
# 37. Overall Visual Personality
VigilCare Records should sit visually somewhere between:
A modern hospital information system
A high-quality enterprise data workstation
A regulated document-processing platform
It should **not** look like:
A generic AI dashboard
A marketing SaaS template
A consumer health app
A traditional gray hospital EMR from 2008
The resulting identity should be:
**calm, structured, trustworthy, fast, and visibly governed.**