Inspiration
We noticed that a lot of travel apps just act as glorified itineraries or booking tools. There was nothing that actually gamified the experience of exploring a new city. Traveling often feels like passively checking boxes rather than really engaging with the environment. We wanted a way to make discovering local food, culture, and landmarks feel like a global scavenger hunt. That is how Planetary Presence came to be.
What it does
Planetary Presence turns global exploration into a competitive experience. Users can browse location-based quests categorized by Nature, Culture, Food, and Landmarks. When you are in the right city, you can complete a quest by uploading photo or video proof. The app assigns dynamic point values based on quest rarity and difficulty. Players earn points, tag friends they explored with, and compete on local, national, and global leaderboards to establish their presence.
How we built it
We built the mobile application using Flutter and Dart, allowing us to deploy a responsive UI across platforms. For the backend, we went with Supabase. We leveraged PostgreSQL to handle relational data and map out quests by city. Supabase Auth handles our user onboarding, including Google OAuth integration, while Supabase Storage manages the photo and video uploads required for quest completions. We also utilized fl_charts to visualize user activity and leaderboard statistics.
Challenges we ran into
Handling media uploads reliably was a significant hurdle. We had to build a custom media upload service to manage camera captures versus gallery selections, enforce file size limits, and correctly handle MIME types for both images and videos. We also ran into strict PostgreSQL database constraints. For example, ensuring our app state perfectly matched the database schema for required fields like media types and city identifiers caused a few routing and submission bugs. Debugging the asynchronous state between local file picking and cloud storage uploads definitely tested our patience.
Accomplishments that we're proud of
We are incredibly proud of the robust submission system we built. Users can seamlessly take a video or photo, tag friends, and upload it all in one fluid motion without the UI hanging. Getting the relational database structure right so that points automatically aggregate from individual completions up to city, state, and global leaderboards is something that took a lot of planning but works flawlessly in production.
What we learned Working closely with Supabase taught us a lot about writing strict SQL constraints and structuring relational data securely. On the frontend, we leveled up our Flutter skills, specifically around managing asynchronous UI states during heavy network operations like video uploads. We also learned how to better structure our widget trees and abstract our services to keep the codebase modular and maintainable.
What's next for Planetary Presence
We plan to implement a community voting system where users can propose and approve new quests for their home cities. We also want to add offline caching so users traveling without reliable cellular data can still view local quests and queue up their completion uploads for when they find Wi-Fi. Expanding the interactive map with custom clustering algorithms for high-density areas is also high on the priority list.
Built With
- dart
- flutter
- postgresql
- supabase
Log in or sign up for Devpost to join the conversation.