Inspiration

Van life and solo travel offer incredible freedom, but they often come with two major downsides: isolation and safety risks. We noticed that existing apps fragmented the experience—dating apps for connection, forums for advice, and maps for parking. We wanted to build Atlas to solve this by creating a single "Digital Co-Pilot." Our mission was to blend the social discovery of a dating app with the safety of a verified community network, ensuring that no matter where you are, you "Never Roam Alone."

What it does

Atlas is a unified platform for the modern nomad. It connects travelers based on their route, vehicle type, and lifestyle.

  • Discovery: A "co-pilot" finder that lets users swipe to connect with others nearby for dating or friendship.
  • Community: A location-based feed where users can share tips, host campfires, and organize caravans.
  • Safety: A real-time map showing verified users, featuring an SOS Beacon that alerts nearby travelers if you break down or feel unsafe.
  • Atlas AI: An integrated AI travel assistant that helps plan routes and offers advice directly in the chat interface.

How we built it

We architected Atlas as a native iOS application using SwiftUI and Firebase, designed around a modular Actor-based service layer.

  • Frontend: We used pure SwiftUI with the MVVM pattern. Dependency injection passes services like AuthenticationModel and LocationManager into the environment, ensuring a clean separation of concerns.
  • Backend: Firebase Firestore handles real-time data syncing, while Cloud Functions manage heavy logic like user verification. We used RevenueCat to handle subscriptions for premium features like advanced filters.

Challenges we ran into

  • The "Compiler Timeout": Our primary DatingView became so complex with gestures and subviews that we hit the infamous "The compiler is unable to type-check this expression in reasonable time" error. We solved this by aggressively refactoring the UI into smaller, distinct @ViewBuilder functions.
  • Gesture Conflicts: We faced a "double scroll" issue where the vertical drag for profile details conflicted with the horizontal drag for swiping cards. We fixed this by implementing a custom SimultaneousGesture handler and locking the scroll state during animation sequences.
  • Dark Mode Visibility: Implementing our signature "Glassmorphism" UI meant that text inputs often disappeared in Light Mode. We had to implement conditional background materials (.ultraThinMaterial vs .systemBackground) to ensure accessibility across all themes.

Accomplishments that we're proud of

  • The "Glass" UI: We achieved a stunning, modern aesthetic that feels native to iOS but distinctively "Atlas," using heavy usage of material blurs and custom transitions.
  • Real-Time Safety: Successfully implementing the SOS feature to push notifications to users within a specific radius was a technical hurdle that now adds real value to the community.
  • Seamless AI: We integrated the Gemini API so smoothly that chatting with "Atlas AI" feels just as natural as chatting with a human match.

What we learned

  • Modern State Management: Transitioning to SwiftUI's new @Observable macro simplified our data flow significantly compared to ObservableObject, but required careful handling of actor-isolated properties.
  • Optimization: Building a live location feature taught us the importance of batching Firestore updates to preserve battery life while maintaining accuracy.
  • User Flow: We learned that paywalls shouldn't just be "blocks"—they need to be integrated into the user flow (e.g., unlocking specific map filters) to feel valuable rather than intrusive.

What's next for Atlas: Travel Together

  • Offline Mode: Since van lifers often lose signal, we plan to implement robust local caching using SwiftData so the app remains functional off-grid.
  • Crowdsourced Verification: We want to expand the map to allow users to vote on the safety of parking spots, creating a "Trust Score" for every location.
  • Trip Planning: Integrating a feature to let users "sync" their future routes and see who they will cross paths with next week, not just who is nearby now.

Built With

Share this project:

Updates