Inspiration
Getting home safely is not always as simple as choosing the shortest route. People travelling alone at night often have to make decisions using incomplete information: a road may be faster but poorly lit, quiet, or close to a recently reported incident. At the same time, crime and safety information is often fragmented across news, group chats, and social media, rather than connected to the moment someone is actually planning a journey.
Most navigation applications optimize for time and distance. They do not ask whether a route passes through areas that the community has recently identified as risky, and they usually stop helping once navigation begins.
We built Jaga around a different question: what if a navigation application could combine community knowledge, route context, and trusted people to help someone feel less alone during the entire journey?
Jaga supports Garuda Hacks 7.0's Safety track by exploring faster community reporting, contextual risk awareness, and a more coordinated response when a traveller may need help.
What it does
Jaga brings several personal-safety tools into one Android application:
1. Community safety map
Users can view and submit location-based crime or safety reports. Reports contain contextual information such as the incident category, severity, location, and time. Other users can upvote or downvote reports so the community can help validate whether the information remains useful.
The goal is not to reward the largest number of reports. Jaga is designed to prioritize reports that become useful and trusted by nearby travellers.
2. Relative-risk route guidance
After selecting a destination, Jaga can display a route and use nearby community reports as safety context. The longer-term scoring design compares route alternatives based on the severity, recency, distance, and community validation of reports near each route.
The result is relative guidance, not a guarantee. A lack of reports does not automatically mean that an area is safe, so confidence and data availability must remain visible to the user.
3. Safe Journey monitoring
When a user starts a journey, Jaga can monitor the user's live location against the selected route. If the user remains significantly off-route, Jaga displays a safety check asking whether the user is safe.
A sustained-deviation check helps avoid triggering an emergency flow because of a single inaccurate GPS reading.
4. Trusted-contact escalation
Users add at least one trusted contact during onboarding. When the user explicitly asks for help or does not respond to a safety check, Jaga's escalation flow is designed to share the situation and the user's latest available location with trusted contacts.
Users can also opt in to community assistance, allowing nearby opt-in helpers to become part of the response flow. Jaga does not claim to dispatch police or emergency services.
5. Account and safety preferences
The prototype includes authentication, profile setup, trusted-contact onboarding, helper preferences, and community-assistance settings so users can control how they participate in Jaga's safety network.
How we built it
Jaga was developed as an Android-first Flutter application using a feature-first architecture. The application is divided into modules such as authentication, map, routing, reports, journey monitoring, and profile settings. Within each feature, we separate data access, application state and orchestration, and presentation components to make the code easier to test and extend.
Frontend and state management
- Flutter and Dart for the Android application
- Riverpod for application state and reactive UI updates
- Material Design and reusable theme components for a consistent Indonesian-language interface
Map, location, and routing
- flutter_map for map rendering
- OpenStreetMap raster tiles for the base map
- latlong2 for geographic coordinates and distance handling
- Geolocator for location permissions and live GPS updates
- LocationIQ for destination search and geocoding
- openrouteservice for route generation and GeoJSON route geometry
- PolylineLayer and MarkerLayer to display routes, users, destinations, and reports
Backend and data
- Firebase Authentication for email-and-password authentication
- Cloud Firestore for user profiles, trusted contacts, preferences, and community reports
- FlutterFire for connecting the Flutter application to Firebase
Core application flow
- The user creates an account and completes their safety profile.
- The user adds a trusted contact and selects their assistance preferences.
- Jaga obtains the user's current location and searches for a destination.
- The selected coordinates are sent to the routing provider and returned as GeoJSON.
- Jaga converts the provider's
[longitude, latitude]coordinates into Flutter map coordinates and renders the route. - Community reports near the map or route provide additional safety context.
- During an active journey, accepted GPS updates are compared with the route geometry.
- A sustained deviation triggers a safety check and, when necessary, the trusted-contact or helper escalation flow.
Our risk-model architecture is based on one shared risk function so the map visualization and route evaluation cannot contradict one another. It combines overall route exposure with high-risk sections instead of allowing one dangerous segment to disappear inside an average.
Challenges we ran into
Making safety guidance honest
A route with no reports can look safer mathematically, even though it may simply have less data. We had to separate the idea of risk from the confidence of the available evidence and avoid language that could create a false guarantee.
Handling noisy GPS data
Location readings can drift, especially around dense buildings. Triggering an emergency flow after one inaccurate reading would make the application stressful and unreliable. We therefore designed the off-route flow around distance, location accuracy, and a sustained time window rather than one isolated coordinate.
Connecting multiple location services
Map rendering, live GPS, geocoding, and route generation all use slightly different data formats. One particularly dangerous detail is that route providers commonly return [longitude, latitude], while Flutter mapping libraries construct coordinates as (latitude, longitude).
Learning Flutter under hackathon pressure
Some of our team was more familiar with web development. Flutter widgets, Riverpod state, Android permissions, Gradle, Firebase configuration, and emulator issues became a very intense crash course during the event.
Scoping a responsible emergency flow
We wanted Jaga to be helpful without pretending to be an emergency service. That meant removing any misleading claim that police had been contacted and focusing the prototype on trusted contacts, opt-in community assistance, and clear user control.
Accomplishments that we're proud of
- Building an end-to-end Android prototype that connects authentication, onboarding, live location, destination search, route rendering, community reports, and safety-check interactions.
- Creating a modular feature-first Flutter architecture that can grow beyond the hackathon.
- Treating community trust as part of the product instead of displaying unverified reports as unquestionable facts.
- Designing a journey-monitoring flow that considers GPS accuracy rather than reacting to every location fluctuation.
- Preserving an honest product boundary: Jaga provides relative safety context and support, not a promise that a route is safe or that an emergency service has been dispatched.
What we learned
- In a safety product, false reassurance can be more harmful than showing uncertainty.
- Community data needs validation, recency, and confidence; volume alone is not quality.
- GPS-based logic must explicitly handle inaccurate and missing readings.
- A clean architecture matters even during a hackathon because map, Firebase, authentication, reporting, and emergency flows quickly become tightly connected.
- A strong demo is not only about showing screens. It must clearly explain the problem, the technical decisions, the limitations, and why the solution can create meaningful impact.
What's next for Jaga
Product
- Complete live route comparison and show risk confidence beside every recommendation.
- Recalculate an active journey when a new relevant report appears and offer an alternative route.
- Add stronger report moderation, anti-spam controls, edit and deletion rules, and server-side validation.
- Pilot Jaga around campuses, transit areas, and night-commuter corridors in Jakarta.
- Work with local communities and safety organizations to improve report quality and response protocols.
Safety and privacy
- Complete secure, server-controlled trusted-contact and nearby-helper notifications.
- Add rate limiting, audit logs, stricter Firestore rules, and privacy testing for sensitive reports.
- Improve stale-location indicators so contacts can distinguish a recent location from an outdated one.
- Prepare cached emergency information so third-party provider failures do not block the core help flow.
Technical
- Move provider keys and sensitive operations behind a controlled backend.
- Calibrate the risk model using larger, verified datasets rather than hand-tuned hackathon constants.
- Add automated tests for route scoring, coordinate conversion, report validation, and off-route detection.
- Improve offline and poor-network behaviour and evaluate platform-compliant background location options.
Built With
- dart
- firebase
- flutter
- geolocator
- latlong2
- locationiq
- openrouteservice
- openstreetmap
- riverpod
Log in or sign up for Devpost to join the conversation.