Inspiration
I wanted to build more than just a standard CRUD application; the goal was to create a location-aware companion that interacts dynamically with both the real world and AI-generated contexts. The inspiration came from the idea of being restricted to walking in my yard for safety and logistical reasons which led me to blending local exploration with "virtual travel". This will allow someone to learn about their own neighborhood or explore a route halfway across the globe, all guided by a smart, contextual narrator.
What it does
Ariadne is an AI-powered walking companion that transforms everyday walks into interactive experiences.
Dual Navigation: Users can use "Free Roam" to track their physical walks via live GPS, or "Route Mode" to load a path anywhere in the world and virtually walk it.
Contextual AI: It generates live, location-specific historical facts and commentary based on the user's exact coordinates.
Walk History: It automatically tracks distance and duration, saving any walk over 10 meters to the device's local storage.
How we built it
The application is a cross-platform mobile app engineered using Flutter and Dart. To keep it lightweight and free of proprietary billing constraints, I built using an entirely open-source mapping stack:
Maps & UI: flutter_map paired with OpenStreetMap (OSM) tiles.
Routing & Geocoding: The Open Source Routing Machine (OSRM) API for pathfinding and the Nominatim API for translating addresses into coordinates.
Hardware & Storage: The geolocator package interfaces with native GPS sensors, and shared_preferences handles local data persistence.
For the interface, I build a custom, minimalist 'Glassmorphism UI'. It utilizes sleek grey glass effects that float cleanly over the map, giving a clean, modern feel.
Challenges we ran into
Building an app reliant on real-time hardware sensors introduced messy edge cases:
The "Teleportation" Bug: When a phone's GPS chip initializes, it often briefly returns a default (0,0) coordinate or experiences massive location spikes before locking onto satellites. This hardware noise corrupted walk histories with fake 6,000-kilometer jumps.
Strict Geocoding Failures: Nominatim is a highly literal geocoder. Searching for a specific address would fail entirely if the database only had the street center mapped, breaking the routing engine.
Physical vs. Virtual State Clashes: When testing the "Virtual Travel" feature (e.g., simulating a walk in Paris while physically sitting in Johannesburg), the phone's actual GPS would fire updates, fighting the simulation and snapping back to the physical location.
Accomplishments that we're proud of
Physics-Based GPS Filtering: I implemented a sanity check in the location stream. The app calculates the distance delta; if the previous location was exactly (0,0), or if the distance jumps by more than 200 meters in a fraction of a second, the app updates the visual pin but strictly ignores the distance calculation.
Fuzzy Fallback Engine: To fix the geocoding failures, I built a custom retry engine within the RouteService. It intercepts API errors and runs a list of string manipulations, automatically swapping common abbreviations (like "St" to "Avenue") and stripping leading house numbers via RegEx until it successfully resolves.
Decoupled State Management: If a loaded route is remote (threshold > 2km away), the app pauses the visual GPS snapping to let the simulation run smoothly on screen, while keeping the GPS listener alive in the background to credit any actual physical steps taken to the user's total distance.
What we learned
Hardware is tricky: Real-world sensors are noisy and unpredictable. You cannot trust raw GPS telemetry without physics-based filtering logic on top of it.
Open-source requires resilience: Free APIs like Nominatim and OSRM are powerful, but they lack the "plug-and-play" aspects of some paid SDKs.
State management: Bridging the gap between physical hardware events and simulated states requires strict decoupling to prevent logic loops and UI glitches.
What's next for Ariadne.ai
- Background Location Tracking: Implementing persistent background services so users can lock their phones and keep tracking their physical walks without keeping the screen on.
- Sharing: Allowing users to export their favorite generated routes and AI commentary snippets to share.
Built With
- android
- android-studio
- dart
- elevenlabsapi
- flutter
- gemini-ai-api
- geolocator
- ios
- nosql
- openstreetmap
- osrm
Log in or sign up for Devpost to join the conversation.