How it works
Drive. Map. Mint.
Four steps turn a radio in your car into a hexagon on a public map. Everything after that is bookkeeping, and this page is the bookkeeping, including the parts that are less flattering than a marketing page would admit.
- Get a MeshCore device Any LoRa board running MeshCore firmware in a companion role, on the same radio preset as the network you want to map. We do not sell hardware and we do not recommend a specific shop. Buy the board your local mesh already uses, because a measurement is only comparable to others taken on the same frequency, bandwidth and spreading factor.
- Install the app and pair over Bluetooth The MapMinter app connects to the device over Bluetooth LE and subscribes to its packet push. From then on, every packet the radio receives is handed to the phone as it arrives. Get started has the download and the pairing steps.
- Drive or walk The app keeps collecting with the screen off, so a normal commute is a mapping run. Each received packet is stored with the signal measurement the radio reported and the phone's position at that instant, then uploaded in batches.
- Cells light up The server folds measurements into H3 hexagonal cells and the map redraws. A cell's colour is the strongest signal ever heard inside it: cold for weak, hot for strong, on the scale printed in the map's legend.
Measured, not predicted
There is no propagation model anywhere in MapMinter. Nothing is interpolated between two measured cells and nothing is extrapolated over a hill. This is the single most important thing to understand about the map:
An empty area means nobody has been there
It does not mean there is no coverage. The Unexplored layer exists for exactly this reason: it outlines cells around the middle of your view that have no measurement at all, so "not measured" is visibly different from "measured and weak".
Last hop only
A MeshCore packet can travel several hops. The RSSI and SNR your radio reports describe only the final hop, the transmission from whichever node last repeated the packet to you. They are not a measurement of the original sender, however far away it was.
MapMinter therefore attributes a measurement to the transmitter of that last hop, and the map's transmitter filter lets you look at one transmitter at a time. Filtering by a repeater shows you where that repeater is audible. It does not show you where the person who wrote the message was standing.
Freshness
Coverage is not a permanent fact. A repeater gets moved, an antenna corrodes, a tree grows, a building goes up. Every cell therefore carries the time it was last heard, and the map shows it when you hover a cell.
Old measurements are not deleted. They are history, and deleting them would quietly rewrite that history, but they should be read as history. Driving a route again is what makes a cell current, and freshness is the thing the reward design deliberately pays for: see $MESHR.
Per-transmitter view
The picker in the map header narrows the field to one transmitter. Two kinds of entry live in that list and the map keeps them apart on purpose:
- A node, meaning one identified radio. Its coverage is what could be attributed to it specifically.
- A path hash, the short identifier a packet carries. Hashes collide: several nodes can transmit under the same one, so a hash view is the mixture of all of them, plus everything that could not be attributed to any node at all.
When a per-node view is hiding samples that only the hash view contains, the map says so in a badge rather than showing you a thinner map without explanation.
Reading the map honestly
- A cell is as precise as its size. At low zoom one hexagon can be kilometres across; the strongest signal in it may have been heard at one corner.
- Strongest-heard is an optimistic statistic by design. It answers "was contact possible here at all", which is the question that matters for a mesh, not "what will I get on average".
- Node positions come from the nodes' own adverts. A node that advertises a wrong position is drawn in the wrong place, and node names are unauthenticated broadcast text, which is why the map always shows the identifier beside the name.