System Context (L1)
The Axion Platform from a bird's-eye view: who uses it and what it depends on.

Actors
| Actor |
What they do |
Surface |
| Inspector |
Drives the route, captures video & sensor data, syncs detour tasks. |
Sense Mobile App |
| Supervisor |
Plans territories, assigns tasks, reviews coverage. |
Planner Web App |
| Analyst |
Builds dashboards and asks the AI agent for queries. |
Gen Web App |
External systems
| System |
Why it's external |
How we integrate |
| External Identity Provider (OIDC) |
Customer-controlled identity. |
JWT validation via OIDC discovery on every request. See Auth. |
| External Detector Systems |
3rd-party object detectors (signs, surface defects, etc.). Ship independently. |
Push results to Vision's REST POST /api/v1/detections/{detector_name}; Vision Worker also dispatches frames out to per-detector HTTP APIs. |
| Triton Inference Server |
Optional ML model server hosting the frame quality model used by Vision Quality. |
gRPC from Vision Quality with the frame image. Replaceable with the local mock in dev. |
| External Map Matching API |
Optional alternative to in-cluster Valhalla. |
HTTP from Vision Matching, selected via vision.config.mapMatching.backend. |
| Citylens |
Legacy system holding existing tracks, frames, detections. |
One-shot bulk import (Postgres reader) + ongoing realtime sync via three Kafka topics. See Citylens flows. |
| 2GIS MapGL |
Map tiles + raster basemap for the Gen web app. |
Direct browser → 2GIS over HTTPS; no server-side proxy. |
| Langfuse |
LLM observability for Gen Web's AI agent (traces, prompts, evals). |
Server-to-server export from the Gen Web Next.js BFF. |
Why these choices
- OIDC, not in-app users. Customers run the platform alongside their own SSO. Bringing identity in-house would couple our release cycle to theirs.
- ML inside the platform. The recognition pipeline (Vision: API + Worker + Quality + Clusterization + Matching) is a first-party Python stack — only the model server (Triton) and the per-customer detector APIs are external. Each external detector can ship on its own cadence; Vision dispatches to it over HTTP and accepts results either via the same call or pushed back to the Detections API.
- 2GIS only for Gen, not Planner. Gen is the analytics surface where map basemaps matter cosmetically. Planner needs offline-friendly PMTiles (we generate our own) — see PMTiles flow.
- Langfuse not SigNoz for AI traces. SigNoz handles infrastructure; Langfuse is purpose-built for LLM evals (token counts, prompt versions, tool-calling traces). Different audiences, different tools.
Where to go next