- Status: Accepted
- Date: 2026-05-08
- Deciders: Tomer
The MVP needs two more external services beyond the isochrone engine: a way to fetch points of interest inside the polygon, and a map basemap. Both should be swappable via interfaces (PoiProvider, TileProvider) so we can substitute providers without touching UI components, and so the abstraction discipline is consistent across the app.
The original plan listed Overpass as the POI source. After verification (May 2026), the public Overpass instance (overpass-api.de) is unreliable: sustained timeouts since at least April 2026 due to scraper abuse, with public OSM-community discussion about its viability. Mirrors (Private.coffee, kumi.systems) remain healthy but are community-funded fair-use endpoints, inappropriate as primary infrastructure for a hosted app.
- Primary adapter: Geoapify Places API. Free tier without a credit card; OSM-sourced; 800+ category taxonomy; predictable rate limits.
- Secondary adapter: Overpass, configured to point at the Private.coffee mirror (
https://overpass.private.coffee/api/interpreter), used for ad-hoc raw-tag queries that Geoapify's category model can't express. Not used for default app traffic. - Internal taxonomy: Adapters normalize results to an internal
PoiCategoryenum (park, cafe, viewpoint, beach, museum, restaurant for MVP). Provider-specific tags do not leak past the adapter boundary.
- Primary adapter: Stadia Maps. 2,500 free credits/month, no credit card, decent Israel coverage, MapLibre-compatible style URLs.
- Secondary adapter: MapTiler. Comparable free tier, broader style catalogue. Wired but unused by default; selectable via env var.
- Style themes: Light and dark variants for both adapters. The app picks based on system preference.
- We're trading "fully open" (Overpass) for "reliable" (Geoapify). The Overpass escape hatch keeps us honest if a category Geoapify can't express becomes important.
- Two tile providers behind a
TileProviderinterface adds complexity that's mostly cosmetic for MVP — but it's the cheapest place to practice the abstraction pattern that pays off when the isochrone provider swap happens in phase 2. - Attribution requirements for Stadia, MapTiler, OSM, and Geoapify all need to be rendered correctly in the map UI. This is non-negotiable for license compliance.