Inspiration
Seattle has a reputation for something called the Seattle Freeze. People are friendly, but actually turning a quick hello into a friendship can be surprisingly difficult. A lot of us want to meet new people, but there isn't always a natural way to start a conversation. Pokémon GO showed us how a game can get people out of the house and start exploring the world around them. We wondered what would happen if, instead of catching Pokémon, people had a shared reason to explore their city and connect with others. That idea became Thaw, a real-world adventure game designed to make meeting people feel more natural. Our tagline is: the world gets warmer when you show up.
What it does
Thaw turns the world around you into a game board. Places like parks, libraries, public plazas, and markets become areas where players can discover and complete quests.
Discover a quest. Find nearby adventures, from noticing something interesting at a local landmark to sharing a favorite spot with another player.
Play your way. Complete quests on your own or with a party of 2-4 people. Every social or party quest has a solo option, so players never have to approach a stranger to participate.
Get out and explore. Walk to the location and check in when you're within 120 meters.
Complete the quest and earn rewards. Submit photo evidence for verification and earn XP, level up, and collect illustrated pins.
Thaw also has an iMessage version, powered by Photon, where players can interact with quests , photos, and progress through a text conversation.
We also built a website with an interactive demo, so people can try out the experience without downloading the app.
How we built it
We built Thaw across a mobile app, an iMessage experience, and a website.
Mobile app: We used React Native and Expo (SDK 57) with TypeScript, React Navigation, Zustand for state management, and AsyncStorage to save progress. We also used react-native-maps for maps, expo-location for location services, expo-image-picker for photos, react-native-svg for graphics, and zod to validate data.
Finding places: We use OpenStreetMap's Overpass API to find real places nearby, with caching and rate limits to avoid unnecessary requests. If that isn't available, we have sample cities across five continents to fall back on. Seattle is our demo city, but the game isn't limited to Seattle.
Generating quests: Gemini generates quests based on a player's location and returns them in a structured format. We validate each quest with Zod and run it through a safety filter before it's used. If the AI returns something invalid or unsafe, we fall back to our own quest templates so players can keep going.
Verifying completion: We designed the photo verification flow around Perceptron's vision model. Since a real API key isn't always available during a demo, we also built a clearly labeled simulated verifier. It lets judges try the full process, including what happens when a submission is rejected and needs to be retried.
Building the game logic: We kept the core rules separate from the React interface. This makes them easier to test and means we can eventually reuse them on a backend.
iMessage experience: We built a Bun server using Photon 2.0 and SQLite. Players can text commands like START, QUEST, STATUS, and REMIND 30 to interact with the game. Commands have to match the expected format, so mentioning a word like "quest" in an ordinary sentence won't accidentally trigger an action. Players can also connect their chat to the app using a one-time linking code, which we store as a hash rather than in its original form.
Website: We built the website with React, TypeScript, and Vite, using a design system that matches the look and feel of the mobile app.
Math Progression
Thaw uses an XP-based progression system to reward players for exploring their surroundings and completing quests.
- Earn XP: Players earn experience points (XP) by completing quests. The base reward depends on difficulty: easy quests award 60 XP, medium quests award 90 XP, and hard quests award 130 XP.
- Get rewarded for playing together: Players earn an additional 10 XP per extra party member, capped at 30 bonus XP.
- Reward exploration: Players receive an additional 20 XP for their first visit to a location.
- Level up: Progression follows a quadratic XP curve, so each new level requires more total XP than the previous one.
The total XP required to reach level \(L\) is: $$ XP(L) = 50L(L-1) $$
We also made it so that completing the same quest more than once cannot repeatedly grant rewards. This helps keep progression fair even if players restart or regenerate their world.
Challenges we ran into
Making the idea feasible: Thaw combines exploration, social interaction, AI-generated quests, location services, and rewards. We had to turn that broad idea into a manageable experience that we could prototype during a hackathon.
Making AI-generated quests safe: AI can generate suggestions that are impractical or inappropriate for a real-world setting. We added safety rules, validation, and backup templates so unsafe quests can be rejected without blocking the experience.
Supporting different comfort levels: We wanted Thaw to encourage social connection without forcing players to approach strangers. We designed solo alternatives for social quests and considered accessibility and mobility.
Connecting multiple experiences: We built a mobile app, an iMessage experience, and a website. Keeping the game rules separate from the user interface helped us organize the project and make the core logic easier to test.
Accomplishments that we're proud of
Built a complete gameplay loop: Players can discover quests, travel to real locations, check in, submit photo evidence, earn XP, level up, and collect illustrated pins.
Made the experience adaptable: Players can explore alone or with a party of 2-4 people, with solo alternatives available for social quests.
Integrated AI with safeguards: Gemini generates structured quests based on nearby places and player context. We validate outputs and use fallback templates when generation fails.
Designed with privacy in mind: We prioritize user privacy by only accessing location while the app is in use, showing other players' locations approximately rather than precisely, and handling submitted photos carefully.
What we learned
A compelling idea needs a focused prototype: A broad vision becomes much more achievable when it is broken into a clear core loop and smaller features.
AI needs guardrails: Generating a quest is only part of the problem; the result also needs to be validated and safety-checked.
One idea can support multiple interfaces: Keeping game logic separate from the React interface makes it easier to reuse the same rules across different experiences, including mobile and messaging.
What's next for Thaw
Expand social gameplay: Improve party coordination, invitations, leaderboards, and the experience of discovering quests with friends.
Test in the real world: Gather feedback from players in Seattle and learn whether quests genuinely make it easier to explore new places and connect with people.
Grow beyond Seattle: Use OpenStreetMap data to bring Thaw to more cities while keeping quests grounded in each location.
Built With
- bun
- expo.io
- gemini
- javascript
- openstreetmap
- overpassapi
- photon
- postgresql
- react
- reactnative
- supabase
- typescript
- vite
- zod
- zustand

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