Typography
Our typography system is designed for clarity, efficiency, and minimalism. With limited screen space in a complex developer tool, we prioritize readability and information density over decorative hierarchy.
Design Principlesβ
- Space-efficient: Default to 12px for body text to maximize content visibility
- Minimal hierarchy: Only 3 header levels to avoid confusion
- Weight over size: Use font-weight to create hierarchy, not excessive size changes
- Functional: Every style has a clear, specific purpose
Font Familyβ
We use Inter for all UI text due to its excellent readability at small sizes and professional appearance. For technical content (IDs, code snippets, JSON), use the system monospace font.
Text Colorsβ
#4a5568#2d3748#718096#757E8F#a0aec0Color Philosophyβ
We use a lighter default with a darker emphasis option to:
- Reduce eye strain during extended use
- Create clear visual hierarchy without relying on size
- Make emphasized content truly stand out
- Align with modern developer tool aesthetics
Key principle: Use text-primary for most content, reserve text-emphasis for true importance.
Type Stylesβ
Typography Scale Overviewβ
| Style | Example | Specifications | Usage |
|---|---|---|---|
| Page Title | Home | 24px (text-2xl) β’ 600 weight (font-semibold) β’ text-emphasis | Main application page titles |
| Title | Flow inputs | 18px (text-lg) β’ 600 weight (font-semibold) β’ text-emphasis | Top-level page headings, modal titles |
| Section Header | Advanced settings | 14px (text-sm) β’ 600 weight (font-semibold) β’ text-emphasis | Panel headers, card titles, sidebar groups |
| Body | Default text throughout the application | 12px (text-xs) β’ 400 weight (font-normal) β’ text-primary | Descriptions, content, list items, table cells |
| Body Emphasized | Field name: | 12px (text-xs) β’ 600 weight (font-semibold) β’ text-emphasis | Labels, form field labels, tab labels |
| Secondary Text | Last run 2 hours ago | 12px (text-xs) β’ 400 weight (font-normal) β’ text-secondary | Supporting information, metadata, timestamps |
| Caption | Optional field | 11px (text-2xs) β’ 400 weight (font-normal) β’ text-secondary | Helper text, table headers, annotations |
| Hint | Enter job name... | 11px (text-2xs) β’ 400 weight (font-normal) β’ text-hint | Input placeholders, tooltips, empty states |
| Code/Monospace | job_id_12345 | 11px (text-2xs) β’ 400 weight (font-normal) β’ monospace (font-mono) β’ text-emphasis | Job IDs, code snippets, file paths, API endpoints |
App Page Titleβ
When to use: Main application page titles, primary navigation headings
class = 'font-semibold text-2xl text-emphasis';
- Size: 24px (
text-2xl) - Weight: 600 (
font-semibold) - Color:
text-emphasis - Example: "Job Orchestrator", "Flow Builder", "Resource Manager"
Page Titleβ
When to use: Top-level page headings, modal titles, main view names
class = 'text-lg font-semibold text-emphasis';
- Size: 18px (
text-lg) - Weight: 600 (
font-semibold) - Color:
text-emphasis - Example: "Job Orchestrator Dashboard", "Edit Flow Configuration"
Section Headerβ
When to use: Panel headers, card titles, collapsible section names, sidebar groups
class = 'text-sm font-semibold text-emphasis';
- Size: 14px (
text-sm) - Weight: 600 (
font-semibold) - Color:
text-emphasis - Example: "Active Jobs", "Configuration", "Environment Variables"
Bodyβ
When to use: Default text throughout the application - descriptions, content, list items, table cells
class = 'text-xs font-normal text-primary';
- Size: 12px (
text-xs) - Weight: 400 (
font-normal) - Color:
text-primary - Example: Form descriptions, paragraph content, dialog text
This is your default. When in doubt, use this style.
Body Emphasizedβ
When to use: Important labels, form field labels, tab labels, emphasis within body text
class = 'text-xs font-semibold text-emphasis';
- Size: 12px (
text-xs) - Weight: 600 (
font-semibold) - Color:
text-emphasis - Example: "Job Name:", "Status:", button labels
Secondary Textβ
When to use: Supporting information, metadata, timestamps, status descriptions
class = 'text-xs font-normal text-secondary';
- Size: 12px (
text-xs) - Weight: 400 (
font-normal) - Color:
text-secondary - Example: "Last run 2 hours ago", "Created by John Doe", file sizes
Captionβ
When to use: Helper text below inputs, table column headers, inline annotations, badges
class = 'text-2xs font-normal text-secondary';
- Size: 11px (
text-2xs) - Weight: 400 (
font-normal) - Color:
text-secondary - Example: "Optional field", "Max 100 characters", column headers
Hintβ
When to use: Input placeholders, tooltip content, empty state messages, subtle guidance
class = 'text-2xs font-normal text-hint';
- Size: 11px (
text-2xs) - Weight: 400 (
font-normal) - Color:
text-hint - Example: "Enter job name...", "Search flows", tooltip text
Code/Monospaceβ
When to use: Job IDs, code snippets, file paths, API endpoints, JSON keys, technical identifiers
class = 'text-2xs font-mono font-normal text-emphasis';
- Size: 11px (
text-2xs) - Weight: 400 (
font-normal) - Color:
text-emphasis - Font: System monospace
- Example:
job_id_12345,/api/v1/jobs,ENV_VAR_NAME
Note: Use text-emphasis for code to ensure technical values stand out and are easily scannable.
Usage Guidelinesβ
Creating Hierarchyβ
Use these methods in order of preference:
- Font weight - Semibold (600) for headers and emphasis, normal (400) for body
- Color - Primary for main content, secondary for supporting info, hint for subtle guidance
- Size - Only change size for true hierarchy levels (page title vs section header vs body)
Don't create hierarchy by:
- Making text larger than 24px (except for App Page Titles)
- Using more than 3 header levels
- Adding excessive spacing or borders
Creating Visual Hierarchy - Priority Orderβ
- Font Weight - Use semibold (600) for emphasis
- Color - Use textEmphasis for important content
- Position & Spacing - Group related content, add white space
- Size - Only use defined type styles, never custom sizes
β Don'tβ
- Increase font size to make something "stand out"
- Create one-off font sizes for special cases
- Use large headers in dense UI areas
β Doβ
- Use font-weight to emphasize within the same size
- Use textEmphasis color for important content
- Add spacing around important elements
Text Casingβ
Primary Rule: Use Sentence Caseβ
Use sentence case for all UI textβcapitalize only the first word and proper nouns. This approach improves readability and is faster to implement consistently.
Examples:
- β "Create new flow"
- β "Edit Windmill resource"
- β "Create New Flow"
- β "SAVE CHANGES"
Casing by Component Typeβ
Page titles and headings
- Use sentence case: "Job orchestrator dashboard"
Buttons and actions
- Use sentence case: "Save changes", "Delete job"
Form labels
- Use sentence case: "Job name", "Resource type"
Navigation items
- Use sentence case: "User settings", "Resource manager"
Error messages and notifications
- Use sentence case: "Job completed successfully"
Always Capitalizeβ
- Proper nouns: Windmill, Docker, Python, GitHub
- Acronyms: API, HTTP, JSON, SQL
- First word of any sentence or UI element
Special Casesβ
- Technical identifiers: Keep original casing (
job_id_123,ENV_VAR) - Brand names: Follow brand guidelines (iPhone, macOS)
- Abbreviations: Use standard forms (ID, URL, vs.)
Accessibility Noteβ
Avoid ALL CAPS text except for very short labels (2-3 characters max). All caps text is slower to read and can appear aggressive to users.
Decision Treeβ
Not sure which style to use? Follow this:
Is it a main application page title? β Yes: App Page Title (24px, semibold) β No: Continue
Is it a page or modal title? β Yes: Page Title (18px, semibold) β No: Continue
Is it a section/panel header? β Yes: Section Header (14px, semibold) β No: Continue
Is it technical data (ID, code, path)? β Yes: Code/Monospace (11px, mono) β No: Continue
Is it a placeholder or tooltip? β Yes: Hint (11px, hint color) β No: Continue
Is it helper text or a table header? β Yes: Caption (11px, secondary color) β No: Continue
Is it metadata or supporting info? β Yes: Secondary Text (12px, secondary color) β No: Continue
Is it a label or needs emphasis? β Yes: Body Emphasized (12px, semibold weight, emphasis color) β No: Body (12px, normal, primary color) β DEFAULT
Accessibilityβ
- All text colors meet contrast requirements on standard backgrounds
- Never use font size alone to convey meaning
- Ensure disabled text (
text-disabled) is paired with visual disabled states
Common Mistakesβ
β Don't create custom font sizes between defined styles
β
Do use the defined type styles
β Don't use Section Header inside table cells
β
Do use Caption for table headers
β Don't use Body Emphasized everywhere for "importance"
β
Do reserve it for labels and truly emphasized content
β Don't make job IDs or code bold/colored
β
Do use monospace font with text-emphasis for technical identifiers
β Don't use text-emphasis for body paragraphs
β
Do use text-primary for most content, text-emphasis for headers/labels