Project Structure
A tour of the folders and files inside a SiteKnock project, before and after you add your first app.
A fresh project
When you scaffold a project, it starts lean — no apps/ directory yet, just the configuration and tooling:
my-saas/
├── config/
│ └── sk-config.jsonc # Project manifest (apps, features, branding, SEO)
├── scripts/ # CLI dispatchers (run-app, run-generator, etc.)
├── docker-compose.yml # Dev services (Postgres, Mailpit, MinIO, Redis)
├── turbo.json # Turborepo config
├── pnpm-workspace.yaml # Workspace + catalogs
├── package.json # sk-version + @siteknock/* dependencies
└── README.md
After adding an app
Running pnpm app create my-app --type fe+be expands the project with everything that app needs:
my-saas/
├── apps/
│ ├── frontend/ # Next.js App Router (port 3000)
│ └── backend/ # Express API (port 5000)
├── config/
│ ├── sk-config.jsonc # Now lists my-app
│ └── my-app/
│ ├── config.jsonc # Per-app config overrides
│ ├── branding.jsonc # Per-app branding
│ └── layout.jsonc # Per-app layout
├── locales/
│ └── my-app/en/ # Translations
├── pages/
│ └── my-app/ # Page content
└── emails/
└── my-app/ # Email templates
Key locations
| Path | What lives here |
|---|---|
config/sk-config.jsonc | The single source of truth — apps, features, branding, SEO |
config/<app>/ | Per-app config, branding, and layout overrides |
apps/frontend/ | Your Next.js app (App Router, locale-prefixed routes) |
apps/backend/ | Your Express API (/api/* routes) |
apps/backend/prisma/partials/ | Your .prisma.part schema partials |
locales/<app>/<locale>/ | Translation JSON files |
pages/<app>/ | Page content designed in the Page Workspace |
emails/<app>/ | Email templates designed in the Email Workspace |
Generated vs. yours
Files written by the generator (routing, branding wiring, the merged schema.prisma, env templates, feature flags) are regenerated whenever config changes. Your business logic — backend route handlers, custom components, and .prisma.part models — is yours to own.
All @siteknock/* packages are pre-built modules you import directly. You don't build them — you compose them.
Next steps
Was this page helpful?