Platform, a case study
a free sydney transit app that never fakes confidence. built by two people and a lot of agents.
- 3,700+ vehicles on the live map at peak
- 5 modes: trains, metro, buses, ferries, light rail
- 2 of us, shipping ios, watchos and android
- $0 no ads, no payments, no account
unshitty transport
i catch sydney transport every day, and i got tired of apps that tell you when something is due but not what you actually need to know. is that prediction live, or a timetable dressed up as certainty? which platform is my connection on? what happens when gps drops out in a tunnel?
transport for nsw publishes great open data: vehicle positions, trip updates, alerts, route shapes, even per-carriage occupancy on some trains. very little of it reaches you in the ten seconds before the doors close. the working name for a long time was literally “unshitty transport”.
never fake confidence
that became the whole philosophy. live, predicted, scheduled, stale, partial and unavailable are different things, and platform says which one you’re looking at.
if the evidence doesn’t back up “on time”, “this is your train” or “this carriage is usually quiet”, the app labels the weaker source or says nothing. no fake on-time claims, ever.
what it does
a live map of every train, metro, bus, ferry and light rail vehicle in sydney, in the real line colours. a journey planner. gps tracking for multi-leg trips that keeps going through tunnels without pretending a timetable guess is live.
departure boards for every station, wharf and stop. live activities that say “go to p26” instead of just counting down. an apple watch app with haptics. trip sharing that never sends your gps trail. alerts summarised on your phone.
native swiftui on iphone, ipad and apple watch, and a native android app built by my co-founder.
the hard parts
real transit data fights back. the tfnsw coord field is [latitude, longitude] when everything around it suggests the opposite. a t8 to leppington reuses a macarthur shape id, so trusting it draws the wrong tail. a stale sample or a half-failed feed can make a polished screen tell a very convincing lie.
and every call costs. the tfnsw account was capped at 60,000 calls a day, and polling 17 feeds every 30 seconds uses about 82% of that. so the backend runs one poller with shared caching, and every app shares it. tfnsw has since approved a higher limit.
built with agents
there are two of us, shipping native apps for three platforms, a website and a backend. agents do implementation, adversarial review, regression tests and docs. one codex run went for 13 hours straight.
the rule: agent output only counts when a build, a test, the live feed or a real device backs it up. we gave a talk on all of this at codex night: “platform: developed rapidly with ai agents”.
codex to arrayah
i started building it at the first codex event in sydney, then kept going in arrayah’s chapter 5 residency, where it’s getting close to shipping.
my co-founder joined later to bring it to android.
the rules
free. no ads, no payments, no account. it’s independent of transport for nsw, built on their open data (cc by 4.0).
what’s next
shipping. it’s in testflight now, going through real-device testing before the public release. the ticket says arriving soon, and it means it.