A New Client Is a Config File, Not a Code Change (Part 2 of 4)
You won't find a single client's name anywhere in this codebase. That rule is the difference between a platform and a pile of one-offs.
Under the Hood — Part 2 of 4. (Start at Part 1.)
A new client is a config file, not a code change
We have a hard rule on this platform: you will not find a single client's name anywhere in the code. Not a table, not a route, not a module, not a function, not a CSS class. If I ever feel the urge to type one, that urge is the bug — and the fix is to make it a parameter resolved at runtime.
So what is a client, if not code? A client is a descriptor: a database record, plus the data they've ingested. Generic code renders it. The operations cockpit reads the descriptor and decides which screens, which navigation, which metrics, and which branding to show. Onboarding the next operator in the same line of business is a config change and a data import — zero lines of code.
This is the whole game, and it's easy to underrate.
The moment you hardcode one client — their name, their figures, their branding, their special case — you've built a bespoke system wearing a platform's clothes. The next client forks it. The one after that forks the fork. Two years later you're running a consultancy that bills hours and calls itself a product. The generic-tenant discipline is the thing that keeps this a platform instead of a maze of near-identical copies.
The receipts: descriptor-driven provisioning, a database catalogue of descriptors, per-tenant branding, sub-clients who self-register under maker-checker approval — all rendered by one generic cockpit. A tenant reaches production purely through its descriptor, additively, without anyone touching a deployed shell.
Honest note: this is genuinely harder than hardcoding, every single time. The shortcut is always right there, and it always looks reasonable at 11pm. Refusing it is the tax you pay for scale — and it's the clearest line between a business that grows by adding config and one that grows by adding engineers.
If a client is just config, so is their AI spend — and we account for every single cent of it. There's a table for that.