Hide a message in the shape of your run. Each stretch of street between turns is a symbol, read by its length in blocks. Run the route, post it, and a friend can read the message back from a screenshot of the map.
Green words cost 11 bits each. Amber words aren't in the word list, so they're spelled out at 6 bits per letter.
Makes a fake activity screenshot from the message on the Encode tab, with GPS wobble and uneven blocks, then reads it back.
The route is a square wave laid on the street grid. You run along a street, turn one block up, run along the next street, turn one block back down, and so on. Every straight stretch along the message direction is one symbol. Only its length matters: 1 or 2 blocks in Robust mode, 1 to 4 in Dense mode. The short legs between them carry nothing, they just switch streets.
| Part | Size | What it does |
|---|---|---|
| Run-in | 3 blocks | A cross-street leg before the start. Ignored by the decoder, so a privacy zone or late start only clips this. |
| Start marker | 6 blocks | Longer than any data stretch. Tells the decoder where the message starts and how big one block is in the picture. |
| Density flag | 1 or 2 blocks | 1 = Robust, 2 = Dense. |
| Mode | 2 bits | 00 = word mode, version 1. Other values are reserved for character mode and future word lists; older decoders will say “made with a newer version”. |
| Checksum | 8 bits | CRC-8 over the mode and the words. A misread stretch makes it fail instead of showing the wrong message. |
| Words | 11 bits each | One of 2,046 words. Slot 2047 means “spell the next word”: 4 bits of length, then 6 bits per letter. Slot 2046 is reserved for an end-of-message code. |
| End marker | 6 blocks | Closes the message. Reading backwards also works, since the checksum shows which way is right. |