Rondleiding door de repo
De repo is een monorepo: drie apps en vier gedeelde packages in één Git-repository, beheerd met pnpm workspaces en Turborepo.
Directoryapps/
Directorysite-template/ Astro SSR, publieke klantsite plus CMS, per klant gedeployed
- …
Directorymaster-dashboard/ Nuxt, centraal beheer voor de platformbeheerder
- …
Directorydocs/ Astro Starlight, deze documentatie
- …
Directorypackages/
Directorycontract/ types en Zod-schema’s, de enige bron voor alles wat beide apps raakt
- …
Directorydb/ Drizzle-schema’s, migraties en connectie, voor tenant en master
- …
Directoryblocks/ blokkenbibliotheek, schema plus renderer per blok
- …
Directoryops/ beheerscripts, bootstrap, users, backup, restore, verify
- …
Directorytenants/ bootstrap-JSON per klant met eerste pagina’s, navigatie en theme
- …
Directoryscripts/ shell-scripts voor de VPS en Postgres, provisioning, backups, verificatie
- …
- AGENTS.md instructies voor AI-agents die in de repo werken
- README.md korte start
- docker-compose.yml lokale Postgres 18 en MinIO
- pnpm-workspace.yaml welke mappen packages zijn
- turbo.json de taken build, dev, typecheck en clean
- tsconfig.base.json gedeelde TypeScript-instellingen en de platform-paden
De apps
Section titled “De apps”apps/site-template
Section titled “apps/site-template”De klantsite: één Astro-app die zowel de publieke site als het CMS is. De belangrijkste mappen onder src/:
pages/bevat de routes: publieke pagina’s in de root, het CMS onderadmin/, API-routes onderapi/.actions/bevat de server-acties van het CMS (cms-pages.ts,cms-media.tsen zo verder): validatie, opslaan, auditlog, cache-purge, webhook.lib/bevat alles wat pagina’s en acties delen: auth, hosts, cache, media, mail, CSRF, en onderlib/platform/de koppeling met het dashboard.components/enlayouts/bevatten de Astro-componenten, metcomponents/cms/voor het CMS.middleware.tsbeslist per verzoek: publieke host of CMS-host, sessie nodig of niet.styles/global.csskoppelt Tailwind-utilities aan de theme-variabelen.
Lees De klantsite van binnen voor de samenhang.
apps/master-dashboard
Section titled “apps/master-dashboard”Het dashboard: een Nuxt 4-app met de UI in app/ (pagina’s, layout, composables) en de server in server/ (api/ voor routes, utils/ voor de logica: provisioning, Coolify, Cloudflare, secrets, webhooks). Configuratie via runtimeConfig in nuxt.config.ts. Lees Het master dashboard van binnen.
apps/docs
Section titled “apps/docs”Deze site. Content in src/content/docs/, één map per sectie. Lees Documentatie uitbreiden.
De packages
Section titled “De packages”De afhankelijkheden lopen één richting:
site-template ──┐ ┌── master-dashboard ├─► blocks ───┤ ├─► db ───────┼─► contract └─► ops ──────┘@platform/contractstaat onderaan en hangt van niets anders af (alleen Zod). Alles wat beide apps raakt, staat hier: theme, blokken, content, platform-types, webhook-events, bootstrap-config.@platform/dbexporteert het tenant-schema als@platform/dben het master-schema als@platform/db/master, elk met eigen migraties (drizzle/endrizzle-master/). Verder alleen de connectiegetDb(databaseUrl); geen applicatielogica.@platform/blockskent per bloktype het schema (uit contract), een label en beschrijving voor het CMS, en de Astro-renderer.BlockRenderer.astrokiest optypede juiste component.@platform/opsbevat pure functies (bootstrapTenant,createCmsUser,backupTenant,restoreTenant,verifyTenant,provisionTenantDatabase) met dunne CLI-wrappers. Het dashboard roept dezelfde functies aan.
De packages exporteren TypeScript-bron, geen gebouwde dist/. Daarom staan ze in astro.config.mjs onder vite.ssr.noExternal en in nuxt.config.ts onder build.transpile.
Tooling
Section titled “Tooling”- pnpm workspaces koppelt de packages via
workspace:*. Installeer altijd vanuit de root metpnpm install. - Turborepo draait taken over alle packages:
pnpm build,pnpm typecheck,pnpm dev,pnpm clean. Een package zonder het betreffende script wordt overgeslagen. Inturbo.jsonstaat welke omgevingsvariabelen een build mag zien (envenpassThroughEnv). - TypeScript in strict mode. De root en de packages gebruiken TypeScript 7;
site-templateendocs(voorastro check) enmaster-dashboard(voorvue-tsc) pinnen 6.0.3. - Versies zijn exact gepind in de apps. Verifieer een versie altijd met
npm view <pakket> dist-tagsvoordat je configuratie schrijft; zie Werkwijze en regels.
Waar begin je met lezen
Section titled “Waar begin je met lezen”- Architectuur voor de keuzes en de harde regels.
packages/contract/src/om de vormen van de gegevens te zien; dat is de snelste manier om het domein te leren.apps/site-template/src/middleware.ts, daarna één publieke pagina en één CMS-actie.- Datamodel naast
packages/db/src/schema.ts.