Under the hood

A consumer app,
engineered like infrastructure.

RouteFeed is being built to production quality before launch: clean architecture, failure states designed up front, and place data the product owns outright. Everything on this page exists and runs today — the only aspirational items are the ones explicitly marked planned. The hero map on the front page is this stack, live.

149-layercustom basemap, light + dark generated from one style pipeline
~22k placesimported per market from OpenStreetMap, then AI-cleaned, grounded and owner-curated
1 identityper real-world place. Aliases stop provider data from forking
$0 in-marketgeocoding. Searches hit RouteFeed's own catalog, not a paid API

Catalog-first search: RouteFeed owns its place data

Instead of renting search from a geocoding API forever, every named place in a market is imported once, given a permanent RouteFeed identity, and indexed for instant, typo-tolerant search. External geocoders become a shrinking fallback.

sourceOpenStreetMapbulk regional extract
importImporteridempotent · enriched at import
ownPlace cataloglocations + alias index
serveSearch index5 to 50 ms, geo-ranked
userInstant resultsevery hit is our doc

A new market means running the importer for that region. Nothing else changes.

The map draws the same catalog — from RouteFeed's own tiles

Every place label the map shows comes out of the owned catalog, baked into RouteFeed's own vector tiles and published to a global CDN as immutable, dated builds. One pointer document switches every app to the new build at the next map open — no release, no cache purge, and rollback is pointing it back.

exportLive catalogdaily + on demand
bakeVector tilesreveal ranking baked in
publishDated buildimmutable, on a global CDN
flipPointer docatomic switch · 1-field rollback
userEvery app updatedat the next map open

Tile egress costs the project $0 — the CDN doesn't charge for it. Publishing is one click from the owner console; a failed publish harms nobody, because the pointer only ever flips to a fully uploaded build.

The data is cleaned like a court case, not a batch job

Raw OpenStreetMap is messy: duplicate landmarks, tag-inflated nobodies, missing descriptions. Every place goes through an adversarial AI pass — one model argues, a second model attacks the argument, and the owner rules on what survives. Verdicts are stored as overlays keyed to reimport-proof identities, with per-field provenance (owner > curated > open data > AI) enforced on every write — so a human correction can never be silently overwritten by a machine, and a database rebuild never loses a decision.

groundEvidenceOSM tags + Wikidata
argueAI judgeclassify · describe · score
attackAI skeptica second model hunts errors
ruleOwner verdicthumans outrank machines
keepWipe-proof overlaysurvives every rebuild

The descriptions you can tap on the front-page map came out of this pipeline.

Every provider is behind a swap-tested interface

The rule: replacing the map engine, the database, or a video CDN may only touch its adapter, never the product code. These boundaries exist in the codebase today.

MapRendererMapLibre today · swappable
SearchServiceown catalog → index → geocoder fallback
RoutingServiceon-device engine (Valhalla planned)
LocationRepositoryFirestore geohash queries
MediaUploadServicestorage and CDN under evaluation
AuthRepositoryFirebase Auth · guest → real account linking

Stack

Flutter Riverpod Firebase Auth Cloud Firestore Cloud Functions App Check MapLibre GL OpenStreetMap Algolia Cloudflare R2 Vertex AI · Gemini data pipeline Valhalla planned CarPlay / Android Auto planned

The entire UI reads from one theme system. The coral accent is reserved, in the app and on this site, for exactly one thing: the moment you decide to go.