You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
FCF Tracker is a Friends Cooperative Fund tracking application for the AITS batch. The visual identity is focused and confident — a vivid blue chrome (sidebar + top-bar avatar pill) framing a clean white content surface. Financial data is the hero; the chrome stays out of its way. We honour two visual constants throughout:
Indian numbering for every money figure — ₹1,00,000, never ₹100,000. The single helper formatRupees() in @/lib/format pins to en-IN.
Color-blind-safe chart palette — the data-viz colors are Okabe-Ito-derived so the dashboard reads correctly under deuteranopia, protanopia, and tritanopia.
Colors
Surface palette
Token
Hex
Usage
background
#ffffff
Page background (within main content area)
surface
#ffffff
Cards, panels, table wrappers
surface-muted
#f9fafb (bg-gray-50)
Table header strips, button hover, soft footers
border
#e5e7eb (border-gray-200)
All borders, dividers
border-muted
#f3f4f6 (border-gray-100)
Subtle internal dividers (between table rows, between groups)
Text palette
Token
Hex
Usage
text-primary
#111827 (text-gray-900)
Body text, headings, primary cell content
text-secondary
#374151 (text-gray-700)
Form labels, secondary cell content
text-muted
#6b7280 (text-gray-500)
Captions, descriptions, breadcrumbs
text-faint
#9ca3af (text-gray-400)
Placeholders, em-dashes for null cells
Brand palette
Token
Hex
Usage
primary
#2563eb (blue-600)
Primary buttons, links, focus rings, contributions chart series
Data-viz palette (documented exception to "no hex" rule)
The chart palette is hex-coded by intention because (a) Recharts requires CSS color strings and (b) the values are an accessibility commitment we don't want lost behind a Tailwind alias. They live in one place: src/lib/transaction-groups.ts.
Series
Hex
Source
Contributions
#2563eb
Tailwind blue-600 — brand blue
Loan interest
#E69F00
Okabe-Ito orange
Bank interest
#009E73
Okabe-Ito bluish-green
The blue ↔ orange ↔ green trio is distinguishable under all three common color vision deficiencies. Replacement requires running the swap through a CVD-simulator first (e.g. Coblis).
Currency
Always render via formatRupees(value) from @/lib/format.
Both functions construct an Intl.NumberFormat('en-IN') once at module scope to avoid per-call cost. The pinned locale also fixes hydration mismatches between the Node server (system locale) and the browser (user locale).
The active-item gradient pill deliberately uses a soft shadow (shadow-md shadow-orange-500/40) — this is a documented exception to the "no shadows on surfaces" rule because the pill is a highlight, not a card. The amber/orange against the cool blue gradient is the primary contrast cue.
Groups are collapsible (click the section heading or chevron). Default open state: any group containing the current route is expanded; the rest collapse.
Chrome — TopBar
The top bar lives inside the main content column (right of the sidebar), sticky top-0, with a hairline bottom border and backdrop-blur so scrolled content stays legible behind it.
Layout: [mobile hamburger] [page title + breadcrumb] [LOGO centered] [avatar dropdown]
Bg: bg-white/90 backdrop-blur
Height: py-3 (≈ 64px)
Logo: 58×58 rounded-full, absolutely positioned at the horizontal center, pointer-events-none
Avatar: 36×36 round + name + email (two-line) + chevron, in a rounded-2xl border pill
Elevation & Depth
Border-first hierarchy. Surfaces are distinguished by a 1px border and a slight bg shift (e.g., bg-gray-50 for the page surround vs bg-white for cards), not by shadows.
Three documented exceptions:
Exception
Shadow
Where
Popovers
shadow-lg ring-1 ring-black/5
Avatar dropdown, member multi-select dropdown, searchable-select, filter popovers
Sidebar active-item highlight
shadow-md shadow-orange-500/40
The gradient pill on the currently selected nav item