hi.

It's a bit strange, standing here.

I don't consider myself a developer.

Matze Schmidbauer

mtc.berlin

I GET INSPIRED obsessed

Open data

Music

Cooking

Keeping plants alive

My dog Iggy

My dog Iggy

Politics

Politics

My job

Climate change

Being my dad's IT hotline

…and more.

New interest?
Hours of research.

Notes. Wikis.
Knowledge bases. For everything.

And sometimes,
obsession becomes a project.

2006

Kontempora

an online print gallery for young photographers. Before Instagram existed.

2019

D'IGGY

a high-efficiency tick repellent. Named after the dog.

2025

Stimmungsschau

party sentiment analysis of German TV news.

2026

mmcp

a multi-tenant memory engine for AI agents. Total tenants: one.

I'm really good at having ideas.

but for now: Berlin's open data.

We all love data.

Berlin publishes all of it.

So this should be easy.

Where do you find…

1fresh-air corridors?

2election results?

3tram stops?

daten.berlin.de

daten.berlin.de

Klick 1

Berlin's official open data portal. This should be easy.

"Frischluftkorridor" (0)

daten.berlin.de"Frischluftkorridor" (0)

Klick 2

Zero results. OK. Wrong word, maybe?

"Kaltluft" (0)

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)

Klick 3

The technical term. Also zero.

"Klima" (37)

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)"Klima" (37)

Klick 4

37 results! …all of them planning documents.

"Umweltatlas Klimaanalyse" (6)

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)"Klima" (37)"Umweltatlas Klimaanalyse" (6)

Klick 5

Six results! You just had to know the magic words.

Klimaanalysekarten [WFS]

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)"Klima" (37)"Umweltatlas Klimaanalyse" (6)Klimaanalysekarten [WFS]

Klick 6

The dataset page. The actual link hides further down.

WFS 2022

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)"Klima" (37)"Umweltatlas Klimaanalyse" (6)Klimaanalysekarten [WFS]WFS 2022

Klick 7

Not the data. XML that DESCRIBES the data.

GetFeature

daten.berlin.de"Frischluftkorridor" (0)"Kaltluft" (0)"Klima" (37)"Umweltatlas Klimaanalyse" (6)Klimaanalysekarten [WFS]WFS 2022GetFeature

Klick 8

The data! 16,217 polygons of fresh air. In GML.

Geoportal Wartungsseite, 24.08.
the geoportal, last week
Geoportal Berlin, wieder online
this week

No blame. But this is
what fragile looks like.

"Wahlergebnisse Bundestagswahl" (0)

"Wahlergebnisse Bundestagswahl" (0)

Klick 1

The portal again: zero results for election results.

wahlen-berlin.de

"Wahlergebnisse Bundestagswahl" (0)wahlen-berlin.de

Klick 2

The election office. It sends you elsewhere.

statistik…/bundestagswahlen

"Wahlergebnisse Bundestagswahl" (0)wahlen-berlin.destatistik…/bundestagswahlen

Klick 3

Excel files. For humans. Behind hash-URLs. Plus a cookie banner.

bundeswahlleiterin.de /dam/jcr/ e79a7bd3-0607-4e87-9752-8e601e299e00 /btw25_wbz.zip

"Wahlergebnisse Bundestagswahl" (0)wahlen-berlin.destatistik…/bundestagswahlenbundeswahlleiterin.de

Klick 4

Berlin does not even host its own election data.

"Tram" (1)

"Tram" (1)

Klick 1

One result: a map IMAGE. No data.

"Haltestellen" (VBB)

"Tram" (1)"Haltestellen" (VBB)

Klick 2

A ZIP from 2021. From VBB. Not Berlin's. Dead end.

The city has nothing.
The community does.

openstreetmap.org

openstreetmap.org

Klick 3

Every tram stop. Mapped by volunteers.

overpass-turbo.eu

openstreetmap.orgoverpass-turbo.eu

Klick 4

You just need to learn a query language. Obviously.

API → JSON

openstreetmap.orgoverpass-turbo.euAPI → JSON

Klick 5

And there they are. All 960 of them.

Remember the quiz?
Now you know why nobody could answer.

You know me by now.
I got obsessed.

I needed to collect, to clean, to aggregate, to map. And to make it fast.

I bought another domain for a side project I never knew I'd start:

NAVIGATOR.BERLIN

One address. Every layer.

Noise.

Noise.

Felt heat.

Felt heat.

Green supply.

Green supply.

Land values.

Land values.

Housing quality.

Housing quality.

Tenant protection.

Tenant protection.

Cold-air corridors.

Cold-air corridors.

Density.

Density.

S-Bahn.

S-Bahn.

Tram.

Tram.

Bike network.

Bike network.

Every bus stop.

Every bus stop.

Stolpersteine.

Stolpersteine.

Drinking fountains.

Drinking fountains.

Every grocery store.

Every grocery store.

Every daycare.

Every daycare.

Monuments.

Monuments.

Cool places.

Cool places.

Polling districts.

Polling districts.

The Kiez-Score.

The Kiez-Score.

…and 45 more.

Nobody wants to browse 65 layers.
So I aggregated.

The Kiez-Score

Quiet & Air
Green & Heat
Mobility
Supply
Housing protection
55/ 100

How? Step one:

Every raw value becomes 0 to 100.

noise: low → 100 · kita next door → 100 · kita 1,000 m away → 0

Step two: layers → one dimension.

U-Bahn 113 m → 89 × 0.35 S-Bahn 586 m → 41 × 0.25 Tram 338 m → 66 × 0.20 Bus 41 m → 96 × 0.10 Bike network yes → 100 × 0.10

Step three: five dimensions, equal weight.

Quiet & Air 29 2 layers
Green & Heat 10 6 layers
Mobility 74 5 layers
Supply 63 9 layers
Protection 100 1 layer

(29 + 10 + 74 + 63 + 100) / 5

Every layer documented.

Every layer documented.

The score sees the city

Noise first. The score joins in.

navigator.berlin/explore?layers=laerm-2023 ↗

Noise · laerm-2023

navigator.berlin/explore?layers=laerm-2023

Two datasets.

+ Kiez-Score · Quiet & Air

navigator.berlin/explore?layers=laerm-2023,kiez-score-ruhe-luft

Legend swap · score leads

navigator.berlin/explore?layers=laerm-2023,kiez-score-ruhe-luft&lead=kiez-score-ruhe-luft

Two datasets, one truth.

Where the city protects housing

Housing quality first. Protection joins in.

navigator.berlin/explore?layers=wohnlagen-2024 ↗

Housing quality · wohnlagen-2024

navigator.berlin/explore?layers=wohnlagen-2024

+ Milieuschutz · social & urban

navigator.berlin/explore?layers=wohnlagen-2024,milieuschutz-erhaltungsmiete,milieuschutz-staedtebau

+ Kiez-Score · Protection

navigator.berlin/explore?layers=wohnlagen-2024,milieuschutz-erhaltungsmiete,milieuschutz-staedtebau,kiez-score-wohnschutz

The map renters actually need.

Mobility & supply

Groceries first. Transit joins in.

navigator.berlin/explore?layers=nahversorgung-lebensmittel ↗

Groceries · nahversorgung

navigator.berlin/explore?layers=nahversorgung-lebensmittel

+ Bus stops

navigator.berlin/explore?layers=nahversorgung-lebensmittel,bus-haltestellen

+ Tram network

navigator.berlin/explore?layers=nahversorgung-lebensmittel,bus-haltestellen,tram-netz

There is a Späti around the corner.

Talking about cold beer
from the Späti…

Remember this summer's
40°C dog days?

Berlin's official heat portal.

Berlin's official heat portal.

“noch recht lückenhaft”

taz on the official cool-places map, June 2026

“Wollt Ihr uns verarschen?”

Berliner Kurier, testing the same map, August 2025

I thought: I can do better.

hitze.navigator.berlin

hitze.navigator.berlin

In August, the taz went counting around Gendarmenmarkt.

2

the official map

“Zuflucht vor dem Hitzeschlag”

taz, August 2026 · via hitze.navigator.berlin

*.navigator.berlin
hitze was only the first.

Remember?
I don't consider myself a developer.

I didn't code this.

I coded specced it.

So I just typed
“build me a city atlas”?

Not quite.

Some call this “vibe coding”.

And my agent? Rubs it in:

claude

✦ Vibing…

(esc to interrupt)

There are no vibes
in a spec.

Agents at work? Hendrik showed you.
My part: the spec.

Idea

the method has a name

BMAD

Breakthrough Method for Agile AI-Driven Development

open source · agents with roles · artifacts all the way down

my twist: every change reviewed by a different model

Slow. Expensive.
Worth it.
tokens and hours in, better software out

Right. This is a Svelte meetup.
Some tech, then.

The stack

SvelteKit · MapLibre · Tailwind · Drizzle · PMTiles

Data · 1/2

65 layers.
Zero runtime calls to Berlin.

BERLIN · 55 SOURCESBUILD TIME · ONCESHIPPED · STATIC25FIS-Broker WFS20OpenStreetMap5ODIS Berlinfetchreproject25833 → 4326simplifymapshaperhash8-char sha65 layers72 MB GeoJSONMANIFEST.jsonsource · date · licensenever called at runtimethe browser loads files

Data · 2/2

One layer was too big.

64 LAYERS · GEOJSON1 LAYER · PMTILESraw WFS polygonssimplified · 10 to 20 %mapshaper, visvalingamkeep-shapes, no sliversone file per layer, loaded whole57,800polygons> 20 MBas GeoJSONtiles z9 to 13only the viewport travels

What did Svelte actually buy me?

Why Svelte · 1/3

Nine sliders.
One setPaintProperty.

nine sliders$derivedone paint expressionno virtual DOM in between542 recolored areas

Why Svelte · 2/3

One typed server function.
Humans and machines call it.

humanthe search boxagentthe WebMCP toolone remote functiontyped · validatedsame answersource + licenceone schema, end to end

Why Svelte · 3/3

155 Kiez profiles.
Rendered at build time.

BUILD TIME · ONCERUNTIME · EVERY VISITsvelte-kitbuild155 profilessitemap.xmlllms.txtGeoJSON layersyourbrowserdoes thelookupstatic files are hard to break

And these slides?
Svelte too.
built with Animotion · by Joy of Code

One more bet:
the next users won't be human.

navigator speaks WebMCP.
11 tools, right in your browser.
An emerging standard. Already live.

One more thing.

What if you could tell the map
what you want?

how the Kiez-Finder works

You say how you want to live.

Quiet? Green? Shops close by? A tram? Neighbours who vote like you?

Kiez-Finder

Let's find out. Live.

navigator.berlin/explore?finder=1 ↗

Quiet & air ↑ · Supply ↑

navigator.berlin/explore?finder=1&fw=2,0,0,2,0,0,0,0,0

One more dimension: how people vote.

+ Voting similarity · GRÜNE

navigator.berlin/explore?finder=1&fw=2,0,0,2,0,0,0,0,2&fp=GRÜNE

Flip · CDU

navigator.berlin/explore?finder=1&fw=2,0,0,2,0,0,0,0,2&fp=CDU

Now imagine matching this
with actual listings.
(if there were any flats to list)

“Not so good at running them”?
This one's different.

What's next

Census rents · story 4 becomes a gentrification story

clubs.navigator.berlin · hopefully with the Berlin Clubcommission

kaelte.navigator.berlin · the next sub-portal is already waiting

English version · the i18n plumbing is already in

Thank you.

Svelte Society Berlin · Datawrapper

navigator.berlin