Skip to content

System Context (L1)

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

System Context Diagram

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