Contribute
Something is missing. Where does it go?
Almost none of it belongs to us, and that is on purpose. Only a missing chain has no upstream.
| What is missing | Where it goes | Why there |
|---|---|---|
| A branch of a chain we already know | OpenStreetMap | Fixes it for everyone and returns through the normal build |
| A shop that has closed | OpenStreetMap | The only route that fixes closures at the source. We cannot see them |
| A chain or brand missing entirely | To us | There is no upstream. This is the catalogue, and it is ours |
| One local shop round the corner | Nowhere | Pin it in the app. That works completely and needs to go nowhere |
A shop that is missing or closed
Add it to OpenStreetMap, with the editor on the site or with StreetComplete on your phone. What helps: the brand name exactly as the chain writes it, and the correct shop type. We fetch stores through Wikidata brand identifiers, so a correct brand tag arrives.
In the meantime: pin it yourself
Open your card at the till while no known store of that chain is nearby, and the app asks whether you are standing there. One tap, and arrival detection works with it immediately.
- The coordinates are the record; an address is decoration. Everything works without one.
- Pins live in their own table, which the sync never touches.
- They outrank bundled stores when proximity alerts are armed.
- If the shop later arrives through OpenStreetMap, your pin is superseded rather than deleted, and you are told it landed.
A chain that is missing
The catalogue holds 49 researched Dutch chains, 39 of them with a card. If one is missing, or a colour or name is wrong, that is a real bug; six programmes were renamed during 2025 and 2026.
Send this, or as much of it as you know:
{
"key": "fitfun",
"name": "Fit&Fun Ledenpas",
"chain": "Fit&Fun",
"aliases": ["Fit en Fun", "FitFun"],
"colorHex": "#1D4E8F",
"icon": "fitness_center",
"preferredFormat": "CODE_128",
"kind": "MEMBERSHIP",
"confidence": { "color": "guess", "format": "guess" }
}
key— short, lowercase, unique. We will invent one if you do not.nameis what the programme is called,chainis what the shop is called. Often not the same thing.colorHex— the brand colour, if you have a source. Without one, leave it out rather than guess.icon— a name from Material Symbols. The build rejects a name that does not exist.preferredFormat— only if you actually know. For 36 of the 49 chains this is an assumption, which is why it counts only as a hint for hand-typed numbers.kind—LOYALTY,VOUCHERorMEMBERSHIP. A paid subscription is not a points card.confidence— be honest here.guessis a fine answer and far more useful than a wrongverified.
The shape of a store record
Records are positional arrays: across twelve thousand records, key names cost more than the data.
["ah", 52.38312, 4.88594, "Haarlemmerdijk 108", "1013JG", "Amsterdam"]
chain key, latitude, longitude, street, postcode, city
Coordinates carry five decimals, about a metre. Street, postcode and city may be empty; the coordinates never are.
Where to send it
An issue on the repository, preferably. It costs you no email address, the JSON pastes as a code block, and you can watch what happens to it.
Rather send mail? hallo@square-management.nl. A dedicated address, never a personal one. An issue is still better, because you can follow it, but not everyone wants an account on a code site to pass on a shop address.
What happens when you send something
- From inside the app, a suggestion is attached to a mail that you send. You see what is in it and can cancel. The app sends nothing itself and never learns your address.
- One item per message, never in bulk. A bulk export of every shop you pinned is a map of where you shop and when.
- A suggestion for the store database may be published under the ODbL. The app says so at the moment of sending.
- Hand triage is fine up to roughly five to ten submissions a week.
Are you a chain?
If you would rather not see your name, colour or logo here or in the app, we take it out. One message is enough. If you would rather your real logo were shown, that needs written permission, recorded per entry with its source and licence.