Code-driven β
Behavior that lives in a dashboard or a wiki page has no audit trail, no rollback, and no way to reproduce locally. The next engineer discovers it by accident β or not at all.
The rule: if it affects how the system behaves, it lives in the repository.
In practice β
Assistant prompts β VAPI and Mastra agent definitions live in src/. Changing a system prompt is a PR. It goes through review, has a git history, and rolls back with the branch.
Scheduled and bootstrap jobs β declared in code via BullMQ's job scheduler, not a script that lives in a Notion page and gets run manually on deploy. β Bootstrap jobs
Property type system β adding a field type to the platform is a code change in packages/schemas. The UI picker, validation, and AI tooling follow automatically.
Config β env vars, validated at startup. The shape of what's expected is in code. β Configuration
Firebase rules β checked into the repo. Local dev and CI use the same rules as production.
Where the line is β
Data belongs in the database β workspace definitions, records, user content. The distinction: if it changes how the system behaves, it's code. If it's content the system operates on, it's data.
TIP
If reproducing a bug requires a step that isn't in the repo, that step should probably be in code.