One app for every leg of your trip — jeepney, bus, MRT, LRT, and walking — powered by MMDA data and on-device AI.
How do you usually get around?
KAirOS tailors your routes, parking, and coding alerts to how you travel. Pick one — you can change it any time in Profile.
Your data never leaves your phone.
KAirOS runs AI on-device for instant, offline, private route decisions.
On-device AI
100% private
Offline ready
Location
For live navigation & arrival ETA
Notifications
MMDA incident alerts along your route
Microphone
Taglish voice trip input (optional)
Home
Magandang umaga, Gene 👋
Saan tayo ngayon?
0min
Saved today
0
Crash zones dodged
0
Coding violations avoided
Suggested right now
Upcoming scheduled trips
Predictive ETAs from the MMDA road-speed curve — planned before you leave.
Road closures · from MMDA
Planner-published closures that affect your area. Tap a trip to re-route around them.
Commute coach · personal
Calculating best window…
…
vs leaving at 8:30 — corridor speeds from MMDA Q1 2023; hourly shape is illustrative (source has no time-of-day column). Shift off-peak and you feed MMDA's demand forecast. On-device AI, your patterns over time.
Station crowding
Shape from MMDA corridor speeds · per-station offset illustrative
MRT Cubao
Moderate · 7–9 AM peak
LRT-1 Baclaran
Low · best window 10 AM
BGC Bus Stop
Moderate · 5–7 PM peak
Built on MMDA Q1 2023 road-speed data · hourly shape is illustrative
Cubao
Ayala, Makati
Leaving now · 9:41 AM
Optimize for
WalkJeepneyMRTBus
Fastest
38 min
Walk 5 min
MRT-3 (4 stops)
Walk 7 min
Leave by 7:42 AM Saves 17 min
Safest
44 min
0 crash zones
Walk 6 min
LRT-1 → MRT-3 transfer
Walk 8 min
Recommended for night
Coding-safe
51 min
UVVRP-compliant
Walk 4 min
Jeepney · España–Lacson
Walk 9 min
Avoids plate-window
Same trip · choose your impact
TDM
Time-of-day estimate from the MMDA speed curve · illustrative. Your off-peak shift feeds the planner's demand forecast.
Same destination · two modes
Demo · illustrative fares & fuel
Re-route available.Crash on EDSA–Quezon Ave. Alt saves 6 min.
ETA
10:23 AM
14 min remaining
Smart mode-change announcement 0.31s
In 2 min, exit at MRT-3 Ayala on the north side. Platform is crowded — keep your belongings close. Walk 7 min along Ayala Ave to your destination.
Sa 2 minuto, bumaba sa MRT-3 Ayala, hilagang daan. Maraming tao sa platform — ingatan ang gamit. Maglakad ng 7 minuto sa Ayala Ave patungong destinasyon.
Generated on-device · context-aware · bilingual
Now
Walk 4 min
to MRT Cubao Station — use the north entrance
Next · bilingual
Board MRT-3 northbound
4 stops to Ayala · arrives 10:19 AM
Sakay ng MRT-3 patungong Ayala · 4 na hintuan
MMDA alerts
5 active incidents affecting your saved routes
On-device summaryNo data leaves phone
Heads up: a high-severity crash is blocking the southbound EDSA–Quezon Ave approach. Your Fastest route is affected — re-routing through Quezon Ave saves ~6 min. LRT-1 option adds 4 min but dodges all crash zones.
Paalala: malakas na crash sa EDSA–Quezon Ave. Naaapektuhan ang iyong Fastest route. Mag-re-route sa Quezon Ave, makatitipid ng ~6 min. Ang LRT-1 ay +4 min pero walang crash zone.
Filtered to your saved routes Processed on device · no data left phone
High12 min ago
Crash — EDSA–Quezon Ave (southbound)
Quezon City · affects your Fastest route
Re-route saves 6 min
Medium28 min ago
Heavy traffic — Roxas Blvd–Taft
Pasay · 35 min delay
Medium45 min ago
Slow traffic — C5–Kalayaan
Taguig · 18 min delay · affects your Work route
Low1 hr ago
Flooding — España–Lacson underpass
Sampaloc · 0.5m · impassable for light vehicles
InfoToday
UVVRP coding window — 4 PM onwards
Plate ending 4, 9 restricted on EDSA & Roxas Blvd
Coding-safe route auto-selected
Station crowding
Shape from MMDA corridor speeds · per-station offset illustrative
MRT Cubao · today
Best windows: 10 AM – 3 PM, after 8 PM
5a
6a
7a
8a
9a
10a
11a
12p
1p
2p
3p
4p
5p
6p
7p
8p
LowModerateHigh
Loading tip…
Reading the latest MMDA speed curve.
Current streak
7 days
142
Points
Badges
Off-peak Hero
Coding-Safe 7
Multi-modal
CO₂ Saver
30-day Streak
Safer Streets
This week
Off-peak hero
5 trips before 7 AM
0%
0 of 5 · done
Coding-compliant week
7 days without plate-window violation
0%
0 of 7 days
Multi-modal explorer
Use 3+ transport modes this week
0%
0 of 3 modes
Your impact
Last 30 days · personal TDM contribution
0
Trips planned
0
Crash zones avoided
0
Coding violations avoided
0kg
CO₂ saved
Your fuel savings · personal
Based on
—
Fuel not burned
—
Litres avoided
—
Km saved
Your saved minutes, translated to fuel and pesos — vehicle-aware (car or motorcycle). Demo · illustrative.
Trip time reduction
17%
You · 32 min avg
Metro Manila baseline · 38 min avg
On target for the 15–20% spec goal ✓
Behavioral change
Modal shift adoption
Chose public transit for a faster route
25%
Daily route queries
Avg of your logged trips · spec target 2–3
2.7
AI response time
Voice/text → route output on-device
1.4s
Weekly trend
G
Gene Jr E. Gulanes
KAirOS · AI Developer & Web Engineer
How you get around
Plate & UVVRP
We automatically reroute around UVVRP-restricted roads on coding days.
Truck routes avoid narrow CBD cores and run at freight speed (set by MMDA in Routing policy).
Saved routes
Home — Cubao
38 min via MRT-3
Work — BGC
44 min via Bus
Preferences
Language
UVVRP coding alerts
Data & privacy
Notifications
Overview
Live · --:-- PHT
Aggregated · zone-level only
Low demandModerateHigh Persistent map · overlay toggles via the KairosMap API · state survives panel switches
1,247
Active commuters
+8% vs yesterday
3,892
Trips today
+12% vs avg
34min
Avg trip time
−12% vs baseline
23%
Modal shift to PT
on target (25%)
Live activity · last 5 min
0 trips
Demo ticker · synthetic events streamed live during the demo so the dashboard doesn't look frozen. Real build would ingest MMDA operator logs.
Loading slowest corridors from MMDA Travel Time Data…
Active incidents
5
HighEDSA–Quezon Ave (SB)12 min ago
MedRoxas Blvd–Taft28 min ago
MedC5–Kalayaan45 min ago
LowEspaña–Lacson underpass1 hr ago
InfoUVVRP window — plates 4, 9Today
Time scrubber
9:41 AM · peak hour
6a9a12p3p6p10p
Selected zone
Quezon City
2,444
Road segments
14.6
Avg kph
22%
Of MM network
Top destinations
Makati412
BGC / Taguig337
Manila271
Mandaluyong198
Pasay142
Hour profile · Quezon City
Trip volume from this zone across the day. The scrubber above highlights the current hour.
— · peak hour— · trips/day— · at cursor
—
Top demand zone
Where trips converge
—
Peak demand hour
Heaviest inbound flow
—
Converging trips
At selected hour
—
High-risk zones
Demand ≥ 66% of max
Converging demand
Forecast
Converging demand
Loading…
High (≥66%)Moderate (25–66%)Low (<25%)From commuter trip log · synthetic demo data
Forecast time scrubber
8:00 · morning
6a9a12p3p6p10p
How it works
Ranks zones by inbound trip volume — where commuters are
heading at the selected hour. High demand concentration signals where congestion is likely to build,
letting MMDA pre-position enforcers and time interventions before gridlock sets in.
AI vehicle counting · on-device
A real YOLOv8n model runs in-browser via ONNX Runtime Web on sample traffic clips — not live MMDA feeds. Footage is decoded on-device and never uploaded. Drop a .webm/.mp4 to count your own clip.
AI: loading…
Camera grid · click to focus
6 sample clips
Each clip is real traffic footage, counted live on-device by the YOLOv8n model — no live MMDA feed in this demo.
Restriction exposure · derived from 5,000 synthetic trips × UVVRP schedule. Tap a zone to highlight it on the map.
Loading exposure…
Restricted roads
Scenario builder
Before
Current state
Avg trip time
—
Affected commuters
—
PT modal share
—
Predicted complaints
—
After (predicted)
Run a scenario
Avg trip time
—
Affected commuters
—
PT modal share
—
Predicted complaints
—
Pick a road + window and Run for before/after impact. Publish writes the closure to the commuter app — it surfaces on Home, Alerts, and re-route banners. Demo · planner-published, persists in this browser.
Published closures · live to commuter app
0 active
Vehicle routing policy
Speed and avoidance rules per vehicle class. These feed the car / truck route options commuters see in the app. Demo · planner-set values.
Truck routing
Enable truck-optimized routes
Adds a Truck card to driver results
0.70
Trucks run slower than posted (weight + congestion)
Comma-separated · matched against road names (narrow CBD cores)
Car routing
1.00
Cars use posted MMDA speeds; no avoidance overlay
Car routes stay on the full drive graph with UVVRP compliance only. Lower this factor to model congestion for all drivers.
Preview · car vs truck (Cubao → BGC)
Live · current policy
Computed live with the current policy via the on-device router.
Live stats · Quezon City
Zone-driven
Computed live from seed-trips.json + ttindex.json for the zone selected on the map. Tap a zone marker to change scope.
—
Trips touch zone
—
Avg speed
—
Road segments
—
TT corridors measured
Mode share
Weekly volume · zone vs MM avg
This zoneMM avg · —/wk
Road network coverage · by city
City / Municipality
Road segments
Avg speed
% of network
TT coverage
Loading coverage from MMDA Travel Time Data…
Companion pipeline tool that converts raw MMDA datasets into the
lightweight JSON the app loads. Static view — run
python3 scripts/build_data.py --status for the live report.
Target scale-out topology for KAirOS at city scale — SSE push + Pub/Sub backbone, two independent ingest paths, zone-level aggregation.
Target topology — not running in this demo. The demo is fully client-side (static JSON over python3 -m http.server, no API server). This is the planned production architecture, consistent with the spec's aspirational GraphHopper + Liquid AI stack. See the README "Roadmap" section for the honest mapping.
Request & data flow
Aspirational · designed for three-nines availability
300,000 active commuters
120kevents/s36klive streams40ms p50
Aggregator ×3 · SSE ×4 active-active · routing ×2 · broker quorum 3 · ingestion fixed at 1.
What-if capacity simulator — drag to watch the topology scale out. The MMDA ingestion funnel stays fixed on purpose; the stateless tiers autoscale. Illustrative model, not a live measurement.
The Pub/Sub broker is the spine — every normalized event flows through it, decoupling which node produced data from which node holds a client connection. Run as a 3-node quorum: an odd count avoids split-brain on failover. It is the single highest-leverage HA component; if it is down, nothing flows.
Two scaling strategies
Different tiers scale differently — on purpose. Ingestion is a fixed, rate-limited funnel: one polite cached reader protects MMDA from overload (and protects us from their rate limits). Aggregation + Routing are stateless and autoscale freely with demand. Scaling the aggregator does not affect MMDA load — they never talk.
Stateful HA
The SSE Gateway is the only stateful consumer tier — it holds open sockets. Run it active-active and drain connections on scale-in so no client is dropped mid-stream. This is where naive autoscaling breaks; the broker + drain pattern is what makes it survivable.
Designed for three nines
99.9% uptime (≈8.76 h downtime/year) is an operational property, not a box-count property. The real levers: HA broker (quorum) + safe deploys (blue/green or canary, one-click rollback, health-checked auto-restart). Availability multiplies across tiers, so each tier carries headroom above the composite target.
Privacy boundary
The aggregation nodes are not just a performance tier — they are the privacy mechanism. Individual phone points collapse to zone counts before they are published to the broker. No individual trip or personally identifiable detail reaches consumers. This matches the spec's "all commuter data is aggregated at the zone level before display."
The product loop
The dashed round-trip is the core loop: one commuter's phone uplink → aggregation → broker → SSE Gateway → all phones receive an updated crowding/alert view. One rider's telemetry becomes everyone's live intelligence, fanned out in milliseconds.
Composite availability caveat: across ~5 tiers, per-tier availability multiplies. 0.999⁵ ≈ 99.5% composite, so each tier needs headroom above three-nines individually. The HA broker is the multiplier that drags the whole product down if it is weak.