Short Project Summary
SUAR is an infrastructure-free, offline emergency tracking app that turns smartphones into a decentralized rescue mesh using Bluetooth Low Energy (BLE). Built for the critical "Golden Hours" post-disaster when cell networks collapse, it allows survivors and rescue teams to locate each other and navigate to safety without internet or cellular data.
Development Process & Architecture
We architected SUAR as an entirely client-side, offline-first application. The core logic runs on a lightweight React Native framework, relying on a custom 19-byte wire protocol to fit tracking data inside standard BLE advertisement packets. Our development focused on edge-case engineering: managing state via Zustand for real-time radar rendering, applying Exponential Moving Average (EMA) filters to stabilize signal noise (RSSI), and writing a custom native Android module to bypass OS-level audio/haptic restrictions. The project was built iteratively, focusing heavily on hardware testing rather than simulation.
Team Member Contributions
Anggara served as the Hacker (driving core technical implementation), Arka as the Hustler (handling strategic direction and making the pitch deck), and Dicka & Rizky as the Hipsters (shaping the product and UX design). We collaborated constantly, backing each other up without rigid barriers.
Development Tools Used
Framework: React Native, TypeScript State Management: Zustand UI/Styling: NativeWind, gluestack-ui Native Modules: Java / Android SDK (BLE & Haptics API) IDE & Testing: Android Studio, VS Code, physical Android test devices
Disclosures
AI Usage Disclosure: AI was used for code syntax debugging (specifically adjusting the Java native module structure) and refining document copywriting. All core architecture, protocol layout, and logic were written by the team. Additionally, AI was used to generate one specific visual clip within our demo video. However, all core application architecture, protocol layout, product logic, and the overall creative direction and design of the demo video were entirely conceived and executed by our team.
Copyrighted Materials:
None. All UI assets, icons, and code are original or open-source under permissible licenses. For the demo video, certain stock assets and design elements were sourced from Canva under a valid Canva Premium license, ensuring full compliance with intellectual property guidelines.
Inspiration
Natural disasters routinely destroy cell towers, knocking out communication exactly when coordination matters most. Standard safety apps break the moment internet connectivity drops. We built SUAR to ensure the smartphones already in people's pockets can form their own ad-hoc network, helping families and rescuers connect when the grid fails entirely.
What it does
SUAR broadcasts a user's presence and GPS coordinates via Bluetooth Low Energy (BLE) requiring zero cellular data, servers, or account sign-ups. The app translates nearby signals into a heading-up, rotating radar screen showing relative distance and direction.
Key features include:
Assembly Points: Any user can broadcast their phone as a safety beacon for others to rally toward.
Mesh Relay: Signal passes through nearby devices, extending discovery beyond standard Bluetooth range.
Accessible Alerts: Voice guidance and distinct haptic vibrations are on by default to guide blind or Deaf users safely.
Offline Guides: Built-in disaster mitigation manuals match the user's territory using local GPS data, completely offline.
How we built it
The app is built using React Native and TypeScript. We compressed the data payload into a tight 19-byte wire protocol so an entire presence frame fits into a single BLE packet. Signal fluctuations are smoothed out using an EMA filter with built-in hysteresis to keep the UI steady. To prevent mesh network congestion, we implemented a time-bounded cache to filter duplicate packets. The UI calculates positions locally using basic East/North vector projections, while a built-in simulation engine lets us test multi-node scenarios on a single device.
Challenges we ran into
Data compression was tight; packing IDs and coordinates into 19 bytes left no room for error. Our biggest hurdle was Android’s "Silent" mode, which natively suppresses system haptics. Because haptics are critical for accessible navigation in a disaster, we wrote a native Java module that forces emergency vibrations using the USAGE_ALARM attribute, bypassing the OS restriction. Testing on an old, low-end tablet lacking a magnetometer or Play Services also forced us to build highly resilient sensor fallbacks.
Accomplishments that we're proud of
We successfully achieved a 100% infrastructure-free tracking system that works reliably on real, imperfect hardware. Accessibility features aren't tucked away in a menu; they work straight from the first launch. We are especially proud of catching and patching the deep OS-level silent-mode vibration bug before it could fail someone in a real crisis.
What we learned
Simulators hide real-world failure points. Issues like missing hardware sensors or native OS permission quirks only surface when testing on physical, low-end devices. We also learned that safety-critical tools must perform failure-mode testing on accessibility features to guarantee they work under any user settings.
What's next for SUAR
Our next steps are achieving full iOS feature parity and arranging real-world field tests with local disaster response agencies like BNPB. On the technical roadmap, we aim to optimize battery consumption for long-term outages, expand localized mitigation libraries, and add cryptographic signatures to prevent malicious signal spoofing within the mesh network.
Built With
- android
- android-vibrator-api
- bluetooth
- eslint
- gluestack-ui
- jest
- kotlin
- nativewind
- node.js
- react
- react-native
- react-native-ble-advertiser
- react-native-ble-plx
- react-native-compass-heading
- react-native-geolocation-service
- react-native-gesture-handler
- react-native-permissions
- react-native-reanimated
- react-native-svg
- react-native-tts
- react-navigation
- tailwindcss
- typescript
- yarn
- zustand
Log in or sign up for Devpost to join the conversation.