Inspiration

I wanted to build something someone could use when they’re stressed and can’t get online. Open the app, press one button, and ask people nearby for help. That’s the idea behind Beacon.

What it does

Beacon lets you send an SOS with optional details about what happened and where you are. It’s designed to pass requests between nearby phones over Bluetooth and keep them saved when connections drop.

A volunteer can offer help, and you can accept. The app shows whether your request is still waiting, has reached another phone, or has a confirmed volunteer.

How we built it

I used Expo and React Native for the app, with Swift and Kotlin handling Bluetooth. Requests are stored locally, and the app includes a UW campus map that doesn’t need downloaded tiles.

I also built a backend for incident history and replay. I used AI heavily for implementation, debugging, and tests, then worked through the problems that showed up while building and running the app.

The code is on GitHub.

Challenges we ran into

Getting the app onto an iPhone took longer than expected because of signing and device setup.

One annoying bug stopped SOS requests because iOS returned a location timestamp with decimal places, while the message format expected a whole number. That tiny mismatch broke the main button. We fixed it and added tests so invalid optional location data wouldn’t stop someone from sending a request.

Accomplishments that we're proud of

  • Installed Beacon on real iPhones.
  • Built both iOS and Android versions.
  • Passed 50 automated tests, including real database checks.
  • Tested the SOS, map, cancellation, and history flow in the simulator.

Seeing the app open on an actual phone was probably the best moment.

What we learned

Building successfully and working correctly are different things.

Actually tapping through the app caught a bug that earlier checks missed. I also learned how much care goes into handling messages that arrive late, arrive twice, or arrive after a phone reconnects.

What's next for Beacon

Next is testing Bluetooth relaying across multiple real phones: walking out of range, reconnecting, restarting the app, and checking whether requests and confirmations make it through.

The relay code is built. I want to see how it holds up outside the controlled tests.

Share this project:

Updates

Submission history