Engineering3 min read

One identity file, whole app

Change one line in a file called identity.json, rebuild, and the buttons shift. So does the logo, the focus ring around every input, the border on every card, both the light and dark themes. Nobody touched a component. Nobody hunted through a design file wondering "wait, is this button using the old blue or the new one?" There is no old blue somewhere. There's one file, and everything reads from it.

We didn't build this for the party trick. We built it because it's the only way we know to keep a product from slowly drifting apart.

What's actually in the file

Less than you'd think. A handful of colors, for light mode and dark mode — background, surface, three levels of ink for text, a line color for borders, one accent, plus a small set for good/warn/critical states. Two typefaces: one for headlines, one for everything else. A three-step radius scale. A single spacing unit everything else multiplies from. And a short list of rules we don't break — no gradients, no second brand color, no shadows on list rows.

That last part matters more than the palette does. A design system is as much about what it forbids as what it allows. The palette tells you what Binder looks like today. The rules are what keep it looking like Binder next year, after fifty more screens have shipped and three more people have worked on them.

Why one file instead of a hundred decisions

The alternative is the normal way software gets built: a button component picks a blue, a card picks a slightly different blue six months later, and nobody notices because they're 2% off and it's never anyone's whole job to notice. Eventually the app is wearing a dozen near-identical blues and no one can tell you which one is "correct," because correctness was never written down anywhere a computer could check it.

Writing the tokens into one file that every screen has to import turns "please try to stay consistent" into a structural guarantee. A component can't quietly invent its own gray. It doesn't have a gray to invent — it only has the ones the file gives it.

Dark mode is not a second design

Because everything already comes from tokens, dark mode isn't a parallel set of screens somebody has to keep in sync by hand. It's the same tokens, with different values, swapped by one attribute on the page. We designed light and dark together, as two settings of the same handful of numbers, instead of shipping light mode and bolting on a "dark version" later as an afterthought.

What this means for you

Nothing you have to think about, honestly — that's the point. But it's why Binder won't quietly drift under you. The button in the corner of your screen today will be in the same place, the same size, the same color relationship to everything else, a year from now. What you learn once about how this product looks stays true. We'd rather spend our design effort getting the file right once than chasing consistency across every screen forever.