How the code is organized
src/Api: the server.Features/holds one folder per feature (Pages, Spaces, Export and so on), each with its own endpoints;Domain/the data;Infrastructure/what the features share, such as the database, permissions, authentication, email and storage;Program.cswires it together.src/web: the web app, in React and TypeScript.routes/holds a file per screen,components/the pieces they share,editor/the editor, andapi/client.tsevery call to the server.collab/: the collaboration service.deploy/: the Dockerfiles, Caddy’s configuration, and the backup services’ scripts.tests/Api.Tests: the server’s tests.scripts/: tools, including the screenshot harness and the scripts that write this site.docs/: the architecture, security model, backup runbook, the changelog, and the plan.
Conventions
Database changes are migrations. Change the model, then from
src/Apirundotnet ef migrations add <Name> --output-dir Infrastructure/Migrations. Under Docker Compose a shortmigrateservice applies them before the app starts; running the app on its own outside production applies them itself.A new kind of block is defined once, in the web app’s
editor/extensions.ts, never in one editor alone: the collaboration service and the exports rely on the same definition.What you may not see does not exist. A request for something the caller may not see answers
404, never403.Every change is written down. An entry in
docs/CHANGELOG.mdsaying what changed and why, anddocs/architecture.mdupdated if how something works has changed.Words people read are in US English, plain and specific, without em dashes. These docs follow
scripts/docs/WRITING.md.
Applies to | Tesria 0.6 and later |
|---|---|
Updated | September 24, 2026 |
Changes | Revised. |