Scroll through the complete platform workflow — from citizen letter upload to geospatial analysis.
A municipality wants to know where to place new EV charging stations. Citizens can submit requests via handwritten letters, a web form, or a phone call. Each request is processed by AI to extract the address, geocoded to exact coordinates, stored in a multi-layer data warehouse, and visualized on interactive maps — all using fully sovereign, open-source tooling with zero cloud lock-in.
This demo uses real data from CBS (Statistics Netherlands) for the municipality of Zoetermeer, retrieved via their open API. The same approach can be applied to any Dutch municipality.
The uploaded letter file is stored in RustFS, a self-hosted S3-compatible object store. Files are organized by upload date and can be browsed through the RustFS web console. This ensures all raw documents are preserved alongside the platform with no external cloud dependency.
If the upload is a PDF, it's first converted to PNG via a Python script. The image is then sent to Mistral's open-source vision LLM "Pixtral" hosted on Scaleway, which reads the handwritten text and extracts the address as structured JSON.
All results (letters, web and phone requests) land in ClickHouse following a multi-layer model: bronze (raw data + metadata), silver (cleaned and combined across channels), and gold (final analytics-ready tables with dimensions, facts, and marts).
Prefect orchestrates the entire pipeline — from upload processing, LLM extraction, and geocoding to loading into ClickHouse and running data quality checks. A scheduled "poll pending letters" flow checks every few minutes for unprocessed letters.
A FastAPI application with Swagger documentation exposes endpoints for uploading letters, retrieving GIS results, and querying analytics. Access requires a time-limited API key generated through the admin portal, routed through the Tyk API gateway.
GeoServer publishes geospatial layers: CBS neighbourhood boundaries, existing charging points, requests per neighbourhood, and proximity analysis results. These can be downloaded in various formats or connected directly to ArcGIS or QGIS. GeoNode provides a portal for sharing these GIS resources.
Upload
Storage
LLM
Geocoding
ClickHouse
Prefect
dbt
API
Grafana
GIS
Hop