#heading[Buildtools en ontwikkelcommando's]

Serengo maakt gebruik van een moderne JavaScript-toolchain gebaseerd op SvelteKit en Vite, aangevuld met TypeScript, ESLint/Prettier en Drizzle voor databasebeheer [@sveltekit-docs; @vite-docs; @drizzle-docs]. In dit hoofdstuk worden de belangrijkste tools en commando's samengevat.

== Bundling en framework

- *Framework*: SvelteKit 2 met Svelte 5-componenten en runes (`$props`, `$derived`, `$effect`).
- *Bundler/dev-server*: Vite 7, geconfigureerd in `vite.config.ts`.
- *Adapter*: `@sveltejs/adapter-node` voor een Node.js-productieserver (`svelte.config.js`).

De bundling gebeurt via Vite: tijdens ontwikkeling draait een snelle dev-server met hot module replacement; voor productie wordt een geoptimaliseerde bundel gebouwd met code-splitting en tree-shaking.

== Ontwikkelcommando's (pnpm scripts)

De belangrijkste commando's (zie `package.json`) zijn:

- `pnpm run dev`
  - Start de Vite dev-server met SvelteKit in ontwikkelmodus.
  - Handig tijdens actieve ontwikkeling; herlaadt automatisch bij codewijzigingen.

- `pnpm run build`
  - Maakt een productiebuild van de applicatie.
  - Gebruikt Vite + SvelteKit om geoptimaliseerde JavaScript en CSS te genereren.

- `pnpm run preview`
  - Start een lokale server bovenop de productiebuild.
  - Wordt gebruikt om de uiteindelijke build te testen voor deployment.

- `pnpm run check`
  - Voert `svelte-kit sync` en vervolgens `svelte-check` uit met de `tsconfig.json`.
  - Controleert TypeScript-typen en Svelte-componenten op fouten.

- `pnpm run lint`
  - Voert eerst `prettier --check .` en daarna `eslint .` uit.
  - Zorgt voor consistente code-stijl en detecteert mogelijke probleemgevallen.

- `pnpm run format`
  - Draait Prettier in schrijfmodus (`--write`) over het project.
  - Past de afgesproken formatteringsregels (tabs, single quotes, max 100 chars) toe.

== Databasetools (Drizzle ORM)

Voor het beheer van de PostgreSQL-database wordt Drizzle ORM gebruikt, met bijhorende CLI-commando's:

- `pnpm run db:start`
  - Start de PostgreSQL-database via `docker-compose` (zie `docker-compose.yml`).

- `pnpm run db:generate`
  - Genereert migratiebestanden op basis van wijzigingen in het Drizzle-schema (`src/lib/server/db/schema.ts`).

- `pnpm run db:migrate`
  - Voert de gegenereerde migraties uit op de database.
  - Wordt zowel lokaal als in de Docker-deployment gebruikt (entrypoint script).

- `pnpm run db:push`
  - Pusht de huidige schema-definitie naar de database (handig in vroege ontwikkelfase).

- `pnpm run db:studio`
  - Start Drizzle Studio voor het visueel inspecteren van de database.

- `pnpm run db:generate-erd`
  - Gebruikt `drizzle-erd` om op basis van het schema een ERD (`erd.svg`) te genereren.

== ESLint, Prettier en typechecking

- *ESLint*: bewaakt codekwaliteit en dwingt consistente patterns af, met ondersteuning voor Svelte (`eslint-plugin-svelte`) en moderne JavaScript/TypeScript-regels.
- *Prettier*: zorgt voor automatische formattering met de in `AGENTS.md` vastgelegde stijl.
- *TypeScript + svelte-check*: zorgen voor statische typeveiligheid doorheen de hele stack.

Samen vormen deze tools een sterke ontwikkelbasis: fouten worden vroegtijdig opgespoord, de code blijft leesbaar en het buildproces is voorspelbaar en reproduceerbaar.
