Static until it is not
The first form, the first gated download, or the first personalised block is where a static generator stops being enough.
stacksjs.com is STX views, one shared data file, and the same deploy command the API uses. A marketing site usually starts static and then needs a form, a newsletter, a blog, and an A/B test. Here those are features already in the install rather than four more services on the invoice.
The work that arrives whether you planned for it or not.
The first form, the first gated download, or the first personalised block is where a static generator stops being enough.
Marketing pages are judged on first paint, and every third-party script is a tax on it.
Copy, pricing, and launch dates move faster than deploys if editors cannot touch them.
Analytics has to exist, and increasingly it has to be first-party and privacy-preserving.
All of it in the same install, typed against the rest of your application.
Single-file components with server and client scripts, layouts, and partials, rendered on the server with no build config to own.
Newsletter, contact, and lead forms post to actions, validate against the same schema, and queue their mail.
Utility CSS with a design-token layer, dark mode, and no runtime cost on the page.
The CMS models are there when a landing page becomes a resource library.
Fathom or the self-hosted driver, configured in config/analytics.ts, without a tag manager.
buddy deploy builds the site, publishes the CDN, and updates DNS and certificates from config/cloud.ts.
Every one of these ships in the same install. Follow one to see what it covers.
Buddy scaffolds, runs, and ships this the same way it does the rest of the app.
Projects of this shape usually grow into one of these.