🎨🔁🏷️
If you have been living under a rock, the agency model of "rebuild the whole site for every client" died around the time Astro shipped content collections. The internet collectively lost its mind for headless CMSes, then quietly went back to JSON files in git, because git has free version control, free preview deploys, and an actual diff view. Velocity X leans all the way into this: every brand identifier lives in one file, every page lives in a JSON.
Spoiler: porting the template to a new business is two steps. Edit brand.json. Drop new JSON files into category-pages/ and item-pages/. That is it. Zero Astro source changes, zero component rewrites, zero "let me just tweak the header for this client". The home page component order is locked — it is a Hormozi-tested conversion funnel and new brands inherit it for free.
Here is the shape. brand.json is the structural identifier of the whole site. Colors, fonts, contact details, plan tiers, hero copy. The schema lives next to it as brand.schema.json so typos fail at build time instead of in production.
The Astro page that consumes a category JSON is the second moving part. import.meta.glob picks up every file in category-pages/, getStaticPaths hands the slug to the route, and the page renders the JSON. The component tree never knows it is multi-brand — it just sees props.
Plot twist: the locked home-page component order is the feature, not a limitation. The order — hero, social proof, problem, solution, pricing ladder, FAQ, CTA — is the funnel. New brands inherit a proven conversion sequence without rebuilding it. The agencies charging $40k for a "custom design" rebuild the same funnel every time anyway. Do not @ me.
The catch: this only works if you resist the urge to break the pattern for one special client. The moment you add a per-brand override to a component, the abstraction leaks, the JSON stops being the source of truth, and you are back to forking sites per client. Discipline beats flexibility every time at the template layer.
The verdict: ship five brands from one repo, run five preview deploys off five branches, charge five clients. The template stays uniform, the JSON does the customisation, the funnel does the converting. Behold: the agency model, refactored.