spieli¶
A free, interactive web map for exploring playgrounds based on OpenStreetMap data — configurable for any region.
Origin: This project is a further development of the original Berliner Spielplatzkarte by Alex Seidel.
Architecture¶
┌─────────────────────────────────────────────────────┐
│ Production │
│ │
Browser ──────► | nginx ──────► PostgREST ──────► PostgreSQL/PostGIS │
(your phone | (serves (turns SQL (holds all the │
or laptop) | the app, functions into OSM playground │
| proxies API HTTP endpoints) data) │
| requests) │
└─────────────────────────────────────────────────────┘
Your browser loads the app from nginx. Playground data requests go to /api/, which nginx forwards to PostgREST. PostgREST runs a SQL function in PostgreSQL and returns JSON — no custom server code needed. The database is pre-loaded with OpenStreetMap data by the osm2pgsql importer.
Multiple regional instances can be aggregated into a single Hub map — see Architecture and Federation for details.
Getting started¶
| I want to… | Go to… |
|---|---|
| Deploy spieli for my region | Quick Start |
| Deploy from source | Manual Deploy |
| Connect my backend to an existing Hub | Quick Start → Joining an existing Hub |
Using the map¶
| I want to… | Go to… |
|---|---|
| Learn how to use the map | User Guide |
| Understand the data quality colours | User Guide → Data quality colours |
| Add or improve playground data | User Guide → Adding data |
Operations¶
| I want to… | Go to… |
|---|---|
| Configure environment variables | Configuration |
| Stand up a Hub + multiple data-nodes | Federated Deployment |
| Upgrade to a newer version | Upgrading |
| Automate weekly data refreshes | Scheduled Import |
| Back up or restore the database | Backup and Restore |
| Monitor a running instance | Monitoring |
| Harden for production (HTTPS, passwords) | Security |
| Fix a problem | Troubleshooting |
Contributing¶
| I want to… | Go to… |
|---|---|
| Set up a local dev environment | Local Development |
| Understand the frontend codebase | Frontend Guide |
| Add a new playground device type | Add a Device |
| Add a new sport type | Add a Sport Type |
| Add a new filter option | Frontend Guide → Adding a new filter |
| Understand the OSM import pipeline | Import Pipeline |
| Write or run tests | Testing Guide |
| Translate the app (Weblate) | Translator Instructions |
| Understand the translation workflow | Translation Workflow |
| Cut a release or upgrade dependencies | Maintainer Guide |
Reference¶
| Topic | Go to… |
|---|---|
| System architecture & deployment modes | Architecture |
| PostgREST API endpoints | API Reference |
| Hub federation protocol | Federation |
registry.json schema |
Registry JSON |
| Tech stack (with versions and rationale) | Tech Stack |
| External services used at runtime | External Services |
| OSM and project terminology | Glossary |
| Project overview (AI context) | Project Overview |
| Annotated source tree | Source Tree Analysis |
| Architecture Decision Records | ADR-0001 OpenSpec sharing policy |