Tunnel Rat
A native iOS app for navigating New York's Subways, designed, built, and shipped to the app store.
Context
What
A native iOS app focused exclusively on the New York subway—free, reliable, private, and accessible at its core.
Why
There's a glut of transit apps—but they try to do too much, and not very well. I aimed to fill that gap with an app that understands how New Yorkers actually think about the system.
Who
When
Built v1.0 in about 2 months, from April – June 2026, with continued iteration and improvements on an ongoing basis.
Results
Shipped in July 2026 to ~150 initial installs, slowly growing week over week.
Toolkit
Composition
Figma
Claude Code
Framer Motion
Xcode
Warp
Symbols / Composer
Infrastructure
Supabase
Cloudflare
Vercel
Claude API
Swift
React
Three.js
TypeScript
Workflow
GitHub
Linear
Sentry
Slack
Specs & Details
Foundations
A native SwiftUI transit app with the MTA's schedule in local SQLite, live Protobuf feeds behind a Cloudflare edge cache, a thin Supabase backend for what can't run on-device, and every design value single-sourced from Figma in one tokens file.
On device
Tunnel Rat
Native SwiftUI on a strict MVVM split—views render, ViewModels and Services do the work.
Local SQLite
The MTA's entire schedule, plus favorites, saved places, and settings. None of it leaves the phone.
Edge
Cloudflare Workers
One cached fetch shared by every rider, refreshed in the background. Falls back to the raw MTA endpoints when a layer goes down.
Backend
MTA GTFS-RT
Supabase
Edge functions and scheduled jobs for what can't run on-device: AI alert summaries, push, reminders. Per-user calls skip the cache.
Design system
iOS App
Tunnel Rat is built around the glance, not the session—it opens on your stops, live arrivals already on screen, because the only question is whether to run for the stairs. It does less on purpose: no ads, no account, no tracking, and it tells you when the data is stale instead of bluffing.
Website
The Tunnel Rat site is a static Next.js build with a custom GLSL tunnel shader behind the hero, doing one job: explain the app and get you to the App Store. Its FAQ, changelog, and legal pages read from the same shared content repo the app bundles, so the two surfaces can't drift apart.





















