Skip to content

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.