Connecting...

Real-Time Transit Context

for Intelligent Survey Targeting

Live in Production

17-Field Context Extraction

Every trip planner search is analyzed in real-time. Alerts are matched to routes. A pseudo-event triggers the right survey.

🔍
User searches trip
🚨
Pinia Store
alerts
📦
Apollo Cache
itineraries
📋
17 Context Fields
Pseudo-Event
💬
PI Survey Trigger
🚨 Pinia Store $pinia.state.value.main
// Accessed via document.getElementById('__nuxt') // .__vue_app__.config.globalProperties.$pinia { "indexData": { "systemStatus": [ { "abbreviation": "NEC", "service": "Rail", "advisoryAlert": "0", "message": "NEC train #3847 up to 20 min late..." }, { "abbreviation": "NJCL", "service": "Rail", "advisoryAlert": "1", "message": "Possible delays due to track work" }, { "abbreviation": "87", "service": "Bus", "advisoryAlert": "1", "message": "Bus 87: Detour in effect" } ] } }
📦 Apollo Cache useNuxtApp()._apolloClients.default.extract()
// Extracted from Nuxt's Apollo client cache { "ROOT_QUERY": { "getTripPlannerSchedule({...})": [ { "duration": "1 hr 22 min", "fare": { "regularFare": "$16.75" }, "legs": [ { "route": "NEC", "routeType": "C", // C=Rail, B=Bus, L=LRT "block": "3847", // train ID "onStopDescription": "TRENTON TRANSIT CENTER", "offStopDescription": "NEW YORK PENN STATION", "onStopTime": "1:51 PM", "offStopTime": "3:13 PM", "sign": "Northeast Corrdr", "colors": { "bg": "#F7505E", "txt": "#FFF" } } ] } ] } }

Try It Live

Active Scenarios

Loading live alerts...

Custom Search

Trip Metadata

Route Intelligence

Alert Counts

Next Iteration

With NJT Developer Portal access, every trip search links to live train data

Developer Portal Access Required

From Alerts to Full Situational Awareness

Trip Planner Result

route: "NEC"
block: "3847"
block ↔ trainID

Live DepartureVision

trainID: "3847"
track: "6"
status: "BOARDING"

Links every trip search to real-time train data

🚉

Real-Time Train Status

TrainDestTrackStatus
3847Trenton6BOARDING
3247Long BranchDELAYED
3849TrentonOn Time
6639Dover1CANCELED
vs today: We know the route has alerts. Now we know the exact train status.
🛤️

Per-Stop Tracking

NY Penn Station1:51 PM
Newark Penn2:06 PM
Newark Airport2:13 PM
Metropark2:28 PM
New Brunswick2:41 PM
Princeton Jct2:58 PM
Trenton3:16 PM
vs today: We know origin/destination. Now we track every stop in real-time.
📍

GPS Positions

Train 384740.734°N, 74.165°W
Direction: SW · Next: Newark Penn

Train 324740.416°N, 74.116°W
Direction: S · Next: Hazlet (+8 min)
vs today: We know the route. Now we know exactly where each train is.
⏱️

Delay Precision

Train 3247: SEC_LATE: 480
= 8 minutes late

Train 853: SEC_LATE: 1500
= 25 minutes late

vs generic “DELAYED”
vs today: We know "active disruption". Now we know the exact delay.
⚠️

Disruption Causes

cause: SIGNAL_PROBLEM
effect: SIGNIFICANT_DELAYS

cause: MAINTENANCE
effect: REDUCED_SERVICE

GTFS-RT structured enums vs plain text
vs today: We know advisory vs active. Now we know the specific cause.
💵

Fare Data

Regular: $16.75
Reduced: $9.00
Zone: 7 → 1

Per-leg breakdown:
  NEC: $16.75 · NJCL xfer: $0.00
vs today: Not captured. Next iteration adds per-leg fare context.
🚨

Alert Severity Levels

SEVERE · NEC signal failure
WARNING · NJCL track work
INFO · schedule change

active_period:
6:00 AM – 10:00 AM
vs today: Binary active/advisory. Now we get severity + time windows.
🚋

Per-Car Capacity

Car 1
80%
Car 2
40%
Car 3
95%
Car 4
55%
Schema exists in NJT API. Data will populate when NJT enables it.
vs today: No capacity data. Ready the moment NJT turns it on.
🚌

Bus Real-Time

Route: 139
Vehicle: 5842
Load: 62%
Next stop: Journal Square
Arriving: 3 min
vs today: Bus alerts only. Now we get GPS, arrivals, and passenger load.

Before & After

FieldTodayNext Iteration
severity"active""active"
alert_count22
delay_seconds480
causeSIGNAL_PROBLEM
track6
boarding_statusBOARDING
gps_lat / gps_lon40.734 / -74.165
fare_regular$16.75
car_occupancy[80%, 40%, 95%]
stop_progress1/11 departed