- planner dashboard: replace Overpass panels with POI index freshness + serving panels (age, rows/category, import status, API request rate/errors) - alerts: replace overpass-upstream-unhealthy with poi-index-stale (>6 weeks) - architecture.md: POI data flow now the self-hosted index - privacy manifest (DE+EN): Overpass is Journal-surface-backfill-only; Planner POIs served same-origin from /api/pois - self-host-overpass README + roadmap: superseded for POIs by poi-index - poi-extract README: self-hoster story (optional pipeline, regional extract, graceful empty index) - map-core tsconfig: exclude *.sync.test.ts from tsc to keep it zero-dep Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| specs | ||
| .openspec.yaml | ||
| design.md | ||
| proposal.md | ||
| README.md | ||
| tasks.md | ||
self-host-overpass (parked — superseded for POIs)
Full OpenSpec artifact set (proposal.md, design.md, specs/, tasks.md)
for hosting our own Overpass API. Moved here from openspec/changes/ so it
does not clutter the active change list; revive by moving the directory back
under openspec/changes/ when ready to implement.
Status
Superseded for the Planner's POI overlays by the
poi-index change (shipped), which
removes Overpass from the POI path entirely: instead of running the Overpass
software, a monthly osmium extract feeds a self-hosted PostGIS planner.pois
index served at /api/pois. That is lighter than this plan (no Overpass
engine, no diff replication, no RAM ceiling) and covers every current POI need
— all queries were simple tag-in-bbox lookups that never used Overpass QL.
The former interim proxy (/api/overpass → overpass.private.coffee) has been
removed.
Still relevant if we ever need genuine Overpass QL (arbitrary ad-hoc
queries, recursion, around:, set operations) that a precomputed category
index can't answer — that's the remaining reason to revive this. The Journal's
surface-breakdown backfill still queries public Overpass instances for way
geometry; owning that upstream is the other revive trigger.
When to revive
Revisit once any of these is true:
- private.coffee rate-limits our traffic or changes policy
- Our query volume makes continued use of a free public instance feel like abuse (rule of thumb: >1 req/s sustained)
- We want POI coverage outside regions private.coffee happens to import
- Privacy posture requires full control of the upstream
Key decisions already made
- Topology: Overpass runs on the maintainer's second Hetzner box (FSN1, dedicated, i7-2600, 32 GB, 2×3 TB HDD, 1.8 TB free). Both hosts share Hetzner's internal backbone with ~1 ms RTT.
- Access control: host-level firewall via nftables
DOCKER-USERchain (Docker bypassesINPUTwhen publishing ports, which is the classic gotcha). Only the Planner host's egress IP is allowed on the Overpass port. Planner host IP lives in/etc/overpass/planner-ip.envon the Overpass box, not in the repo. Tailscale / WireGuard / vSwitch kept as future hardening options. - Capacity ceiling on current hardware: DACH extract fits comfortably in the 23 GB of RAM available on the Overpass box. Europe+ would need different hardware (AX52 ≈ €54/mo for a dedicated 64 GB NVMe box that handles planet at low user counts; see design.md).
- Switch path: no client changes needed to cut over — the Planner
proxy reads
OVERPASS_URLS(comma-separated list with round-robin fallback) or the single-entry aliasOVERPASS_URL, defaulting tolz4.overpass-api.dethenoverpass-api.de. Flipping the env var points at our own instance.
What's in the folder
proposal.md— why / what / impactdesign.md— topology, firewall pattern, capacity analysis, risksspecs/— delta specs (would land againstoverpass-hosting,osm-poi-overlays,infrastructure,rate-limiting)tasks.md— 10 groups of implementation tasks.openspec.yaml— OpenSpec scaffolding; keep for when it comes back