|
| 1 | +# Design System - Kanoniv Observatory |
| 2 | + |
| 3 | +## Product Context |
| 4 | +- **What this is:** AP authorization dashboard for AI agents - the proof and control layer between AI agents and QuickBooks |
| 5 | +- **Who it's for:** Accounting firms managing AI agents that process invoices, create bills, and handle payments |
| 6 | +- **Space/industry:** Fintech / AP automation / Agent authorization. Peers: Melio, Bill.com, Ramp, QuickBooks |
| 7 | +- **Project type:** Data-heavy web app / dashboard |
| 8 | + |
| 9 | +## Aesthetic Direction |
| 10 | +- **Direction:** Luxury/Refined |
| 11 | +- **Decoration level:** Intentional - subtle card elevation, thin borders, gold accent lines. Not cold-minimal, not noisy-expressive. |
| 12 | +- **Mood:** Institutional authority with warmth. The dashboard a CFO trusts with financial controls. Feels like wealth management, not a SaaS app. |
| 13 | +- **Reference sites:** Melio (meliopayments.com) for onboarding flow and layout patterns. Stripe Dashboard for data density. |
| 14 | +- **Key insight:** Every finance dashboard uses cool blue-grays and sans-serif because they copy each other. Observatory is an AUTHORIZATION layer - it should feel institutional and weighty, like a legal document. Warm neutrals + serif headings differentiate from the entire category. |
| 15 | + |
| 16 | +## Typography |
| 17 | +- **Display/Hero:** Instrument Serif - Modern serif with institutional authority. No finance dashboard uses serif headings. This communicates "this is the law, not a suggestion." |
| 18 | +- **Body/UI:** DM Sans - Clean geometric sans-serif. Professional, readable, neutral. Excellent weight range. |
| 19 | +- **Data/Tables:** Geist - Purpose-built for data display. Perfect tabular-nums. Clean at small sizes. |
| 20 | +- **Code:** Geist Mono - Monospace companion to Geist. For DIDs, tokens, scopes. |
| 21 | +- **Loading:** Google Fonts for Instrument Serif + DM Sans. Self-host Geist/Geist Mono via npm (geist package). |
| 22 | +- **Scale:** |
| 23 | + - H1: 32px / Instrument Serif / line-height 1.2 |
| 24 | + - H2: 24px / Instrument Serif / line-height 1.2 |
| 25 | + - H3: 18px / Instrument Serif / line-height 1.3 |
| 26 | + - Body: 14px / DM Sans / line-height 1.6 |
| 27 | + - Small: 13px / DM Sans / line-height 1.5 |
| 28 | + - Caption: 12px / DM Sans / line-height 1.5 |
| 29 | + - Label: 10px / DM Sans / font-weight 700 / uppercase / letter-spacing 0.1em |
| 30 | + - Data: 14px / Geist / tabular-nums |
| 31 | + - Mono: 13px / Geist Mono |
| 32 | + |
| 33 | +## Color |
| 34 | + |
| 35 | +### Light Theme (Primary) |
| 36 | +- **Approach:** Restrained - one warm accent (gold) + warm neutrals. Color is rare and meaningful. |
| 37 | +- **Background:** #FAFAF8 - warm off-white (NOT pure white) |
| 38 | +- **Surface (cards):** #FFFFFF - pure white cards float on warm background |
| 39 | +- **Surface hover:** #F7F6F3 - subtle warm hover state |
| 40 | +- **Border:** #E8E5DE - warm border (NOT cool gray) |
| 41 | +- **Border subtle:** #F0EDE6 - lighter border for inner dividers |
| 42 | +- **Text primary:** #1A1814 - warm near-black (NOT pure black) |
| 43 | +- **Text secondary:** #6B6760 - warm medium gray |
| 44 | +- **Text hint:** #9C978E - warm light gray for labels and hints |
| 45 | +- **Gold accent:** #B08D3E - deepened from original #C5A572 for better contrast on white |
| 46 | +- **Gold hover:** #C5A572 - original gold, brighter on interaction |
| 47 | +- **Gold tint:** #FAF6ED - very light gold for selected states and backgrounds |
| 48 | +- **Gold border:** #E8DCC4 - light gold for accent borders |
| 49 | +- **Gold text (small):** #8B7130 - darker gold for small text (better contrast) |
| 50 | +- **Success:** #1A7A42 - muted deep green |
| 51 | +- **Success bg:** #EDFAF2 / **Success border:** #C6F0D6 |
| 52 | +- **Warning:** #B8860B - dark goldenrod (harmonizes with gold accent) |
| 53 | +- **Warning bg:** #FFF8E8 / **Warning border:** #F0DDB0 |
| 54 | +- **Error:** #C23A3A - muted red |
| 55 | +- **Error bg:** #FDF0F0 / **Error border:** #F0C6C6 |
| 56 | +- **Info:** #2E6DA4 - muted blue |
| 57 | +- **Info bg:** #EDF4FB / **Info border:** #B8D4F0 |
| 58 | + |
| 59 | +### Dark Theme (Secondary) |
| 60 | +- Strategy: Warm dark surfaces, NOT pure black. Reduce accent brightness slightly. |
| 61 | +- **Background:** #0F0E0C |
| 62 | +- **Surface:** #1A1814 |
| 63 | +- **Surface hover:** #242118 |
| 64 | +- **Border:** #2E2A22 |
| 65 | +- **Border subtle:** #1E1B16 |
| 66 | +- **Text primary:** #E8E5DE |
| 67 | +- **Text secondary:** #9C978E |
| 68 | +- **Text hint:** #6B6760 |
| 69 | +- **Gold accent:** #C5A572 |
| 70 | +- **Gold hover:** #D4BC94 |
| 71 | +- **Gold tint:** #1E1A12 |
| 72 | + |
| 73 | +### Shadows |
| 74 | +- **Small:** 0 1px 2px rgba(26, 24, 20, 0.04) |
| 75 | +- **Medium:** 0 2px 8px rgba(26, 24, 20, 0.06) |
| 76 | +- **Large:** 0 4px 16px rgba(26, 24, 20, 0.08) |
| 77 | + |
| 78 | +## Spacing |
| 79 | +- **Base unit:** 4px |
| 80 | +- **Density:** Comfortable - finance users need clarity, not cramming |
| 81 | +- **Scale:** 2xs(2px) xs(4px) sm(8px) md(12px) lg(16px) xl(24px) 2xl(32px) 3xl(48px) 4xl(64px) |
| 82 | + |
| 83 | +## Layout |
| 84 | +- **Approach:** Grid-disciplined - strict alignment for data-heavy dashboard |
| 85 | +- **Grid:** 12-column at desktop, 6-column at tablet, stack on mobile |
| 86 | +- **Max content width:** 1200px |
| 87 | +- **Sidebar:** 220px fixed, collapsible. White surface, border-right separator. |
| 88 | +- **Border radius:** sm: 4px (inputs, small elements), md: 6px (cards, buttons), lg: 8px (modals, large containers), full: 9999px (pills, badges) |
| 89 | +- **Card pattern:** White surface, 1px warm border, small shadow. No rounded-xl bubbly SaaS look. |
| 90 | + |
| 91 | +## Motion |
| 92 | +- **Approach:** Intentional - subtle entrance animations, meaningful state transitions. NOT expressive/playful. |
| 93 | +- **Framework:** Framer Motion (already in use) |
| 94 | +- **Easing:** enter: ease-out / exit: ease-in / move: cubic-bezier(0.25, 0.1, 0.25, 1) |
| 95 | +- **Duration:** micro: 100ms / short: 150ms / medium: 250ms / long: 400ms |
| 96 | +- **Patterns:** |
| 97 | + - Page enter: opacity 0->1, y 8->0, duration 200ms |
| 98 | + - Stagger children: 60ms between items (lighter than current 80ms) |
| 99 | + - No spring pops on data elements (springs are playful - wrong for finance) |
| 100 | + - Skeleton loaders for async data (pulse animation) |
| 101 | + - Height collapse for dismiss/remove |
| 102 | + |
| 103 | +## Sidebar Navigation |
| 104 | +Six items maximum (from Melio research): |
| 105 | +1. Home (dashboard) |
| 106 | +2. Clients (firm/QB connections) |
| 107 | +3. Agents (registry + delegation) |
| 108 | +4. Escalations (pending approvals) |
| 109 | +5. Audit (provenance + export) |
| 110 | +6. Settings |
| 111 | + |
| 112 | +Icons: Lucide React, 18px, stroke-width 1.5. Active state: gold tint background + gold text. |
| 113 | + |
| 114 | +## Accessibility Notes |
| 115 | +- Gold accent (#B08D3E) on white: 3.5:1 contrast - passes AA for large text (18px+) and UI components |
| 116 | +- For small gold text, use darker variant (#8B7130) at 5.2:1 contrast |
| 117 | +- Primary buttons: gold bg (#B08D3E) with white text (#FFFFFF) - 4.5:1 passes AA |
| 118 | +- All semantic colors chosen for WCAG AA compliance on their respective backgrounds |
| 119 | +- Focus rings: 2px gold outline with gold-tint offset |
| 120 | + |
| 121 | +## Decisions Log |
| 122 | +| Date | Decision | Rationale | |
| 123 | +|------|----------|-----------| |
| 124 | +| 2026-03-24 | Initial design system created | /design-consultation based on Melio competitive research. Light theme mandatory for finance product. | |
| 125 | +| 2026-03-24 | Instrument Serif for headings | Institutional authority differentiator. No finance dashboard uses serif - communicates "this is the law." | |
| 126 | +| 2026-03-24 | Warm neutrals over cool grays | Every competitor uses cool blue-gray. Warm palette (#FAFAF8 bg) with gold feels like wealth management. | |
| 127 | +| 2026-03-24 | Gold accent retained + deepened | Brand continuity. Deepened from #C5A572 to #B08D3E for white-bg contrast. No competitor uses gold. | |
| 128 | +| 2026-03-24 | Tight border radius (4/6/8px) | Financial precision. No bubbly SaaS rounding. Tight corners communicate exactness. | |
0 commit comments