-
-
Choose bike, walk or run and hit Start. Your sticker avatar is your live marker on the map.
-
Track distance, time and activities over 12 months, filtered by run, walk or bike, plus full history.
-
Team up in Group Challenges: every group workout counts toward a shared tree goal and the ranking.
-
Your Garden: seeds from workouts and ads grow into real trees, each with a certificate and CO2 offset.
-
Your profile: avatar, sticker collection, community planting alerts, and how we plant real trees.
-
Unlock illustrated nature stickers as you move. Tap one to make it your avatar and map marker.
-
Turn any workout into a Stories or Square post with your route, stats and illustrated backgrounds.
-
The Global Forest counts every tree planted in Run4Tree, with a feed where people celebrate new trees.
-
Full transparency: each tree funds a real Tree-Nation project, like Plant to Stop Poverty in Tanzania.
-
Mt. Elgon, Uganda: 116 local jobs across 39 nurseries. Every project links to its Tree-Nation page.
-
Short lessons on forests, global warming and CO2, so users understand why every tree matters.
Inspiration
Every year the heat waves get worse, the floods get closer, and the fires make the news more often. We kept feeling the same discomfort: watching climate change happen and not knowing what to actually do about it. Big solutions feel out of reach, and one-off donations are easy to forget.
So we asked a different question: what if doing something about it didn't require a new habit, just the ones we already have? We go for a run, a walk, a ride almost every day. If that routine could plant a tree, taking climate action would be as ordinary as lacing up your shoes, and it would happen again tomorrow, and the day after.
The tree had to be real, planted in the ground and backed by a certificate anyone can check, not a virtual badge. A small, daily, verifiable action that adds up.
What it does
Run4Tree is a running and workout tracker where your exercise grows real trees.
- Track a run, walk or ride with GPS, a map, and the weather for your next session.
- Grow a personal garden. The ads around each workout earn seeds. When you have enough seeds, a real tree is planted by Tree-Nation, and you can open its public certificate, with the species and the planting site, right from the app.
- Group challenges. Create or join a challenge with friends, climb a shared ranking by working out, and grow one forest together: in a group workout, the seeds go to the group.
- Global forest feed. A live wall where the community celebrates the trees it has planted.
- Collectible stickers that reward consistency.
How we built it
- Flutter app with Clean Architecture (domain / data / presentation per feature), local history in Drift/SQLite, and a localization-ready UI (English).
- RevenueCat Ads (served by AdMob) is the only monetization: no paywall, no subscription. Every ad lifecycle event goes to RevenueCat's ad tracker, and rewards are confirmed through RevenueCat's server-side verification.
- Firebase: anonymous auth, Firestore for challenges and the feed, and Cloud Functions (TypeScript) for everything that spends money or talks to third parties.
- Tree-Nation API for planting, called only from the server. The API key lives in Secret Manager and never ships in the app.
- OneSignal for pushes, sent by the server when something real happens.
- Sentry for crash and critical-flow monitoring.
Challenges we ran into
- Every ad turns into real money spent. A fake or replayed ad reward doesn't cost us game coins, it costs a real tree we pay for. The RevenueCat SDK is what made this safe: seeds are only credited after RevenueCat's server-side reward verification, and each verification ID works as a one-time receipt, so the same ad can never be counted twice.
- Spending real money safely. The first version called Tree-Nation straight from the phone, with the key inside the APK. We moved planting to Cloud Functions with a daily cap, a spending cap per challenge, a queue that retries failed plantings, and an admin dashboard for plantings that need a manual fix. Every earned tree becomes a planting order before Tree-Nation is called, so a third-party error never loses a tree.
- Security of shared data. Group challenges are writable by many users. We hardened the Firestore rules and validated them against 56 scenarios in the emulator.
- Honest economics. A tree costs more than the few ads around one workout earn. During launch, we subsidize the difference on purpose; the long-term target is 80% of ad revenue to trees and 20% to run the app.
Accomplishments that we're proud of
- A monetization loop users can see and verify: ad → verified reward → seed → tree → certificate.
- Push notifications triggered by real-world events, not timers.
- A production-grade backend for a weekend-sized app: secrets management, spending caps, retries, audit trail, monitoring.
What we learned
Ads don't have to feel like a tax on the user. When the user can see exactly what an ad pays for, the ad stops being an interruption and becomes part of the product. We also learned that the hard part of an "impact" app is not the feature, it is the proof.
What's next for Run4Tree
- Tune the economics towards the 80/20 split as real ad yield data comes in.
- Real accounts (today, identity is anonymous) so gardens survive a phone change.
- Company and school challenges: a team's forest as a shared goal.
- Richer tree pages: growth updates and photos from the planting sites.
Built With
- admob
- cloud-firestore
- dart
- drift
- firebase
- firebase-auth
- firebase-cloud-functions
- flutter
- google-cloud-secret-manager
- google-maps
- onesignal
- openweathermap
- revenuecat
- revenuecat-ads
- sentry
- tree-nation-api
- typescript
Log in or sign up for Devpost to join the conversation.