Worked example
This site and a wedding company run on the same base
Neither shares a page design with the other. Both take every upstream release. Here is exactly how, with the numbers from this repository.
Most templates ask you to choose. Make it yours and you fork it, and the updates stop. Keep the updates and you keep the design somebody else picked. That trade is so normal it is usually not even mentioned.
This page is the evidence that it is not necessary — and it is deliberately checkable rather than persuasive. Every number below comes from git diff template/main and npm run upgrade:check in this repository.
44
files we added
our own pages, components and content
5
template files edited
all five are lane files — content and config
0
framework files touched
167 core files, 0 edited, 0 missing
The number carrying the argument is the last one. Anyone can fork a template and change it; the interesting claim is changing it this much and still being able to take upgrades.
The lanes, and what this site did with each
A lane is a file or folder that upstream releases never write to. The rule is not “change less” — it is “change here”.
site.config.tsBrand, nav, module toggles, which pages are public and which are indexed.
Here: Our name and tagline, the Genesis organization this site talks to, and the public + sitemap paths for every page we added.
lib/content/*Every word on the marketing pages, the blog, the FAQ, legal.
Here: Our value props, 30 FAQ entries, 9 blog posts, 13 capability walkthroughs, 3 comparison pages, the API surface and the AI-builder gap analysis.
app/** (new segments)Your own pages and routes. New files are always on the path — they are not in the hash-lock.
Here: Roughly 90 pages: /api, /platform, /managed-backend, /live-tiles, /ai-app-builders, /capabilities/*, /alternatives/*, /recipes/*, /features/*.
app/(home)/Owning the homepage outright, replacing the framework one.
Here: We own /. Our layout re-exports the framework chrome rather than copying it, so the header and footer still receive upstream improvements.
components/** (not components/ui)Your own components, including your own live tiles.
Here: SceneHero and its stylesheet — a full-bleed readable tile header, since promoted into the base so every site gets it.
public/**Your images and static assets.
Here: Untouched so far — our imagery is drawn live rather than uploaded.
What makes the zero possible
Not restraint — routing. These are the things we did not do, and none of them cost us anything we wanted:
- No component in components/ui was edited — the kit is used as shipped.
- No file under lib/ outside the content lanes was touched: the API client, hooks, i18n and formatting are exactly the template’s.
- middleware.ts, the build configs and the gate scripts are unmodified.
- The framework marketing pages were not edited to change their words — the words come from the content lane.
The proof, in one command
Every clone ships this. Run it in yours at any point to find out whether you are still able to take upgrades:
$ npm run upgrade:check upgrade-check: 167 core files, 0 edited, 0 missing ✓ on the upgrade path — no core files edited. Framework upgrades will drop in cleanly.
Two sites, one base
The clearest way to see it is to compare this site with an event company built on the same template from one screenshot and a prompt. Different structure, different look, different business — same base, both current.