Builders as compilers
How a Startup project compiles into a running business, which Builder owns each folder, and how to trace any value to its file.
A Builder compiles part of a project into the running business. StartupBuilder directs four others, and each owns a set of folders.
Five Builders
| Builder | Compiles | Produces |
|---|---|---|
| StartupBuilder | startup.ts, startups.lock, settings.mdx, policies.mdx, agents/, workflows/, plays/, systems/, dashboards/, tests/ | The Startup, Teams, Roles, Processes, Workflows, Dashboards |
| SoftwareBuilder | nouns/, verbs/, evaluators/, mappings/, env.ts, products/ of kind App, API, Agent or Dataset, apps/, code/ | Nouns, Verbs, Functions, Apps, the API, SDK, CLI and MCP |
| SiteBuilder | sites/, domains/, content/, brand/, components/ | Sites, Pages, Domains, Brand, Components |
| [Service](/business/nouns/service)Builder | products/ of kind Service, and the outcome terms in its Offer | Services and their work lifecycle |
| SalesBuilder | offers/, demand plays/ | Offers, Prices, checkout, Stripe Products and Prices |
One compile
Every save under npx startup-builder dev, and every push, runs the same steps:
- Parse. Each file becomes a typed record. A syntax error, a secret-shaped value or a key set twice stops here and names the line.
- Canonicalize. The record is printed in one canonical form and fingerprinted. Formatting changes mint nothing.
- Resolve. Own values merge over the pinned Startup Template into
.sb/.resolved/ - Build. Each Builder compiles its folders: types, routes, screens, Pages, Stripe objects, MCP tools.
- Check. Verb tests, Role tests, scenario tests and Evaluators run on the preview.
- Preview. The result is a Change on its own preview address, merged with
Change.mergeand deployed withVersion.deploy.
What a compile produces
One nouns/ file, in a Startup that declares a Lease Noun, yields every one of these:
| Output | Where |
|---|---|
| Types | .sb/, and /$.d.ts for agents |
| API | GET /leaseline.app/, POST /leaseline.app/ |
| SDK | $.Lease.renew({ lease }) |
| CLI | npx startup-builder do Lease.renew --json '{"lease": |
| MCP | Lease.renew in the do tool's program |
| App | /app/, and a form for each Verb |
| Events | Lease.created, Lease.renewed |
| Docs | A reference page for the Noun and each Verb |
Reading the output
To see where any value came from, show it:
npx startup-builder show /offers/ pro/ priceoffers/ pro.price = $29 per month
set by offers/ pro.mdx: 3
shadows solo-saas@7 ($19 per month)