FairCTO
← All work

Ruimtepaspoort — resourcepaspoort.app

A searchable passport for Amsterdam's public space, built from open BGT source data with explicit data provenance.

2026·View live
Ruimtepaspoort — resourcepaspoort.app
Next.jsMapLibre GLPMTilesPythonBGT / PDOKVercel Blob

Outcome

  • A city-scale open-data map from roughly 11 GB of source data, delivered as a 121 MB range-requestable tileset.
  • A provenance-first passport that is honest about what is measured, calculated and unknown.
  • Weekly data processing remains separate from fast, predictable application deployments.

My role

Sole engineer — data pipeline, vector-tile architecture, map experience and provenance model.

The challenge

Amsterdam's public-space data is available as open BGT data, but the source arrives as roughly 11 GB of CityGML — far too large and complex for an interactive browser map. The product also needed to distinguish what the government actually measured from values that were calculated, estimated or unavailable.

What I built

A searchable MapLibre application where every mapped public-space object opens a passport showing type, surface, size, location and provenance. A separate weekly Python pipeline downloads BGT data, filters historical registrations, converts CityGML to GeoJSONL and builds a range-requestable PMTiles file.

How it works

  • The pipeline downloads and converts current BGT registrations, excluding historical records that would otherwise double-count more than half of some object types.
  • Geometry is tiled in multiple passes so lower zoom levels contain only drawing attributes, reducing typical session egress from roughly 16 MB to 5.5 MB.
  • The Next.js map streams vector tiles from Vercel Blob and opens a plain-language passport for the selected object.
Stack & why+
Python + shell data pipeline
The 11 GB source conversion runs independently from the web build. Heavy geodata work belongs in a scheduled pipeline, not inside every Vercel deployment.
PMTiles + Vercel Blob
One 121 MB vector-tile object is streamed with HTTP range requests. Users download only the map areas and zoom levels they inspect, rather than a city-sized payload.
MapLibre GL
Open-source vector maps — no per-tile bill and full control over styling, ideal for a data-heavy building map.
BGT via PDOK
Authoritative Dutch public-space geometry under CC0. The pipeline filters historical registrations and preserves source-holder context without incorrectly treating it as ownership.
Explicit provenance model
Every field is labelled measured, calculated, estimated or unknown. The app refuses to manufacture material values when the source coverage is too sparse or biased.

Ready to make AI actually work?

Products that do real work.