← All Open Collective pages

Open Collective design system

Every value on this page is copied from the platform's own stylesheet, not approximated by eye. Open Collective defines its design system as Tailwind v4 variables in one file (public/static/styles/app.css) and builds 44 components on top of it. Edit tokens.css and every page in this folder changes with it.

Brand colour, and the trap in it

There are two blues and they are not interchangeable.

The dark navy is the marketing colour. The bright blue is the product colour. Buttons inside the product use the bright blue; only the marketing button variant uses navy. Swapping them is the single easiest way to make a page stop looking like Open Collective.
Marketing navy
hsla(222,78%,22%,1)
Brand blue
hsla(218,92%,53%,1)
Blue 900
hsla(220,71%,33%,1)
Blue 700
hsla(220,85%,45%,1)
Blue 500
hsla(213,100%,59%,1)
Primary 100
hsla(208,100%,95%,1)

Semantic colours

No component ever names a raw colour. They name a role, and the role points at a colour. That indirection is why a whole rebrand is a handful of lines rather than a search across 79 files.

primary
blue-600
secondary
slate-100
muted
slate-100
destructive
rose-500
success
green-600
border / input
slate-200
muted-foreground
slate-500
foreground
slate-900

Type

Inter, self-hosted — these are the platform's own font files, not a web-font substitute. Body text is 14px, which is smaller than most sites and is deliberate: these pages are dense with figures.

Display 36 / 700 — BrusselsTogether
Heading 24 / 600 — Transparent budget
Subhead 18 / 600 — Recent activity
Body 14 / 400 — Every contribution and every expense is on this page. Nothing sits in a private spreadsheet.
Body medium 14 / 500 — used for labels and buttons
Caption 12 / 400 — Published on 27 July 2026 by Test User Admin
₹5,000.00   €5,496.86   $1,240.00

Figures are tabular: the digits sit on a fixed grid so columns of money align.

Buttons

Ten variants and nine sizes exist. These are all ten variants, at the default size.

Disabled is 50% opacity and ignores pointer events — it is not greyed out with a different colour.

Status badges

Expense and contribution states. Colour alone never carries the meaning — the word is always there too, because roughly one man in twelve cannot separate the green from the amber.

Pending Approved Paid Rejected Draft Incomplete Active

Form controls

Shape

One number drives every rounded corner. --radius is 12px; medium is 10px and small is 6px, both derived from it. Change the one value and the entire product's softness changes.

lg — 12px
md — 10px
sm — 6px
full — badges, avatars

The ledger row

The most important pattern in the product, and the one most likely to be got wrong. A single contribution is not one row — it is a group: the money, and each fee taken out of it, each as its own line. Collapsing them into one number is what makes a budget stop being transparent.

DateDescriptionKindAmount
7 Aug 2026Monthly contribution from Priya R.Contribution+ ₹5,000.00
7 Aug 2026Payment processor feeProcessor fee− ₹118.00
7 Aug 2026Host feeHost fee− ₹250.00
2 Aug 2026Venue hire — November community eveningExpense− ₹24,500.00

What is missing from this page

Said plainly so a reviewer does not spend their pass reporting it: no dark mode (the platform defines one, these pages do not use it), no icons (the product uses Lucide throughout), no loading or empty states, and no focus-visible walkthrough. Components here are the ones the pages in this folder actually use — not all 44.