Documentation Index
Fetch the complete documentation index at: https://mintlify.com/samgutentag/bcycle-map/llms.txt
Use this file to discover all available pages before exploring further.
systems.json is the single source of truth for every BCycle network that BCycle Map polls, stores, and displays. Every pipeline component — the poller Worker, the compaction script, the compute rollups, and the frontend’s NetworkPicker — reads the list through exactly one function, getSystems() in src/shared/systems.ts. Changing systems.json and redeploying the poller is all it takes to add or remove a network from the entire stack.
Schema
Each entry insystems.json maps to the following TypeScript type defined in src/shared/systems.ts:
getSystems() returns only entries where enabled !== false, so the poller and all downstream compute scripts automatically skip disabled systems. getSystem(id) looks up any entry — including disabled ones — so historical data for a paused system remains resolvable.
Current systems.json
Adding a system
Add a new object to the array.
enabled is optional — omitting it (or setting true) makes the system active immediately on the next deploy.{
"system_id": "bcycle_madison",
"name": "Madison BCycle",
"gbfs_url": "https://gbfs.bcycle.com/bcycle_madison/gbfs.json",
"version": "1.1"
}
system_id must match the slug in the GBFS URL exactly. See Finding system IDs below.The new entry is bundled into the Worker at deploy time. Until you redeploy, the running poller does not know about the new system.
The corridors workflow writes
gbfs/systems-index.json — the file the read-API serves at /api/systems. The frontend uses it to populate the NetworkPicker dropdown.The NetworkPicker dropdown only renders when two or more systems are
active. With a single active system the component hides itself automatically,
so the picker appearing for the first time is a sign corridors ran successfully.
The other compute workflows — leaderboards, popularity, routes, travel-times, typicals — each read from
getSystems() at runtime and pick up the new system automatically on their next scheduled execution. Trigger any of them manually from the Actions tab if you want data immediately rather than waiting for the schedule.Enabling or disabling a system
Disabling a system stops the poller and all compute scripts from touching it, dropping its Cloudflare KV and R2 operations to zero. It does not delete any data. History frozen in R2 and the latest snapshot in KV are preserved intact;getSystem(id) still resolves the entry so historical API calls keep working. Re-enabling is fully lossless.
To disable
-
Set
"enabled": falseon the entry insystems.json: -
Redeploy the poller so it stops polling that system:
-
Run corridors to rewrite
systems-index.json, which removes the system from the picker dropdown:
To re-enable
Remove"enabled": false (or set it to true), then repeat steps 2 and 3 above. The poller resumes on the next cron tick and historical data is immediately accessible again.
KV cap and the free tier
Finding system IDs
Browse the full BCycle GBFS index at https://gbfs.bcycle.com/. Each entry’s URL contains the system slug:system_id field in systems.json must match this slug exactly, including capitalisation (all lowercase for BCycle systems). A mismatch causes the poller to fetch the correct URL but store data under the wrong key, breaking the read API’s lookups.