-
-
Map — Territory View - Every loop you run becomes a zone on the map, captured, defended, or contested in real time.
-
Zone Detail — Course Info - See distance, pace, and defense strength for each zone you've run.
-
Zone Detail — Solo Siege - Even a solo runner's territory can be attacked — outscore the defender's XP to take it.
-
Zone Detail — Defense - Newly claimed zones are protected for days, but defense strength decays over time.
-
Running HUD - GPS-tracked distance, pace, and time — a minimal HUD with nothing else competing for attention.
-
Run Summary - Earn XP, level up, and contribute to your crew's XP automatically after every run.
-
My Running — Stats - Monthly distance, pace, and a full history of every run, solo or siege.
-
Crew — Members - Up to 15 runners per crew, ranked by monthly distance.
-
Pre-Run — Crew Select - Pick which crew you're running for, gather your teammates, and start together.
-
Crew — War Room (Ops) - Ally with another crew, request reinforcements, and get recommended siege targets.
-
Ranking — Individual - Compete for the top spot by distance or XP, solo.
-
Ranking — Crew - See how your crew stacks up against every other crew in the country.
-
Pre-Run — Solo - Set a distance goal and run a 3km+ loop to claim brand-new territory.
-
Event Run - Join paid event runs for exclusive badges — zones lock so nobody can siege during the event.
-
App Icon - Turn every run into a battle for territory, solo or with your crew.
Categories: Best Game · HAMM Award · Design Award · RevenueCat Peace Prize
Inspiration
Two different frustrations led to RunPlash.
The first was about racing itself: every running race asks you to show up at the same starting line, on the same morning, at the same gun time. But most people don't run at 7am on a Saturday — they run whenever their day allows it. What if a race didn't need a starting line at all?
The second was about running being solitary. I kept thinking about turf-painting games — the way claiming ground turns a simple match into something territorial and obsessive, where taking ground back from someone else feels better than any score. Running has none of that. You run alone, against your own watch, and nobody's coming to take anything from you. I wanted that same "it's mine now — no it's not" feeling, built out of real streets and real distance.
RunPlash is both ideas at once: a running game where territory changes hands between real runners and crews, and where competitive events run on your schedule, not the organizer's.
What it does
Claim. Run any real loop of 3 km or more and that route becomes your territory on a live map. Crews can claim larger zones together once three members have completed the course.
Siege. No territory is safe. Rivals can lay a 3-5 day siege on your zone; every run they make adds to their siege score, and every run you make adds to your defense. When the siege ends, the stronger side keeps the zone — and the map changes color.
Progress. Every run earns EXP and levels, with streak bonuses for running on consecutive days. Defense power slowly decays if you stop running, so holding territory means coming back. The map is never finished.
Compete. Event Runs let anyone register for a themed course — like our first event, HAN RIVER 10K — and run it any time within a multi-day window. Your best attempt counts on a live leaderboard, and podium finishers and all finishers earn custom badges designed for that event.
Monetization (HAMM)
The core game — running, claiming, sieges, crews, rankings — is completely free, with no banner or interstitial ads and no pay-to-win. Revenue comes from one place: a one-time entry fee per Event Run (₩5,000–₩10,000, roughly $4–7), sold as a consumable in-app purchase powered by RevenueCat on both iOS and Android.
Why this model: runners already pay entry fees for real races, so paying to enter a competitive event feels natural rather than like a paywall. A free core loop keeps acquisition friction at zero, and payment happens at the moment of highest motivation — when a runner decides to compete. Event IAPs went live on Android on September 25, 2026, with iOS pending App Store review, so conversion data is just beginning.
Next: sponsored territory. Every city has a few running routes every runner knows — RunPlash turns them into a Times Square for runners, where a brand's logo sits on the zone and the revenue is shared with whoever holds it. That creates a flywheel: the more a zone earns, the harder crews fight to take and keep it, and the more attention those sieges draw, the more the zone is worth to sponsors. With real money following territory, server-side anti-cheat is what keeps that ad inventory trustworthy. Runner and crew sponsorships extend the same idea — territory and reputation become an ongoing income stream, not just bragging rights.
Design
The map is the game board, so everything else stays out of its way. A deep navy dark theme lets territory colors carry meaning at a glance: orange is yours, blue is your rivals'. The in-run screen is a deliberately minimal HUD — distance, time, contribution — readable while running. Event zones stand out with a white fill, purple border, and the event's own logo on the map, and every event ships with custom-designed rank and finisher badges.
How I built it
RunPlash is built solo in Flutter, with Firebase (Firestore, Cloud Functions, Auth, Storage) as the backend and the Google Maps Flutter SDK for the live territory map. All game-critical calculations — EXP, defense strength, siege outcomes, purchase fulfillment — run server-side in Cloud Functions so nothing can be spoofed from the client. RevenueCat handles in-app purchases on both platforms, with a webhook confirming each entry server-side. I used Claude (Anthropic) as a full-stack pair programmer throughout — Flutter UI, Cloud Functions, and Firestore security rules — since I came into this project without a Flutter/Dart background.
Challenges I ran into
GPS is messy. Phones report jittery, sometimes physically impossible speed spikes, so I built server-side anti-cheat that flags abnormal segments for review before a run counts toward territory or a leaderboard. One hard bug: the location plugin caches a single position stream app-wide, so if the map's short location-refinement stream was still open when a run started, the run silently inherited the map's settings — without background tracking — and stopped recording once the screen turned off. Finding that took real-world test runs.
Payments had their own constraints: App Store purchases can only be refunded by Apple, so cancellation had to be designed differently per platform — Android refunds are handled directly, while iOS users are guided to Apple's refund request page from inside the app.
Getting Apple's paid-apps paperwork fully activated — W-8BEN tax forms, Korean business registration and address verification, and bank account setup — in time to ship iOS in-app purchases before the deadline was its own multi-day scramble, separate from writing code.
Accomplishments that I'm proud of
Getting server-authoritative anti-cheat, RevenueCat purchases on two platforms, and a live GPS territory map working together as a solo developer — and opening registration for the first paid Event Run, HAN RIVER 10K, with custom-designed badges for winners and finishers.
What I learned
The hardest part of building a real-world game isn't the game logic — it's trusting device sensors just enough to be fun without letting them be exploited.
What's next for RunPlash
Sponsored territory and runner/crew sponsorships, AI-generated course recommendations (shape- and theme-based routes via Claude, Google Places, and Roads APIs), crew alliances, seasonal rankings, and more Event Run formats.
Built With
- anthropic
- claude
- cloud-functions
- dart
- firebase
- firebase-auth
- firebase-storage
- firestore
- flutter
- geolocator
- google-cloud
- google-maps
- google-maps-flutter
- google-play-billing
- google-sign-in
- in-app-purchase
- kakao-login
- revenuecat
- sign-in-with-apple


Log in or sign up for Devpost to join the conversation.