dobrovolskiy.com
RU
← all workinfrastructure · 2026

geo.ryta.online: self-hosted maps API

Self-hosted OpenStreetMap stack for Russia/CIS: vector tiles, Photon geocoder and a metered API gateway with paid plans

A complete self-hosted geo backend built to free the RYTA app from third-party map APIs: 13 Geofabrik extracts merged, imported into PostGIS via osm2pgsql, rendered to a PMTiles vector...

geo.ryta.online: self-hosted maps API

A complete self-hosted geo backend built to free the RYTA app from third-party map APIs: 13 Geofabrik extracts merged, imported into PostGIS via osm2pgsql, rendered to a PMTiles vector basemap (Planetiler/tippecanoe) and indexed for Photon forward/reverse geocoding in Russian and English.

A Node/Express gateway fronts it as a small SaaS: phone-verified sign-up, scoped API keys for geocoding and tiles, per-plan quotas with HTTP 429, T-Bank billing, dashboard and admin.

Supporting tools include an OSM box editor that round-trips JOSM edits into the basemap and a live ST_AsMVT map viewer over PostGIS.

What it does

  • Full OSM pipeline for Russia + 12 CIS neighbours: merge PBF extracts, osm2pgsql into PostGIS, build ~10 GB PMTiles basemap, ship it as a static file served with range requests
  • Photon geocoder index built off-server from a Nominatim import (build heavy, serve light: ~5.5 GB index, ~2 GB heap) with RU/EN autocomplete and reverse geocoding
  • Metered API gateway: two key scopes (geocode rgk_*, maps rmk_*), daily/monthly quotas, 429 on overrun, usage dashboard, keyless public demo
  • Passwordless phone-only auth with inbound-call verification via Rostelecom VATS signed webhook; Free/Starter/Business plans paid through T-Bank
  • geo-demo: MapLibre test bench showing Photon timing stats, per-result OSM tags, click-to-reverse-geocode and vector-tile feature inspector
  • edit-osm: Flask tool to draw a bounding box on your own map, cut it with osmium, edit in JOSM via Remote Control, merge back and rebuild the basemap; plus an OSM API-DB (cgimap) experiment
  • pg-map / martin / kepler.gl: on-the-fly MVT tiles straight from PostGIS with ST_AsMVT, Martin tile server config, kepler.gl v3 over pg_featureserv without a Mapbox token
  • Two deployment targets (evgen VPS reusing an existing Photon, and main-server with a private registry) driven by dry-run-capable PowerShell scripts and Caddy host blocks

Independence from Google/Yandex map APIs for the whole CIS region on a 2 GB RAM VPS thanks to a build-heavy/serve-light split (PMTiles static file + compact Photon index); well-reasoned architecture docs with sizing math (osm2pgsql cache vs flat-nodes, disk multipliers); a SaaS layer (keys, quotas, billing) built in a few weeks; QGIS/JOSM editing loop that keeps custom places both on the map and in search.

Want something like this?

I build it live on a Zoom call, you watch the screen, the timer stops when you say stop. First 15 minutes are free.

$50 / hourBook an hour

More projects

Shared Postgres stackOne hardened Postgres 16 instance with per-project roles/databases for a multi-tenant Docker hostFOURLEDS Cloud ControllersCellular lighting controllers for heritage facades: six KiCad boards, ESP-IDF firmware, fleet server, dashboardUltralight IP CAM ViewerUltra-light multi-camera RTSP viewer and recorder: dozens of cameras on one slow PC or server