AI-gestuurde chatbot voor Gemeente Den Haag, gespecialiseerd in stadslandbouw, voedselbeleid en duurzaamheidsinitiatieven.
Dit project is een bun workspace monorepo met de volgende packages:
| Package | Beschrijving |
|---|---|
packages/web |
Vite + React frontend (TypeScript) |
packages/api |
Express.js API server met Prisma ORM (TypeScript) |
packages/shared |
Gedeelde types, utilities en AI tools |
packages/ingestion |
Data ingestion pipeline: TypeScript processors + Python collectors |
- Bun 1.3+ (package manager)
- Node.js 18+
- Docker (voor lokale databases)
- Python 3.9+ (voor PDF/web ingestion scripts)
Start PostgreSQL (met pgvector) en Redis via Docker:
bun docker:upKopieer .env.example naar .env.local in de root:
# Database (lokale Docker container)
POSTGRES_URL=postgres://postgres:postgres@localhost:5432/chatbot
# Redis (lokale Docker container)
REDIS_URL=redis://localhost:6379
# Auth (genereer met: openssl rand -base64 32)
AUTH_SECRET=jouw-gegenereerde-secret
# OpenAI API Key (voor embeddings)
OPENAI_API_KEY=sk-...bun install
bun db:migrate# Start zowel API als Web
bun dev
# Of afzonderlijk:
bun dev:api # Alleen API (port 3001)
bun dev:web # Alleen Web (port 5173)De web app draait op http://localhost:5173, de API op http://localhost:3001.
De pipeline haalt documenten op, verwerkt ze en genereert embeddings voor de RAG-functionaliteit.
Bronnen (PDF/Web/CKAN) → Verwerking → Database → Embeddings → Seed Export
- Pull: Bronnen worden opgehaald (PDFs, webpagina's, CKAN, wetgeving)
- Process: OpenAI embeddings worden gegenereerd voor alle chunks
- Backup/Restore: Seed data voor deployment
# Bekijk alle beschikbare commands
bun run ingest --help
# Volledige pipeline: pull all sources + process
bun run ingest all
# Of per stap:
bun run ingest pull pdf # Verwerk PDF documenten
bun run ingest pull web # Scrape webpagina's
bun run ingest pull ckan # Sync CKAN datasets
bun run ingest pull law # Sync Omgevingswet
bun run ingest process # Genereer embeddings
# Pipeline met opties
bun run ingest all --skip-pdf --skip-web # Alleen CKAN + law
bun run ingest all --force # Force re-import allesbun run ingest status # Toon document counts
bun run ingest backup # Exporteer naar seed file
bun run ingest restore # Importeer van seed file
bun run ingest reset --yes # Wis alle document dataBronnen worden geconfigureerd in JSON bestanden:
packages/ingestion/config/pdf.json- PDF documentenpackages/ingestion/config/web.json- Webpagina'spackages/ingestion/config/ckan.json- CKAN open data portalpackages/ingestion/config/law.json- Nederlandse wetgeving (BWB)
bun db:migrate # Migraties uitvoeren
bun db:generate # Prisma Client genereren
bun db:studio # Prisma Studio openen (database GUI)
bun db:push # Schema pushen naar database (development)
bun db:pull # Schema pullen van databasebun docker:up # Start databases
bun docker:down # Stop databases
bun docker:clean # Verwijder databases en volumes
bun docker:logs # Bekijk logsbun build # Build alle packages
bun typecheck # TypeScript type checking
bun lint # Biome linting
bun test # Playwright E2E tests- Frontend: Vite, React 19, TypeScript, Tailwind CSS, shadcn/ui
- Backend: Express.js, Better Auth, Prisma ORM
- Database: PostgreSQL met pgvector + PostGIS, Redis
- AI: AI SDK, OpenAI embeddings
- Data Processing: Python (Docling, BeautifulSoup), TypeScript (CKAN, wetgeving)