Subway Surfers has made over $2 billion since it launched in 2012. Not a typo. One endless runner, one dead-simple idea (dodge trains, grab coins, don’t get caught by the inspector), $2 billion.
I’ve spent years building AppBuild, helping small businesses turn ideas into real apps. So when Claude Code showed up and vibe coding stopped being a buzzword and started being something I could actually sit down and do myself, I had one question: could I build my own version of a billion-dollar idea? Just to see how far one evening and an AI coding agent could take me.
Turns out, pretty far. And then I hit a wall that had nothing to do with the code.
I want to walk through the whole thing here, not as a highlight reel but as an honest account of what an evening of vibe coding actually gets you, and where it stops. That stopping point turned out to be more interesting than the game itself.
The idea: Local Surfer
Subway Surfers drops you into a cartoon subway system. I wanted a twist: what if you were running down your own street instead?
Google has driven Street View cameras down basically every road in the country. So the idea was simple. Type in your postcode, pull the real Street View imagery for your street, and turn it into the track. Swipe to dodge, jump the hurdles, grab the coins, beat your best score. Same mechanic Subway Surfers nailed 14 years ago, except this time it’s your actual road, your actual bins on collection day, your actual postbox sitting there as you run past it.
I called it Local Surfer. Your streets, your score.

Claude Code wrote every line
I didn’t open an IDE once. I sat with Claude Code and described what I wanted: a Street View based endless runner, lane-swipe controls, jump and roll, power-ups, a proper scoring system. Claude Code built it, start to finish, in one evening.
Game logic, the Street View integration, the HUD, the whole thing. That’s the part vibe coding is genuinely brilliant at right now. Ideas that used to need a dev team and a two-week sprint now need an evening and a decent back-and-forth with an AI agent that actually understands what you’re asking for.
I pushed the code to GitHub. From there it’s about as low-maintenance as hosting gets: GitHub Actions builds it on every push, GitHub Pages serves the live version. No servers to patch, no deploy button to remember to press, free hosting for a game that, at this point, has real players running real streets. If you want to see how the Street View integration and the game logic work, the code’s on GitHub.
What that evening actually looked like
No grand plan, if I’m honest. I opened Claude Code and typed something close to “I want to build a Subway Surfers style endless runner, but the track is real Google Street View footage of the player’s own street.” Then I watched it think about how to actually pull that off.
It came back with a plan: geocode the postcode, hit the Street View Static API for a sequence of panoramas along the road, stitch them into a scrolling track, and layer the runner mechanics on top. I said yes, and it wrote the whole thing.
From there it was mostly me playing the game, finding what felt wrong, and describing the fix in plain English. The jump felt floaty, so I said that, and it tightened the gravity curve. The coin spacing felt random rather than rhythmic, so I said that too. No debugging in the traditional sense. Just playing, noticing, describing, and watching Claude Code go fix it while I sat there with a coffee.
By the time I stopped, a few hours in, I had a real, playable game. Not a demo, not a prototype held together with duct tape. Something anyone could open and enjoy, on their own street.
Supabase runs the leaderboard
A runner game with no leaderboard is just a fidget toy. So Supabase went in as the database. Every run gets logged, best scores get tracked per player, and the “BEST” number sitting in the corner of the screen (currently 12,699, for anyone who fancies a challenge) pulls straight from it.

That’s when the idea got properly interesting. If Local Surfer knows your street, and it knows everyone’s scores, it can tell you the second someone near you beats yours. Local bragging rights, live, on your actual road.
Except that’s exactly where I got stuck.
Where I got stuck
A website can’t push a notification to your phone.
It can’t sit on your home screen next to your actual apps. It can’t tell you the moment your neighbour just beat your score on the same stretch of pavement you ran yesterday. It can’t show up when someone searches the App Store for a local game. It can’t take a payment for extra lives or a skin pack without you building an entire checkout flow from scratch.
Claude Code had built me a genuinely fun, working game in an evening. What it hadn’t built me was any way to actually reach the people who might play it, or keep them coming back once they had.
I had a finished game and no way to make it feel alive. That’s the bit I got stuck on. Not the code. Getting it in front of people, and staying in front of them. If you’re hitting the same wall, here’s the blueprint that gets you past it.
Then I found AppBuild
I already knew AppBuild existed, obviously, I’ve been running it for years. But this was the first time I’d pointed it at something I’d built myself, purely with AI, in an evening, just for fun.
I fed it the same GitHub Pages URL Claude Code was already deploying to. A few minutes later I had:
- A real iOS and Android app, packaged for App Store and Google Play submission under its own branding, not just a bookmarked website
- Push notifications, so a “you’ve just been beaten” alert actually lands on someone’s lock screen instead of sitting unread on a site nobody bothers revisiting
- In-app purchases wired up, so extra lives or a skin pack become an actual transaction, not a permanent TODO item
- Native device capabilities like geo and compass, the stuff a browser tab either can’t touch or makes you re-approve on every single visit

Same code Claude Code wrote. Same Supabase leaderboard underneath. Just wrapped into something that can notify someone, sit on a home screen, and get discovered in an App Store search instead of dying as a link nobody clicks twice.
Why this matters beyond one silly game
I built Local Surfer for fun, on a whim, mostly to see what Claude Code could actually do unsupervised. But the wall I hit is the exact wall every vibe coder hits eventually, whether they’re building a game or a real business tool.
AI coding agents are extraordinary at getting you from nothing to a working product. Claude Code, Lovable, Base44, Bolt, Cursor, whichever one you’re using, they’ll get you 90% of the way there in a weekend. None of them natively handle the last stretch: App Store distribution, push notifications, native device access, in-app payments. That’s a different discipline, and honestly, it’s the exact discipline I’ve written about before when it comes to the gap between “it works on my laptop” and “it survives real humans on real phones.”
Push notifications alone are worth sitting on for a second. Open rates on a push notification run 60-90% within minutes of sending. Email, even a good one, is doing well to crack 25%. If Local Surfer relied on email to tell you someone beat your score, you’d find out three weeks later, maybe. A push notification, you’d know before your coffee went cold.
That gap between “built it” and “people actually use it and come back” is the whole game. It’s true for a runner game built for laughs, and it’s true for the app your business needs people to open every week.
I see this constantly with the businesses that use AppBuild for genuinely serious reasons: a coffee shop running a digital stamp card, a gym managing class bookings, a tattoo studio handling deposits. Every one of them could have built a decent website. Almost none of them would have got repeat visits out of it, because a website has no way to reach back out. An app with a push notification does. That’s not a small difference, it’s the entire difference between a customer who visits once and one who comes back next week because they got nudged at the right moment.
Local Surfer is the toy version of that lesson. The “someone beat your score” push notification is just gamified loyalty wearing a different outfit. Swap “score” for “stamp card” or “booking slot” and it’s the exact same mechanic every AppBuild customer already leans on.
The build stack, end to end
For anyone who wants the full picture, here’s what’s actually running Local Surfer, layer by layer:
- Claude Code – wrote the entire game: Street View integration, lane-swipe controls, jump/roll mechanics, power-ups, HUD, the lot
- GitHub – version control and source of truth for every line
- GitHub Actions + GitHub Pages – builds and hosts the live web version on every push, free, no servers
- Supabase – the database behind every run, every score, and the leaderboard
- AppBuild – wraps the same build into real iOS and Android apps, adds push notifications, App Store and Play submission, in-app purchases, and native geo and compass access
Nothing in that stack cost me a developer’s salary or a sprint planning meeting. Most of it didn’t cost me anything at all until the app was genuinely worth putting in front of people.
Questions I’d ask if I were reading this
Do you need to know how to code for any of this? No. I didn’t write a single line myself. I described what I wanted and reviewed what came back. The skill that actually matters now is knowing what a good app should do and being specific enough for the AI to build the right thing.
Is Local Surfer live in the App Store right now? The web version is live and playable today, running on GitHub Pages. The native app build is going through AppBuild’s submission process. Same game either way, the web version just needs a link, the native version needs the App Store review to clear first.
Why not just keep it as a website and skip AppBuild entirely? Because a website nobody remembers to revisit might as well not exist. No icon on the home screen, no push notification when your leaderboard spot gets taken, no listing for someone to stumble on while browsing the App Store. The game was finished. The reach wasn’t.
Could you do this for a real business, not just a game? That’s the whole point. Local Surfer’s a toy, but the exact same gap (built something people love, no way to reach them consistently) is what stops small businesses turning a good app idea into something people open every week.
Try it yourself
If you’re vibe coding something right now, a tool, a game, an app for your actual business, and you’re wondering how it goes from “runs fine on my laptop” to “lives on someone’s phone and actually pings them back when it matters,” that’s the exact gap AppBuild fills.
Point it at whatever Claude Code, Lovable, or Base44 just built you and start free at appbuild.diy/vibes. Or if a website is genuinely all you need right now, it’s worth reading through PWA vs native app first, since that decision changes everything downstream.
And if you want to poke through the actual Local Surfer code, the Street View integration, the Supabase schema, all of it, it’s sitting on GitHub.
Current best score on my own street is 12,699. Good luck, and let me know if you beat it.
Last Updated on September 7, 2026 by Ian Naylor
0 thoughts on “I built my own Subway Surfers with Claude Code in one evening. Then I got stuck.”