Drift is the default
A separate docs site is a separate release cadence, and the gap between them is measured in wrong examples.
Documentation drifts when it lives in a different repository with a different pipeline. Stacks builds docs from markdown in the same project, generates the OpenAPI reference from the routes that actually exist, and publishes both with the application.
The work that arrives whether you planned for it or not.
A separate docs site is a separate release cadence, and the gap between them is measured in wrong examples.
Hand-written endpoint tables are stale the moment a route changes.
Readers give a docs site one query before they leave for the issue tracker.
Deciding it after launch means rewriting every URL you already published.
All of it in the same install, typed against the rest of your application.
docs/ becomes a site with navigation, sidebar, and theming through the docs build, configured in config/docs.ts.
buddy generate:openapi reads the routes and resources you defined, so the reference describes the running app.
The docs subdomain, its certificate, and its CDN are declared in config/cloud.ts next to the app.
Client-side or Meilisearch-backed search over the same content, without a crawler to schedule.
Docs, blog, and marketing pages read one palette, so the product does not change identity mid-click.
Snippets can live in the repository and be type-checked by the same tsc run as the app.
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.