HomeServicesPortfolioDemosAboutContact
Back to portfolio
In production

Curvia

Maps & navigation

100% self-hosted maps & navigation for Spain: own vector cartography, Valhalla routing, real-time DGT traffic and an Android app with Android Auto.

34K lines of code
2,7M geocoder places
40+ Android releases
1 min DGT traffic latency
Curvia screenshot

About the project

Curvia targets the gap Google Maps leaves in Spain: official data (IGN, DGT, CartoCiudad) merged with OpenStreetMap. The whole stack is self-hosted: vector tiles generated with Planetiler (1.2 GB for all of Spain), Valhalla routing, an in-memory geocoder with 2.7 million places and DGT incidents via DATEX II at one-minute latency. The Android app (Capacitor) adds voice guidance, Android Auto and OTA updates without going through the store.

Tech stack

React 18TypeScriptMapLibre GLPMTiles / PlanetilerValhallaCapacitor (Android)Node 20PostgreSQLDocker

Key features

  • Own vector cartography for all of Spain (PMTiles, OpenMapTiles schema) served from the own server
  • Self-hosted routing with Valhalla and vehicle profiles, zero paid APIs
  • Real-time DGT incidents, roadworks and closures (DATEX II v3.7, refreshed every minute)
  • Own geocoder with 2.7M places (OSM + Overture) plus official CartoCiudad addresses
  • Official DGT speed limits (TN-ITS) regenerated twice a week
  • Android app with Android Auto, voice guidance and self-managed OTA updates
  • Live layers: speed cameras, fuel prices, low-emission zones and wildfires
  • Read-only containers with cap_drop ALL, strict CSP and no exposed database ports

Technical challenges

1

Generating and serving vector tiles for all of Spain without Google or Mapbox

2

DGT DATEX II v3.7 poller normalizing incidents at one-minute latency

3

In-memory geocoder with 2.7M entries and fuzzy search over a tuned PostgreSQL

Want something similar for your business?

Get a quote
Get a quote