Workspace source
Workspace source
A tenant workspace is a plain Vite project. Authors place one declaration in each recognized
filesystem role under src/; Pod derives all assembly and generated types.
Canonical layout
src/
├── collections/
│ ├── +relationship.ts
│ └── <lower_snake_case>/
│ ├── +model.ts
│ ├── +hooks.ts # optional
│ ├── +pipelines.ts # optional
│ └── +integrations.ts # optional
├── apps/**/+<lower_snake_case>.svelte
├── automation/+<lower_snake_case>.ts
├── remotes/+<lower_snake_case>.ts
└── +seed.ts # optional Required roles are src/collections/+relationship.ts, at least one collection +model.ts, and at least one app src/apps/**/+<lower_snake_case>.svelte. App, automation, and remote IDs come
from their filenames. Misplaced, duplicated, nested, and unknown role files fail structural
compilation.
Generated state
.norbital/
├── diagnosis/ # ignored
├── dist/ # ignored
├── generated/ # ignored
├── migrations/ # committed
├── types/ # ignored
└── tsconfig.json # ignored The authored root tsconfig.json extends .norbital/tsconfig.json. Pod
owns that single generated config and all compiler paths; it does not use baseUrl.
Commands
pod sync
pnpm build Sync refreshes generated modules and local $types. Build synchronizes first, runs one
full Svelte check, then emits the server and client environments under .norbital/dist/.
Authoring boundaries
- Apps import typed client access from
$pod/client. - Server roles use their adjacent generated
./$types.js. - Do not hand-author registries, assembly modules, generated declarations, or bundling scripts.
- Do not add SvelteKit routes,
svelte.config.*,$app/*, or$lib.