Skip to content

About

Traceerbaar CBS gemeentelijk bevolkingsplatform met Python, PostgreSQL, FastAPI en React.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Gemeente Data Platform

CI Python PostgreSQL React

Een controleerbaar data-platform voor gemeentelijke bevolkingsinformatie: van officiële CBS OData-records tot een responsive, read-only dashboard. Ontwikkeld door Salah Abdulkader als end-to-end portfolio voor data-engineering en applicatieontwikkeling.

Live dashboard · Publieke API-docs · GitHub-profiel · LinkedIn

Actuele desktopweergave met vaste demonstratiedata uit de frontend-smoke

Dashboard bekijken · API-documentatie · Portfolio-walkthrough

Waarom dit project?

Open overheidsdata is pas bruikbaar wanneer herkomst, kwaliteit en interpretatie zichtbaar blijven. Dit platform haalt CBS OData-data op, valideert en bewaart immutable raw runs, transformeert naar processed Parquet/CSV, laadt PostgreSQL-marts transactioneel en biedt die veilig aan via FastAPI en React.

flowchart LR
  CBS[CBS Open Data] --> ETL[Extractie en validatie] --> DB[PostgreSQL]
  DB --> MART[Mart-views] --> API[FastAPI] --> UI[React-dashboard]
Loading

Aantoonbare resultaten

Het dashboard biedt nationale trends, gemeentelijke KPI's en leeftijdsopbouw, een interactieve kaart, CSV-export en deelbare URL-state. Eén vergelijking toont twee gemeenten in absolute aantallen of als index. Sticky sectienavigatie en inklapbare mobiele secties houden de pagina overzichtelijk. Broninformatie, lineage en een kwaliteitsmonitor ondersteunen de interpretatie.

Onderstaande bevolkingscijfers beschrijven de gevalideerde dataset 2020–2026; de actuele beschikbare perioden staan in het dashboard.

Resultaat Stand
Gemeentecodes in dimensie 360, inclusief historische codes
Perioden en feiten 7 perioden (2020–2026), 2.420 gemeente-jaarfeiten
Actieve gemeenten in 2026 342
Ontbrekende waarde Gemiddelde bevolking 2026 blijft null, nooit nul
Kwaliteit Python 3.11/3.14, unit-, 5434-integratie- en browser-E2E-tests

Historische codes blijven voor herleidbare tijdreeksen in de dimensie en zijn niet allemaal actief in 2026. Woonplaatsen zoals Benthuizen en Ter Aar zijn geen zelfstandige gemeenten en hebben daarom geen gemeentecode.

Technologie

Onderdeel Keuze
Ingestion/transformatie Python, CBS OData, datacontracten, Parquet/CSV
Database PostgreSQL 17, Alembic, core/mart/ops
API/frontend FastAPI least-privilege, React, TypeScript, Vite
Infra/kwaliteit Docker Compose, Nginx, pytest, Vitest, Playwright, GitHub Actions
Publieke hosting Render voor dashboard/API, Neon voor PostgreSQL
Architectuur C4, ERD, lineage, TOGAF-light, ADRs

Mijn bijdrage

Dit portfolio-project demonstreert end-to-end data-engineering: Python en SQL, datacontracten en kwaliteitsvalidatie, idempotente transactionele loads, PostgreSQL-modellering, FastAPI-security, React/TypeScript, Docker Compose, unit-/integratie-/E2E-tests en GitHub Actions. De trade-offs staan in de C4-, ERD- en lineageweergaven, TOGAF-light en ADRs.

Kwaliteit en veilige deployment

Datacontracten en checksums maken ETL-runs reproduceerbaar en herleidbaar; validatie gaat vooraf aan atomaire loads. PostgreSQL-rollen hebben minimale rechten en de publieke API is read-only. Secrets blijven buiten Git. GitHub Actions controleert wijzigingen vóór integratie; deployment en rollback zijn beschreven in het runbook. Het dashboard toont ontbrekende waarden als onbekend en maakt historische herindelingen expliciet.

Enkele technische keuzes:

  • Transactionele loads laten bestaande productiedata intact wanneer een dataset ongeldig is; lineage koppelt publicaties aan hun verwerkingsrun.
  • Grote GeoJSON-geometrieën worden iteratief verwerkt, zonder spread-argumenten die een stack overflow kunnen veroorzaken.
  • Ontbrekende waarden blijven null; de interface vangt Render cold-starts op met laadfeedback en begrensde herhaalpogingen.
  • Docker en GitHub Actions ondersteunen reproduceerbare CI/CD. Cloudbootstrap is een expliciete beheerstap, gescheiden van de read-only publieke runtime; zie clouddeployment.

Bronnen: CBS 03759ned (bevolking), 70072ned (leeftijdsopbouw) en CBS/PDOK-gemeentegrenzen 2026. Bevolking en leeftijd gebruiken 1 januari als peildatum. Zie het gemeenteprofiel en de kwaliteitsmonitor voor dekking en interpretatie.

Snel starten (Windows PowerShell)

Vereist: Git, Docker Desktop en Python 3.14. Node/npm is alleen nodig voor frontendontwikkeling buiten Docker.

git clone https://github.com/salahooo/gemeente-data-platform.git
cd gemeente-data-platform
Copy-Item secrets/postgres_password.txt.example secrets/postgres_password.txt
Copy-Item secrets/app_password.txt.example secrets/app_password.txt
Copy-Item secrets/api_password.txt.example secrets/api_password.txt
# Vul ieder lokaal secretbestand met een eigen sterk wachtwoord; commit ze nooit.
docker compose --profile dashboard up -d --build
Start-Process http://localhost:3000
Start-Process http://localhost:8000/docs

Stop zonder volumes te verwijderen: docker compose --profile dashboard stop dashboard api en docker compose stop postgres. Voor losse ontwikkeling: start PostgreSQL/API zoals hierboven en voer in frontend/ npm ci; npm run dev uit. Alleen voor nieuwe brondata is py -3.14 -m gemeente_data_platform.run_pipeline nodig.

Documentatie

Aanbevolen GitHub-presentatie

Beschrijving: “Traceerbaar CBS gemeentelijk bevolkingsplatform met Python, PostgreSQL, FastAPI en React.” Website: live dashboard. Topics: python, fastapi, postgresql, react, typescript, docker, data-engineering, cbs-open-data, github-actions, data-quality, alembic, government-data.

About

Traceerbaar CBS gemeentelijk bevolkingsplatform met Python, PostgreSQL, FastAPI en React.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages