![The Map Chip](https://cdn.slatesource.com/d/7/c/d7c7671b-b146-42d8-96cf-df53325ef557.webp)

# The Map Chip

- [Made in Slatesource](https://slatesource.com/@steph/the-map-chip)
- By [Steph](https://slatesource.com/@steph)
- Created on Jul 19, 2026

LOADING COORDINATES...

## The MapMap ChipChip

That is a realreal mapmap, drawndrawn from threethree lineslines of texttext. The walkingwalking lineline betweenbetween the pinspins is not a straightstraight approximationapproximation, it is a routedrouted pathpath fetchedfetched from a routingrouting serviceservice and cachedcached. EverythingEverything the chipchip knowsknows camecame from sixsix numbersnumbers and twotwo wordswords in a filefile.

## What You ActuallyActually WriteWrite

OneOne locationlocation perper lineline. LatitudeLatitude, longitudelongitude, then an optionaloptional labellabel, then an optionaloptional connectionconnection typetype in squaresquare bracketsbrackets. The threethree lineslines that producedproduced the mapmap aboveabove are these, verbatimverbatim.

plaintext

1

2

3

4

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

## CoordinatesCoordinates Only. No GeocodingGeocoding.

You cannotcannot typetype an addressaddress. ThereThere is no lookuplookup, no NominatimNominatim, no autocompleteautocomplete that turnsturns "AppenzellAppenzell" into a pointpoint. GrepGrep the backendbackend and the frontendfrontend for geocodinggeocoding and you getget nothingnothing, becausebecause nothingnothing is therethere. LatitudeLatitude is parsedparsed betweenbetween minusminus ninetyninety and ninetyninety, longitudelongitude betweenbetween minusminus oneone hundredhundred eightyeighty and oneone hundredhundred eightyeighty, and that is the wholewhole inputinput contractcontract. It is a harderharder firstfirst fivefive minutesminutes than an addressaddress boxbox. It alsoalso meansmeans the chipchip has no dependencydependency that can rate-limitrate-limit it, billbill for it, or quietlyquietly movemove a pinpin twotwo streetsstreets over.

## ConnectionsConnections BelongBelong to the LocationLocation BeforeBefore Them

The bracketbracket at the endend of a lineline describesdescribes how to getget from that locationlocation to the nextnext oneone, not how you arrivedarrived at it. The lastlast line'sline's bracketbracket is thereforetherefore readread and then ignoredignored, whichwhich is a smallsmall wartwart nobodynobody has botheredbothered to warnwarn about in the editoreditor. FourFour valuesvalues existexist: NONENONE, FOOTFOOT, PUBLICPUBLIC\_TRANSPORTTRANSPORT and PLANEPLANE. AnythingAnything elseelse logslogs a warningwarning and fallsfalls backback to NONENONE ratherrather than breakingbreaking the chipchip.

## Where the LinesLines ComeCome From

FOOTFOOT and PUBLICPUBLIC\_TRANSPORTTRANSPORT askask OpenRouteServiceOpenRouteService for a realreal routeroute on the serverserver sideside, cachedcached on coordinatescoordinates roundedrounded to fourfour decimaldecimal placesplaces, with a sixtysixty secondsecond circuitcircuit breakerbreaker so a badbad upstreamupstream dayday cannotcannot taketake the pagepage with it. If the routeroute nevernever arrivesarrives, the segmentsegment degradesdegrades to a dasheddashed straightstraight lineline ratherrather than disappearingdisappearing. PUBLICPUBLIC\_TRANSPORTTRANSPORT is routedrouted with the drivingdriving profileprofile, becausebecause therethere is no transittransit routingrouting behindbehind it. The iconicon in the editoreditor sayssays busbus. The lineline underneathunderneath is a carcar. WorthWorth knowingknowing beforebefore you planplan a traintrain journeyjourney with it.

LOADING COORDINATES...

## The PlanePlane CaseCase

NothingNothing routesroutes a flightflight, so PLANEPLANE drawsdraws a quadraticquadratic curvecurve bowedbowed off the straightstraight chordchord and rendersrenders it dasheddashed, whichwhich readsreads as an airair corridorcorridor withoutwithout pretendingpretending to be a flightflight pathpath. The satellitesatellite stylestyle aboveabove swapsswaps the tilestiles for EsriEsri imageryimagery, shiftsshifts the lineline colourcolour to a palepale blueblue so it survivessurvives on darkdark terrainterrain, and driftsdrifts a fewfew CSSCSS cloudsclouds over the toptop. That lastlast partpart is purepure decorationdecoration and entirelyentirely indefensibleindefensible on engineeringengineering groundsgrounds.

Max locations per chip

10

Connection types

4

Routing profiles actually wired

2

Route cache key precision

4 decimal places

Geocoders

none

## OneOne BadBad LineLine KillsKills the WholeWhole ChipChip

This is the sharpestsharpest edgeedge on the chipchip and it is worthworth statingstating plainlyplainly. MostMost buildersbuilders are forgivingforgiving: a StatsStats lineline withoutwithout a pipepipe is skippedskipped and the restrest of the chipchip rendersrenders, a JourneyJourney entryentry with a scorescore of ninenine is droppeddropped and its neighboursneighbours survivesurvive. The MapMap builderbuilder is not writtenwritten that wayway. A lineline that failsfails to splitsplit into a latitudelatitude and a longitudelongitude, or whosewhose numbersnumbers do not parseparse, returnsreturns immediatelyimmediately from insideinside the looploop. EveryEvery locationlocation alreadyalready accumulatedaccumulated is discardeddiscarded with it. NineNine goodgood pinspins and oneone typotypo produceproduce no mapmap at all, and the warningwarning pointspoints at the firstfirst lineline of the blockblock ratherrather than the lineline that brokebroke 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 LabelLabel Is StoredStored and NeverNever DrawnDrawn

LabelsLabels are parsedparsed, length-checkedlength-checked at 255255 characterscharacters, writtenwritten to a columncolumn, and sentsent to the browserbrowser in the payloadpayload. The markersmarkers on the mapmap are twelvetwelve pixelpixel dotsdots with no popuppopup, no texttext layerlayer and no titletitle attributeattribute. So "St. GallenGallen" and "TeufenTeufen" aboveabove existexist in the databasedatabase and appearappear nowherenowhere on your screenscreen. The only placeplace a labellabel surfacessurfaces todaytoday is the editor'seditor's ownown listlist of locationslocations. It is a fieldfield waitingwaiting for a renderingrendering decisiondecision that has not been takentaken.

## TwoTwo OtherOther ThingsThings That Are Not What They LookLook LikeLike

ZoomZoom is a realreal fieldfield on the payloadpayload, adjustableadjustable in the editoreditor, and completelycompletely unreachableunreachable from a texttext filefile: the builderbuilder readsreads exactlyexactly oneone attributeattribute, stylestyle, and nothingnothing elseelse. LeaveLeave zoomzoom unsetunset and the mapmap fitsfits its ownown boundsbounds, whichwhich is usuallyusually what you wantedwanted anywayanyway. And stylestyle itselfitself has no enumenum behindbehind it. The backendbackend acceptsaccepts any stringstring up to twentytwenty characterscharacters and storesstores it; the frontendfrontend recognisesrecognises standardstandard, brightbright, darkdark and satellitesatellite and quietlyquietly rendersrenders anythinganything elseelse as standardstandard.

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

02.08.2025 - 23.03.2026

## SevenSeven MonthsMonths From ProofProof of ConceptConcept to LiveLive

The gapgap aboveabove is not slowslow progressprogress on a mapmap. It is what happenshappens when a chipchip needsneeds a routingrouting integrationintegration, a cachecache, a permissionpermission checkcheck on a newnew endpointendpoint, and a decisiondecision about tiletile providersproviders, and it sitssits in a branchbranch betweenbetween eveningsevenings untiluntil eacheach of those is answeredanswered. The JuneJune securitysecurity fixfix is partpart of the samesame storystory: the routeroute endpointendpoint was returningreturning coordinatescoordinates for chipschips on slatesslates the callercaller couldcould not viewview. It was foundfound, it was fixedfixed, and it is writtenwritten downdown herehere ratherrather than leftleft out.

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

[Every chip type, side by side](https://slatesource.com/chips?utm_source=slatesource)