An AI-native spatial operating system for the built environment. Built by North Solution
Lumen is being rebuilt around one canonical model of the world. The new world-first application lives in apps/lumen; the existing Vacancy, Space, and Pipeline applications remain operational prototypes and sources of proven domain logic during the staged migration.
The current public tools address visibility and coordination failures at the core of the Netherlands housing shortage. No account required. No paywall.
| Tool | What it does |
|---|---|
| vacancy. | Maps vacant and underused buildings with a viability filter for housing conversion |
| space. | Identifies underused and buildable land for new housing |
| pipeline | Shows regional construction pipeline activity and capacity bottlenecks |
All tools default to Deventer (our proof-of-concept municipality) and are switchable to any Dutch gemeente.
These tools accompany a research paper by North Solution that is in development.
The thesis: the Dutch housing crisis is primarily a visibility and coordination failure, not a pure scarcity problem. Space exists but is invisible. Vacancy is undercounted. Construction capacity is unconfident. These tools make those failures legible.
Read the full paper at thenorthsolution.com.
Requirements: Node.js ≥ 20, npm ≥ 10
# Clone the repo
git clone https://github.com/thenorthsolution/lumen.git
cd lumen
# Install dependencies
npm install
# Start all tools in development mode
npm run devIndividual tools run on:
- Lumen World: http://localhost:3000
- Lumen Vacancy: http://localhost:3001
- Lumen Space: http://localhost:3002
- Lumen Pipeline: http://localhost:3003
lumen/
├── apps/
│ ├── vacancy/ # Next.js 15 + MapLibre GL
│ ├── space/ # Next.js 15 + MapLibre GL
│ ├── pipeline/ # Next.js 15 + D3/Chart.js
│ └── lumen/ # New unified spatial workspace
├── packages/
│ ├── world/ # Canonical entities, commands, renderer contracts
│ ├── pdok-client/ # Typed PDOK WFS + tile helpers
│ └── bag-utils/ # BAG status codes + viability model
└── pipeline/ # Python + DuckDB data pipeline
Stack:
- Frontend: Next.js 15 (App Router), TypeScript, CSS Modules
- Maps: MapLibre GL JS (WebGL vector tiles, zero licensing cost)
- 3D: lazy Cesium adapter with PDOK imagery and a keyless 3D BAG fallback
- Geodata: PDOK WFS/WMS (public, no key), CBS Statline, TenderNed
- Shared packages: Turborepo monorepo
- Data pipeline: Python + DuckDB (reproducible, single-command)
- Managed cloud: Vercel + Supabase (Auth/PostgreSQL/PostGIS/Storage) + Stripe
- Public world delivery: open PDOK/3DBAG sources, with a future versioned tile/CDN pipeline
The public 2D and open 3DBAG world runs without an account, API key, or paid map service. Accounts, managed AI, organization workspaces, and billing are optional cloud capabilities. Lumen's 3D renderer uses the public Dutch 3D Basisvoorziening through PDOK.
Apply supabase/migrations/202609100001_lumen_cloud_foundation.sql and copy apps/lumen/.env.example to configure the managed layer. The product and repository boundary is documented in docs/LUMEN_CLOUD_FOUNDATION.md. Selected lifecycle logic is adapted from God's Eye View under MIT; see THIRD_PARTY_NOTICES.md.
| Source | Used by | License |
|---|---|---|
| BAG (PDOK) | leegstandsradar, ruimtevinden | CC0 |
| Bestemmingsplan (RO) | ruimtevinden | Open |
| Kadastrale percelen (PDOK) | ruimtevinden | Open |
| TenderNed | bouwcapaciteitcheck | Open |
| CBS Statline | bouwcapaciteitcheck | CC0 |
| Omgevingsloket | bouwcapaciteitcheck | Open |
Contributions are welcome and genuinely needed. The highest-value areas:
Data quality
- Reporting misclassified objects via the in-app flag button
- Expanding the gemeente registry (
packages/pdok-client/src/gemeente.ts) - Improving the viability scoring model (
packages/bag-utils/src/viability.ts)
Code
- Adding WOZ data integration for improved scoring accuracy
- Building the
ruimtevindenandbouwcapaciteitcheckapps - Improving mobile responsiveness
Research
- Validating viability scores against real conversion projects
- Extending methodology to include nitrogen proximity signals
- Adding doorstroming (housing flow) analysis
See CONTRIBUTING.md for guidelines, code standards, and the PR process.
Each tool has a TOOL.md file with:
- Full data source documentation
- Scoring model rationale and limitations
- Known data quality gaps
- How to report errors
The viability scoring model (packages/bag-utils) is intentionally exported as a standalone, unit-tested module so it can be critiqued, forked, and improved independently.
GNU — see LICENSE
Data used: BAG (CC0), CBS (CC0), TenderNed (open), PDOK (open).
Built by North Solution — Deventer, Netherlands