Atlas Inspiration 🌐
College life moves fast — and eventually, every campus starts to feel… repetitive. The same cafés. The same study spots. The same “what do you wanna do?” conversations that go nowhere.
Atlas was born from that feeling.
We wanted a way to rediscover places through people, not algorithms alone. To capture the quiet study corners, late-night food runs, spontaneous side quests, and moments that made ordinary locations feel meaningful. Atlas helps students find inspiration again — not just by showing where to go, but by showing why those places mattered to others.
Our goal is simple: to help students build stronger connections, explore with intention, and leave behind stories in every corner of their world.
What it does 💡
Atlas is a location-based memory map where users pin moments to real places using photos, moods, and ratings.
Each pin is more than a marker — it’s a snapshot of how someone felt there.
By exploring the map, users can: -Discover where their friends studied, ate, relaxed, or explored -See the emotions and memories tied to each location -Find new places through shared experiences instead of generic recommendations
Over time, Atlas becomes a living archive of collective memories — a map shaped by people, not ads.
Core Features 🔨
- Map-Based Discovery — interactive 2D map you can pan and zoom to explore locations
- Pin Creation — capture moments with photos, description, mood tag, and star rating
- Photo Capture — take photos directly in-app or upload from library
- Mood Selection — tag pins with emotions (happy, nostalgic, chill, energetic, peaceful, adventurous)
- Star Rating System — rate locations 1-5 stars
- Pin Details View — tap any pin on map to see full details (photo, description, mood, rating, coordinates)
- Firebase Backend — cloud storage for pins, photos, and user data
- User Authentication — login/signup (currently anonymous, can be expanded)
- Real-time Pin Display — pins appear on map as they're created
- Bottom Navigation — 5-tab navigation (Map, Chat, Create Pin, Friends, Profile)
- Geolocation — auto-detects user's current location
- Image Storage — uploads photos to cloud storage
- Smooth Map Performance — optimized panning and zooming without lag
- AI Recommendation Chatbot — Gemini-powered AI that analyzes your star ratings across all pinned locations and recommends places you'll love based on your preferences and past ratings
How we built it 💻
Atlas is built using React Native with Expo, allowing us to rapidly prototype and ship a polished iOS experience. We used Expo Router for navigation and Zustand for lightweight, scalable state management.
The interactive map is powered by react-native-maps with Google Maps API, while Firebase handles backend services including Firestore, Storage, and Authentication. Users capture moments using Expo Camera, upload photos to Firebase Storage, and tag each pin with location data, moods, and ratings.
To make discovery smarter and more personal, we integrated the Google Gemini API, powering an AI chatbot that recommends new places based on a user’s past ratings and emotional patterns.
TypeScript, careful optimization, and thoughtful architecture ensured smooth performance across the entire app.
Challenges we ran into ❌
Dependency Conflicts and Environment Inconsistencies: Upgrading to Expo SDK 54 introduced compatibility issues with react-native-maps and other dependencies. Different team members had different versions of Node.js, React, React Native, and Expo installed locally, meaning the app worked for some but crashed for others. We had to standardize Node versions and lock all dependencies in package-lock.json to ensure consistency across the team.
React Native and Expo Go Instability: React Native and Expo Go proved finicky and unpredictable. Metro bundling would fail mysteriously, Expo Go would cache old code despite clearing it, and small changes would sometimes trigger cascading errors. We learned that a full restart of the development server, clearing cache, and reinstalling node_modules was often necessary.
Map Performance and State Management: Initially, the map lagged significantly when rendering pins and handling user interactions. We discovered that onRegionChange was firing constantly during panning, triggering excessive state updates. Switching to onRegionChangeComplete solved this by only updating state when the user finished dragging, resulting in smooth, responsive map interactions.
Firebase Configuration: Setting up Google Maps API keys for iOS required navigating Google Cloud Console, enabling the correct APIs, and properly configuring the keys in app.json. Getting authentication to persist across app sessions without AsyncStorage took trial and error.
Navigation Architecture: We initially built with Expo Router but encountered conditional rendering issues that made the app crash unexpectedly. Rather than switching frameworks mid-project, we debugged the root causes, fixed the routing logic, and got it working reliably.
Geolocation Permissions: Handling iOS location permissions required careful management of Expo Location's permission APIs, including fallback logic for when users deny access and graceful error messaging.
Real-time Data Sync: Coordinating real-time updates from Firebase while managing local state proved tricky. We had to prevent infinite loops and duplicate data fetches through careful effect dependencies and proper cleanup.
Team Collaboration and Merge Conflicts: Since all the main functioning files like AppContainer.tsx, AIRecommender.tsx, and MapOnlyScreen.tsx were being actively modified by multiple team members simultaneously, we constantly ran into merge conflicts. We had to communicate frequently about who was working on what, stash changes strategically, and carefully resolve conflicts to ensure one person's work didn't overwrite another's progress.
Despite these obstacles, each challenge taught us something valuable about React Native development and collaborative engineering :)
Accomplishments that we're proud of 🎊
Building a Fully Functional Map-Based Discovery App: We successfully integrated Google Maps with real-time pin rendering, smooth panning and zooming, and geolocation tracking. The map is fast, responsive, and handles multiple pins without lag. Getting this working across the entire app stack felt like a major win.
Seamless Photo Capture and Upload Workflow: Users can capture moments directly from their camera or upload from their library, and photos instantly sync to Firebase Storage with proper metadata. The entire flow from camera to cloud to map display is smooth and intuitive.
AI-Powered Recommendations: We integrated Google Gemini API to deliver personalized place recommendations based on user ratings and moods. The chatbot interface our teammate built is polished and interactive, making it feel like talking to an actual intelligent assistant.
Real-Time Data Synchronization: Firebase Firestore keeps pin data in sync across users in real-time. When one user creates a pin, others see it instantly on their maps. This was surprisingly tricky to get right but incredibly rewarding when it all clicked.
Collaborative Team Development: Despite merge conflicts and environment inconsistencies, we managed to coordinate work across multiple team members modifying the same files simultaneously. We built a solid foundation that multiple people could iterate on without breaking things.
Complete User Experience: From signing in, to exploring the map, to creating pins with rich metadata like mood and rating, to discovering recommendations through the AI chatbot. Every piece of the app works together cohesively, creating a genuine product that feels polished and intentional.
Solving Real Technical Challenges: Debugging the map performance issue, fixing Expo Router rendering, standardizing dependencies across the team, and resolving Firebase configuration issues taught us problem-solving skills that go beyond just writing code.
We're proud that Atlas went from concept to a working, feature-rich iOS app in less than 36 hours.
What we learned 🤭
React Native Development is Powerful but Requires Discipline: Building for mobile with React Native let us ship quickly across platforms, but it demands careful attention to performance optimization and state management.
Dependencies Matter More Than Expected: Version consistency across a team is critical. We learned the hard way that mismatched Node.js, React, and Expo versions can make debugging nearly impossible. Locking dependencies and documenting environment setup should be done from day one.
Real-Time Data Comes with Complexity: Firebase's real-time capabilities are powerful but require thoughtful architecture to avoid infinite loops and duplicate updates. We learned to be intentional about effect dependencies and data fetching patterns.
Communication and Structure Prevent Conflicts: Working on the same files simultaneously created constant merge conflicts. We learned that frequent communication about who's working on what, clear file ownership, and established coding conventions are essential to collaborative development.
Expo and React Native Are Finicky: Despite being great frameworks, they require patience and sometimes unintuitive debugging. Clearing caches, restarting servers, and reinstalling dependencies sounds simple, but it's often the solution to mysterious errors.
Geolocation and Permissions Are Platform-Specific: iOS location handling has its own quirks that web development doesn't prepare you for. Testing on actual devices and understanding platform-specific permission flows is essential.
Building Atlas taught us that shipping a real product is fundamentally different from building demo projects. It requires attention to detail, team coordination, and persistence through frustrating technical obstacles.
What's next for Atlas ✈
Advanced AI Recommendations: We want to expand the Gemini integration to learn from user behavior over time. Rather than just recommending based on ratings, the AI should understand patterns in the types of places users visit, the moods they tag, and even the songs they associate with locations to deliver truly personalized suggestions.
Offline Support: Currently Atlas requires a live connection. We're exploring local caching and offline pin creation so users can pin moments even without internet and sync when reconnected.
Android Support: We built for iOS first, but Atlas deserves to reach Android users too. We'll expand platform support once we've solidified the core experience.
Recommendation Analytics: Building dashboards where users can see their own patterns, like "you visit coffee shops most on weekends" or "your highest-rated locations are all near campus." This adds a reflective layer to the app.
Performance at Scale: As we add more pins and users, we'll need to optimize Firestore queries with better geohashing and implement pagination to handle thousands of pins efficiently.
Built With
- expo-router
- expo.io
- exposdk
- firebase
- gemini
- google-cloud
- node.js
- react-native
- react-native-maps
- typescript
- zustand






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