Built with AI · Public
Metro Agora
A public web app for Lisbon Metro countdowns. The timer is the trivial part. The fiddly bits were pulling live data from the official API without leaking its credentials, and keeping the app fresh once it's installed on someone's phone.
Live
Anyone can use it
30s
Train times refresh
Safe
API keys stay server-side
iOS
Installs to your phone
The problem
The Metro Lisboa API needs credentials that can't live in browser code, or anyone could lift them and run up calls on the account. On top of that, the app has to stay current on phones, including when it's saved to the iOS home screen, where the cache gets stubborn about updating.
So there's more going on here than a timer. A credential boundary and a caching strategy are holding it up.
What it does
- Shows real-time next-train countdowns for Lisbon Metro stations.
- Pulls line status and station info straight from the official data.
- Has its own page per station, so it's easier to find and link to.
- Refreshes itself cleanly even when installed to a phone's home screen.
How I built it
AI wrote the code; I made the calls on how it should behave. The one rule I wouldn't bend: the API credentials never reach the browser. They live server-side in a small proxy that talks to the official API and passes back only what the app needs. I kept proper security on that connection even though the upstream made it awkward, because the easy shortcut, turning verification off, would have been the wrong one.
The other headache was staying current on installed phones. The app and its offline cache are versioned separately, so a normal update refreshes the app without forcing a heavier cache rebuild every time.
Made to be shared
This is the one build here that was always meant to be public. You don't have to take my word for any of it. It's live at metroagora.com, on the web or installed to your phone.