Display face · the apps
Inter
- 400
- 500
- 600
- 700
Work: Healthcare · Clinical research
The work
TriNetX gives researchers, life-science teams and health systems access to real-world data from a global federated network. Its interface runs on a design system kept in step between Figma and React — so product and AI features ship faster.
An animated tour of the TriNetX UI kit: a query card and combobox, a range slider, toggles, tabs with a chart, a tooltip and toast, and the AI assistant suggesting a term that lands in the query, ending in dark mode.
40+
React components in the kit.
90%+
Average Figma‑to‑code parity.
1.5
Years of component design behind the kit.
5
Absolute rockstars who did such heavy lifting to get this done: Maeve, Phil, Andrew (opens in a new tab), Tiana (opens in a new tab) and Michelle (opens in a new tab).
Platinum · 2026 Pinnacle Technology Awards
TriNetX won Platinum in AI Solutions for Clinical Research & Data Insights. The argument behind it: the data comes first — high-quality, transparent and continuously refreshed — and the AI is only as good as what it stands on.
Read the award announcement (opens in a new tab)
AI built on weak foundations crumbles.
The network
What it made possible
Figures from TriNetX’s award announcement, July 2026.
Re-architecting the platform for AI
Workspace
App brand guidelines
A preview of the design system: a selection of its parts, not every asset.
Typography
Inter, in two roles. Everything else is a size or weight of it.
Display face · the apps
Inter
Text face · the apps
Inter
Typography
The headings the apps use, then Tailwind’s text sizes. Small on purpose: the data is the content.
COPD Global Network
Edit cohort criteria
What’s New in the Live platform
Cohort summary
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
Foundations
Interface grays from Tailwind’s gray and slate; one blue for action; navy and red for query logic; a set of its own for the AI. Contrast against white and against the heading ink, #111827.
Foundations
The TriNetX brand scales, 20 to 100.
Foundations
Tailwind’s 4px grid, two control heights and four radii.
Base unit
4px
Every space is a step of Tailwind’s 4px scale, drawn below.
Controls
36 · 28
Big and Small buttons; inputs, selects and list items at 36; tabs at 44; toggles 36 × 20; checkboxes 16.
Query card head
48px
On #F8FAFC, with the count pill (#E0F2FE) on the right.
Small buttons, list items, chips, tooltips
Big buttons, text inputs
Cards, menus, the chat field
Chat bubbles, the Welcome panel
Pills, toggles, the send button
Components
Big (36) and Small (28). Hover darkens to #035C8C, pressed to #001F54; focus is a 3px #E0F2FE ring; disabled lightens to #80C1E3.
Primary · Big 36
36px tall · radius 6px · padding 0 14px · Inter 500 14px · #0E76AF → hover #035C8C → pressed #001F54 · disabled #80C1E3 · contrast 4.97:1 AA
Secondary · Big 36
36px tall · radius 6px · Inter 500 14px · white, 1px #CBD5E1 · hover #F1F5F9 · text #374151 · contrast 10.31:1 AAA
Ghost · Small 28
28px tall · radius 4px · padding 0 10px · Inter 500 13px · text #0E76AF · hover #F1F5F9 · contrast 4.97:1 AA
36px circle · #A47BFF → #8A62E2 at 135° · answering #334155 with a 12px square
Components
Select, ComboBox, TextInput, ToggleGroup, Toggle, Checkbox, RangeSlider, Badge and Tooltip, drawn with the kit’s parts. The live kit above works.
Select · ComboBox
trigger 36px · radius 4–6 · menu radius 8 · items 36px
focus: 0 0 0 1px #0284C7, 0 0 0 4px #E0F2FE
ToggleGroup · Toggle · Checkbox
toggle 36 × 20 · on #0E76AF · off #CBD5E1
checkbox 16 · radius 4
RangeSlider
Count · logic · tooltip
Count pill #E0F2FE / #035C8C
AND #2A436D / #DAF5FF · tooltip #334155, 12/16
Components
The assistant has its own small set: a gradient edge that marks anything AI, the ChatField with Send and its answering state, the Thinking summary, suggestion cards in lavender and Rating.
Who is also on a GLP-1 agonist?
Adding GLP-1 agonist with AND takes Cohort 1 from 11,482 to 1,607 patients.
Double-check results. Powered by AI.
| Part | Spec |
|---|---|
| ChatField | 137px · radius 8 · 1.5px gradient edge #FF85D8 → #8D60EF → #06DFEA · disclaimer 11px below |
| Send · answering | 36px circle · #A47BFF → #8A62E2 · #334155 while answering |
| User bubble | #F3F4F6 · radius 12 · 14/20 · right-aligned |
| Thinking summary | an accordion · 12/16 steps with micro icons · #D1D5DB connectors · the running step shines |
| Suggestion card | Did you know: #FAF5FF · 1px #E9D5FF · radius 8 |
| Welcome | compact · #001F54 · lime #BEFF0D accent |
| Header | “Assistants” 16/24 |
| Rating | thumbs up, thumbs down, copy · 28px ghost icon buttons |
Quality
Hand-off
CSS custom properties for the values above.
:root {
/* type: Inter, everywhere in the apps */
--font-app: Inter, system-ui, sans-serif;
--text-xs: .75rem; --leading-xs: 1rem;
--text-sm: .875rem; --leading-sm: 1.25rem; /* the default */
--text-base: 1rem; --leading-base: 1.5rem;
--text-lg: 1.125rem; --leading-lg: 1.75rem;
--text-xl: 1.25rem; --leading-xl: 1.75rem;
--text-2xl: 1.5rem; --leading-2xl: 2rem;
--h1: 700 20px/28px var(--font-app); /* table headers */
--h2: 600 18px/28px var(--font-app); /* modal, popover, drawer */
--h3: 600 16px/24px var(--font-app); /* What's New titles */
--h4: 600 14px/20px var(--font-app); /* card titles */
/* interface */
--text-primary: #374151;
--text-secondary: #6B7280;
--text-tertiary: #9CA3AF;
--text-heading: #111827;
--border: #E2E8F0;
--border-control: #CBD5E1;
--bg-hover: #F1F5F9;
--bg-surface: #F8FAFC;
--primary: #0E76AF;
--primary-hover: #035C8C;
--primary-pressed: #001F54;
--primary-disabled: #80C1E3;
--focus-ring: 0 0 0 3px #E0F2FE;
--focus-edge: #0284C7;
--logic-and: #2A436D;
--logic-and-text: #DAF5FF;
--exclude: #B91C1C;
/* brand scales */
--midnight-20: #A7ADB8; --midnight-40: #7D899F; --midnight-60: #546785; --midnight-80: #2A436D; --midnight-100: #001F54;
--arctic-20: #CFF3F7; --arctic-40: #9DEEF3; --arctic-60: #6BEAF0; --arctic-80: #38E5ED; --arctic-100: #06DFEA;
--lime-20: #FFFFD9; --lime-40: #EFFFA6; --lime-60: #DFFF73; --lime-80: #CFFF40; --lime-100: #BEFF0D;
--lavender-20: #ECE0FF; --lavender-40: #D6C2FF; --lavender-60: #C1A3FF; --lavender-80: #AB85FF; --lavender-100: #A47BFF;
--sunbeam-20: #FFF5D9; --sunbeam-40: #FFE7AF; --sunbeam-60: #FFD886; --sunbeam-80: #FFCA5C; --sunbeam-100: #FFBB33;
--azure-100: #DAF5FF; --gray-100: #F2F2F2; --powder-100: #FAFDFF;
/* AI */
--ai-gradient: linear-gradient(90deg, #FF85D8, #8D60EF, #06DFEA);
--ai-send: linear-gradient(135deg, #A47BFF, #8A62E2);
--ai-stop: #334155;
--ai-tip-bg: #FAF5FF; --ai-tip-border: #E9D5FF;
/* size */
--control-big: 36px; --control-small: 28px; --tab: 44px; --list-item: 36px;
--radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px;
} Team scope