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.
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.
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.
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.
"

