Ocean Sentinels
Coastal hazard reporting and response for web and Android, with a custom Bluetooth mesh that relays reports from phone to phone when cell networks are down.
In a cyclone or a tsunami, cell towers, internet and power fail first. The emergency systems people are told to use all need the internet.
A report that finds its own way out
Report
A GPS-tagged hazard report with photos, across 10 hazard types, from any phone.
Relay
With no signal, phones pass the report hop to hop over Bluetooth. Each one stores it and carries it until somebody reaches a connection.
Verify
Authorities move each incident from Pending to Verified, In Progress, and then Resolved or False Alarm.
Respond
Rescue teams and the public see live maps, dashboards and push alerts, with weather data from WeatherAPI and the India Meteorological Department.

The public web app, live at sih.gowshik.in.
The mesh, in numbers
- Range per hop
- about 400 m on Bluetooth Coded PHY
- Peers per phone
- up to 7
- Fragment size
- 469 bytes
- Duplicate filter
- SHA-256, 10,000-message cache, 72-hour lifetime
- Roles
- 4: Public, Authority, Rescue Team, Admin
- Android app
- 20+ screens
- My commits
- 121
Decisions I would defend in an interview
Range before speed
The mesh uses Bluetooth Coded PHY at S=8 for distance and falls back to 1M PHY on phones that lack it.
Store, carry, forward
A report waits on the device and uploads on its own the moment any phone in the chain gets connectivity.
Deduplicate twice
Once on the device with a SHA-256 cache, and again on the server by mesh message ID, so a report that arrives by five routes is counted once.
One backend, four roles
Public, Authority, Rescue Team and Admin share one API, with the incident lifecycle enforced on the server.
Built with
- Backend
- FastAPI, SQLAlchemy 2 async, PostgreSQL, Redis, JWT, AWS S3
- Android
- Kotlin 2.0, Jetpack Compose, Hilt, Room, Retrofit, Firebase, Mapbox
- iOS, in development
- Swift 5.9, SwiftUI, CoreBluetooth
- Web
- Vanilla JavaScript, 11 pages