The system underneath the studio.
Tokens, type, color, components, motion — every visual decision BeFair Lab makes, rendered live and named for editing. Pair this with the design.md below for the why.
The why, in prose.
The full design document. Source of truth lives at src/content/design.md in the repo, and is also downloadable here. When the design changes, that file is updated first.
Plain. Past tense. First-person plural.
We write the way we'd talk to a colleague we respect. Honest about uncertainty. We don't dress up shipping a feature in launch language, and we don't dress up an unfinished thing as roadmap material.
Things we've built — and shipped.
A small studio.
Honest software.
- Say what we did, in past tense.
- Name the model when AI was involved.
- Admit what didn't work.
- Use ordinary words. “Honest” not “transparent.”
- “Revolutionary,” “powered by AI,” “delight,” “magical.”
- Em-dash padding inside short headlines.
- Exclamation marks. Ever.
- “We're a team that…” About copy.
Three families. One italic word at a time.
Inter Tight does the structural work. Instrument Serif (italic only) is the spotlight; spotlights stop working when there are five. JetBrains Mono is for everything that isn't quite copy: section markers, eyebrows, captions, metrics.
Near-monochrome, with five atmospheric stops.
The system is greyscale. Color enters as a gradient, glow, or pulsing pip — never a flat fill on type. One accent per screen.--danger is the single functional color, reserved for destructive admin actions and form errors.
Hairlines do the work shadows would.
The whole system is held together by 1px lines in three weights. Sections breathe; padding clamps fluidly with viewport. Borders before fills, always.
Small set, used everywhere.
Each component is a real element from globals.css — what you see is what ships.
Fairmark
Groundtruth
Things we've built — and shipped.
Nothing matches that.
Try a different topic or clear the search.
Same system. Denser.
The admin uses the same tokens and font triplet as the public site, but trades atmospheric breathing room for table density. Inputs switch from the underline .field pattern to a boxed.admin-input. Pages share a singleAdminPageHeader chrome.
Projects
Drift or pulse. Nothing slides.
Motion is presence, not transition. Long durations for ambient atmosphere, short ones for input feedback. The 600ms–1.5s “page transition” range is empty on purpose.
Honest software.
All ambient animation respects prefers-reduced-motion.
Things we've decided not to do.
Listed in case it gets tempting later.