The Map Chip

By Steph15
Scroll to open
LOADING COORDINATES...

The Map Chip

That is a real map, drawn from three lines of text. The walking line between the pins is not a straight approximation, it is a routed path fetched from a routing service and cached. Everything the chip knows came from six numbers and two words in a file.

What You Actually Write

One location per line. Latitude, longitude, then an optional label, then an optional connection type in square brackets. The three lines that produced the map above are these, verbatim.

plaintext
47.424500, 9.376700, St. Gallen [FOOT]
47.389700, 9.387800, Teufen [FOOT]
47.331900, 9.409300, Appenzell

Coordinates Only. No Geocoding.

You cannot type an address. There is no lookup, no Nominatim, no autocomplete that turns "Appenzell" into a point. Grep the backend and the frontend for geocoding and you get nothing, because nothing is there. Latitude is parsed between minus ninety and ninety, longitude between minus one hundred eighty and one hundred eighty, and that is the whole input contract. It is a harder first five minutes than an address box. It also means the chip has no dependency that can rate-limit it, bill for it, or quietly move a pin two streets over.

Connections Belong to the Location Before Them

The bracket at the end of a line describes how to get from that location to the next one, not how you arrived at it. The last line's bracket is therefore read and then ignored, which is a small wart nobody has bothered to warn about in the editor. Four values exist: NONE, FOOT, PUBLIC_TRANSPORT and PLANE. Anything else logs a warning and falls back to NONE rather than breaking the chip.

Where the Lines Come From

FOOT and PUBLIC_TRANSPORT ask OpenRouteService for a real route on the server side, cached on coordinates rounded to four decimal places, with a sixty second circuit breaker so a bad upstream day cannot take the page with it. If the route never arrives, the segment degrades to a dashed straight line rather than disappearing. PUBLIC_TRANSPORT is routed with the driving profile, because there is no transit routing behind it. The icon in the editor says bus. The line underneath is a car. Worth knowing before you plan a train journey with it.

LOADING COORDINATES...

The Plane Case

Nothing routes a flight, so PLANE draws a quadratic curve bowed off the straight chord and renders it dashed, which reads as an air corridor without pretending to be a flight path. The satellite style above swaps the tiles for Esri imagery, shifts the line colour to a pale blue so it survives on dark terrain, and drifts a few CSS clouds over the top. That last part is pure decoration and entirely indefensible on engineering grounds.

Max locations per chip

10

Connection types

4

Routing profiles actually wired

2

Route cache key precision

4 decimal places

Geocoders

none

One Bad Line Kills the Whole Chip

This is the sharpest edge on the chip and it is worth stating plainly. Most builders are forgiving: a Stats line without a pipe is skipped and the rest of the chip renders, a Journey entry with a score of nine is dropped and its neighbours survive. The Map builder is not written that way. A line that fails to split into a latitude and a longitude, or whose numbers do not parse, returns immediately from inside the loop. Every location already accumulated is discarded with it. Nine good pins and one typo produce no map at all, and the warning points at the first line of the block rather than the line that broke it.

The fix is small: skip the bad line instead of abandoning the chip. It has not been made because silently dropping a pin from a route is arguably worse than dropping the route, and nobody has decided which failure is the honest one.

The Label Is Stored and Never Drawn

Labels are parsed, length-checked at 255 characters, written to a column, and sent to the browser in the payload. The markers on the map are twelve pixel dots with no popup, no text layer and no title attribute. So "St. Gallen" and "Teufen" above exist in the database and appear nowhere on your screen. The only place a label surfaces today is the editor's own list of locations. It is a field waiting for a rendering decision that has not been taken.

Two Other Things That Are Not What They Look Like

Zoom is a real field on the payload, adjustable in the editor, and completely unreachable from a text file: the builder reads exactly one attribute, style, and nothing else. Leave zoom unset and the map fits its own bounds, which is usually what you wanted anyway. And style itself has no enum behind it. The backend accepts any string up to twenty characters and stores it; the frontend recognises standard, bright, dark and satellite and quietly renders anything else as standard.

How It Got Here02.08.2025 – 21.06.2026
02.08.2025Proof of concept, committed alongside the chip creator
02.08.2025
11.05.2026Connection types land, with multi-location routes
11.05.2026
23.03.2026Shipped
23.03.2026
14.05.2026Map styles
14.05.2026
15.05.2026Hiking route fixes
15.05.2026
21.06.2026Security fix: the route endpoint leaked coordinates from private slates
21.06.2026

Seven Months From Proof of Concept to Live

The gap above is not slow progress on a map. It is what happens when a chip needs a routing integration, a cache, a permission check on a new endpoint, and a decision about tile providers, and it sits in a branch between evenings until each of those is answered. The June security fix is part of the same story: the route endpoint was returning coordinates for chips on slates the caller could not view. It was found, it was fixed, and it is written down here rather than left out.

"

Six numbers and two words, and the page knows where you walked.

"