How a Non-Coder Vibe-Coded GeoSports to $40K/mo with Claude
October 9, 2026 · 1332 words
| Item | Detail |
|---|---|
| What it is | Daily sports geography game: 5 questions, tap the answer on a globe |
| Builder | Non-developer (Frank Michael Smith, sports content creator, Rhino Studios) |
| AI tool | Claude (Max 20x plan); Claude chat vs Claude Code not disclosed |
| Stack | Vercel Pro, MapLibre, Upstash Redis, Google Sheets, Stripe |
| Time to launch | About one weekend (8 hours per Starter Story; ~2 days per Sportico) |
| Revenue | About $40K/month: ~$30–35K ads + ~1,800 Pro subs (self-reported, Sep 2026) |
| Source | Starter Story, Sep 27, 2026 |

GeoSports is a daily sports geography game. You get five questions, and you answer each by tapping where it happened on a globe. Its creator, Frank Michael Smith, says it makes about $40K a month, mostly from ads, with about 700,000 monthly active users.
Frank is not a developer. In his Starter Story interview he says plainly that he isn't technical and doesn't know how to code. He built the first version with Claude, an AI chat assistant, in about a weekend.
The one point to take away: a non-coder's real advantage was not the code. It was knowing his audience, and building something they'd want to share.
Who built it: a sports creator, not a coder
Frank has been an independent sports content creator since 2020, with over 4 million followers across social platforms, per Starter Story. He had launched small games before. One, Five Card Draw, drew about 110,000 players.
In 2024 he set up Rhino Studios to house his game work. GeoSports is part of its GeoGames app, alongside GeoHistory and GeoFooty.
He also says the idea isn't new. GeoSports remixes MapTap, an existing daily geography game, with a sports twist. That matters. He didn't invent a format. He took a proven one to an audience he already knew.
Tool choice: Claude, a spec and screenshots
Frank used Claude on the Max 20x plan, one of Anthropic's paid subscriptions. The interview doesn't say whether he used Claude Code, the terminal-based coding agent, or the regular Claude chat app.
His method is easy to copy:
- Write a spec first. A spec is a short document that says what the app should do, screen by screen.
- Build one step at a time. At each step, he'd ask Claude what to do next and check it against the spec.
- Use screenshots when lost. When something looked wrong, he'd screenshot the whole screen and ask Claude to explain it.
He says Claude didn't always get it right, but got it right most of the time.
The stack he lists:
| Layer | Tool | What it does |
|---|---|---|
| Hosting | Vercel Pro | Runs the website; domain bought there too |
| Globe | MapLibre | Open-source library that draws the interactive map |
| Leaderboards and stats | Upstash Redis | A fast hosted key-value store for scores |
| Questions | Google Sheets | Where he writes each day's five questions |
| Payments | Stripe | Charges for Pro subscriptions |
Google Sheets as a content database is a very non-developer choice, and a smart one. He can edit questions without touching code.
Where he got stuck
The interview doesn't list specific bugs. His fix for any stuck moment was the same: ask the AI, check the answer against the spec, keep building, and use screenshots.
The bigger limit came later. Sportico reports that development has since moved to Rhino Studios' four-person team. Sportico also reports a $500,000 raise at a $4 million valuation. So the weekend build got the game launched. A team now keeps it running at this scale.
Build-time accounts differ slightly. Starter Story says about eight hours on a Sunday. Sportico says the prototype took about two days.
How it makes money
Two streams, by Frank's account:
- Programmatic ads: about $30,000–35,000 a month. Programmatic means an ad network fills the slots automatically.
- GeoGames Pro subscriptions: about 1,800 subscribers. The App Store lists Pro at $4.99 a month or $39.99 a year. Pro unlocks past days, random and sport-specific rounds, and a Pro leaderboard.
Rough math: 1,800 subscribers at $4.99 a month is at most about $9,000. So ads are the main engine, and ads need huge traffic.
Earlier, Sportico reported about 1,000 members and about $47,000 in annual recurring revenue two weeks after Pro launched, with $0 spent on marketing.
How it got players

This is where his background did the work.
- A quiet launch first. Family and friends played before anyone else.
- One viral reply. He replied to his own post on X, on an NBA topic, with a note about the game. That brought about 40,000 players. The next day brought about 150,000.
- A share button people use. He says about 53% of players share their score. Every share is a free ad.
- Celebrity hosts. Sports figures write a day's five questions, and they usually share it.
His own daily posts drive only about 2% of traffic. Word of mouth does the rest.
"Don't be afraid to build for web first" — Frank Michael Smith, Starter Story
A web link opens instantly from any shared post. No app install stands in the way. The iOS app came later.
What a non-developer should copy
- Start from an audience you already have. Frank's following made the first spike possible.
- Remix a proven format. A known game loop is easier to build and easier to explain.
- Write the spec before the prompts. It keeps the AI on track.
- Keep content out of code. A spreadsheet lets you update daily content safely.
- Ship on the web first. Sharing works best with a link.
- Plan for help when it grows. A weekend build can launch you. Scale may need a team.
If you vibe-code this
This app type is a daily web game with leaderboards and paid subscriptions. Here are the checks I'd run on any app like it:
- Score on the server. Send the tap position, not the score. Otherwise anyone can post a perfect round.
- Don't send answers to the browser early. Reveal each location only after the guess is submitted.
- Rate-limit score submissions. See API rate limiting.
- Keep database tokens server-side. See environment variables security.
- Verify Stripe webhooks before granting Pro. See Stripe webhook security.
A server route that calculates the score from the tap itself:
// app/api/guess/route.ts
export async function POST(req: Request) {
const { questionId, lat, lng } = await req.json();
const answer = await getAnswer(questionId); // read on the server only
const km = haversineKm(lat, lng, answer.lat, answer.lng);
const points = Math.max(0, Math.round(1000 - km)); // server decides
await saveScore(await currentUserId(), questionId, points);
return Response.json({ points, answer }); // reveal after guessing
}
Not a coder but shipping something people pay for? Email [email protected] for a vibe-code security audit.
Key takeaway
GeoSports shows what a non-developer brings to vibe coding: an audience, taste and a shareable idea. Claude helped turn that into a working game in a weekend. Sharing turned it into about $40K a month.
More case studies: Vibe-coded apps making money · Security basics: Vibe coding security guide