One codebase. Each client gets their own database and their own installation. Work happens on branches, merges into main, and reaches the demo and clients only as a named release.
Every waste client runs the same code. Their differences are settings in a folder, and their data sits in a database of its own.
No client repos, no client branches. Copies drift apart, so every fix is made and tested three times.
Novvia is the exception: a different industry, so its own repo.
The whole product, add-ons included. A fix is made once and reaches every client at their next release.
Logo, colours, font, product and client name, footer.
Spotter (Ask) and the LMS, each switched per client. A feature for one client is built as an add-on too.
Their names for things: VP → Director, GM → General Manager. Ready to build when their specs arrive.
Which metrics show, thresholds, workflow steps. Added one at a time, each with a default.
Dev, the demo, and for every client a staging site and a live one, all from the one repo. Only a release reaches the demo and the clients.
| When you… | Dev site | Demo | Clients |
|---|---|---|---|
| Merge a branch into main | Updates by itself | No change | No change |
| Release Albany | No change | Updates | No change |
| Deploy Albany to Client A, staging | No change | No change | Client A's staging updates |
| Deploy Albany to Client A, live | No change | No change | Client A updates, once a second person approves |
Every site is deployed by GitHub Actions, which applies the database changes first and then builds; Vercel builds only the branch previews, on the dev site. Each environment has its own database: dev holds sample data, the demo its storyline, each client's staging safe sample data shaped like theirs, and each client's live site their own. A new Lucent Axis dev site and demo are built beside today's; Paul's demo site stays exactly as it is until Paul switches over.
Every piece of work starts from main and goes back to main. Two people means two branches side by side, never one inside the other.
An experiment that doesn't work out is deleted and leaves no trace. Branch from someone else's branch only when your work truly needs theirs, and merge after them.
A release is a permanent name on one exact version of main. Deploying puts that version on a site. Two verbs, two moments.
gh release create addison --generate-notes
Name what's on main. GitHub → Releases → Draft a new release → type addison → Generate release notes → Publish. The demo updates itself, database first.
"Release Addison"Put a release on a client. Actions → Deploy release → pick the release, the client and staging → Run. It applies the database changes, builds with that client's settings, and lands on their staging site. Once it checks out, run it again for live; someone else approves.
"Deploy Addison to Client A"Roll back: deploy the previous release; the database stays as it is, because it still works with it. Hotfix: branch from the release, fix only that, release it as albany-2; the fix also goes into main.
"Roll Client A back to Addison"Rules: never move or delete a release; a mistake is fixed by a new one. Database changes run on dev, then the demo, then clients, and each must still work with the previous release so a rollback is never blocked.
Nobody has to remember the rules. Claude raises each step at the right moment, as buttons, and a typed answer always works too.
Built into the repo so every developer's Claude does the same: project instructions say when to ask, a session-start check shows the branch and open pull requests, and two commands, /start-work and /release, walk the steps on purpose. Being tried in test-repo first.
One new habit at a time. Nothing here needs to happen all at once.
Nothing is moved: new sites and databases are built in Lucent Axis's own Vercel and Supabase accounts, beside the personal ones. First the dev site and the demo, then each client; Novvia gets its own site built from its own repo. Paul's demo stays untouched until Paul switches to the new one; then the personal copies are paused, and nothing is pushed to two places any more.