Inspiration
Walking around Augustana College, we kept noticing how many short trips happen by car. Quad to dorm. Gerber to Old Main. Trips where finding parking takes longer than just walking.
At the same time, we had researched how universities across the country are spending serious money on carbon offsets that never actually touch campus life. Augustana spends $10k a year on distant forest credits in Guatemala. UIUC sits on a $1.4 million carbon-credit fund while still planting only ~300 trees a year. Duke dropped $4 million on offsets in a single year. The entire UC system walked away from a $20–30 million annual offset bill because the credits weren’t reliable.
We asked a simple question: What if a campus could actually see its own carbon footprint ticking up in real time, and what if students got rewarded for the walks they were already capable of making? That question turned into EcoKinetic, a "Proof of Sweat" transit game where real steps earn real EcoCoins and directly help universities redirect the money they’re already spending on offsets straight into student pockets.
## What it doesEcoKinetic is a gamified campus transit app with two game systems that share one wallet.
The Map tab is a Gemini-powered eco-route planner. You type a destination, and Gemini analyzes weather, terrain, and distance to suggest a multimodal route using walking, biking, or the campus shuttle. Accept the bounty, follow turn-by-turn directions, and earn coins when you arrive.
The Grid tab is a live campus emissions simulation. Six buildings on campus act as nodes, each accumulating emissions debt every five seconds. When a node crosses the threshold, it drops a bounty alert. You tap Intercept, physically walk within 50 meters of the node (verified by GPS and at least 50 pedometer steps), then tap Claim Reward. The node's debt drops, coins land in your wallet, and a confetti celebration plays.
Both systems are designed to be anti-spoof. GPS proves you are there, and the pedometer proves you actually moved to get there. The same model scales to any campus, from Augustana’s 2,500 students to UIUC’s 60k, Duke’s 17k, or the UC system’s 301k.
## How we built it
- We built the whole thing in React Native with Expo and Expo Router, using TypeScript throughout. State lives in Zustand, split cleanly into one store for the Map system and another for the Grid. Styling is NativeWind with Tailwind, with a warm paper color palette and forest green accents.
- Maps are handled by react-native-maps with a custom JSON map style we tuned for a "Frozen Mint" aesthetic. GPS comes from expo-location polling every two seconds, and step counting comes from expo-sensors Pedometer, which reads from CoreMotion on iOS so it is not fooled by phone shaking. Glassmorphism cards use expo-blur, and every animation is driven by the React Native Animated API.
- The AI layer is Google Gemini 2.5 Flash Lite, called as a raw fetch request so we could keep the bundle small. Road geometry comes from the public OSRM server, and we wrote our own Haversine helper for proximity math.
- For the live demo, we built a simulation mode that teleports the user dot, pans the camera, and walks it toward a target node, so the full gameplay loop can be shown on stage without physically walking across campus.
## Challenges we ran into
- The public OSRM server only supports the car profile even when you ask for foot routes, which broke our walking polylines on the Grid. We worked around it by drawing a clean dashed straight line instead.
- We hit a nasty flicker bug where the Claim Reward button would appear and instantly vanish the moment steps crossed 50 at the same time as distance entered range. We fixed it by pre-loading steps to 60 at simulation start and adding a short tap-armed grace period so a finger already on the screen cannot accidentally fire the button.
- The celebration modal kept getting dismissed by Android back button and iOS swipe gestures mid-animation. We locked it down so it can only close via the Continue button.
- Our simulated walker dot was invisible at first because showsUserLocation on react-native-maps only follows the real operating system GPS. We swapped it for a custom Marker bound to our own coordinate state.
- We also fought stale TypeScript diagnostics that flagged a dozen Lucide icons as missing even though they exist in the package and render correctly. After verifying at runtime, we shipped through it.
- Finally, double-tapping Simulate caused overlapping timers. We tracked both the interval and the pending timeout in refs so cleanup always cancels both.
## Accomplishments that we're proud of
- We are proud that the reward loop is genuinely anti-spoof. You cannot earn coins by sitting still and tapping. The combination of GPS and pedometer forces real motion in the real world.
- We are proud of how alive the Grid feels. Emissions tick up, bounties drop, and the map responds with glow rings and walking hints. It reads more like an event in an MMO than a static dashboard.
- We are proud of the visual identity. Warm paper background, forest green, amber, and coral. It looks intentional and does not feel like a template.
- And we are proud that the on-stage demo works in about fourteen seconds, start to finish, without the presenter leaving the podium.
## What we learned
- Public infrastructure has fine print. Always check the profile flags before you commit your entire route layer to a free server.
- Pedometer is not the same as accelerometer. Using the operating system step API gave us trustworthy counts that survive phone shaking, which turned out to be essential for the Proof of Sweat idea to mean anything.
- For React Native animations under Expo Go, the boring choice often wins. The plain Animated API beat the fancier options on reliability, and reliability is what mattered in the final hours.
- Splitting two game systems across two Zustand stores with a shared wallet forced us into clean boundaries we might have skipped under hackathon pressure. We were glad later that we did not cut that corner.
## What's next for Eco
- We want to plug in real Augustana shuttle data so the shuttle leg of Gemini routes reflects the actual bus position, not a placeholder.
- We want leaderboards and guilds. Dorm versus dorm carbon competition. Greek-life rivalries on the Grid.
- We want a real coin sink. Partnering with campus dining and the bookstore so EcoCoins redeem for coffee, snacks, and merch gives the currency actual weight.
- We want to replace the public OSRM server with a self-hosted routing instance so the walking profile works properly on the Grid.
- We want to generalize the node, debt, and bounty system beyond Augustana. The pattern fits any campus. We already have the numbers showing UIUC can easily redirect part of its $1.4M fund, Duke can shift portions of its $4M offset budget, and the UC system (Berkeley, UCLA, UCSD) has hundreds of millions in redirected efficiency savings ready for student incentives.
- And eventually an Apple Watch companion, so passive step credit and haptic bounty alerts happen on the wrist instead of the phone.
Built With
- android
- coremotion
- dotenv
- eas
- expo-blur
- expo-go
- expo-location
- expo-router
- expo-sensors
- expo-tunnel
- expo.io
- git
- github
- google-gemini
- gps
- ios
- javascript
- json
- lucide-react-native
- nativewind
- npm
- osrm
- pedometer
- react
- react-native
- react-native-animated-api
- react-native-maps
- react-native-vibration
- tailwind-css
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.