beacons Privacy Policy

Last updated September 2026

Short version: no accounts, analytics, tracking, or automatic detection uploads. Your detections stay on your board and phone unless you deliberately export or contribute them. The app uses the network to load map tiles, check for firmware updates, and download the known-ALPR map layer, which is on by default and can be switched off in the map layers panel.

What the app does

beacons is a companion app for the soyboi beacon board and the OUI-Spy detection boards. It connects to the board over Bluetooth and shows the public radio signals that nearby devices already broadcast.

Bluetooth

Bluetooth is used only to connect to your own detection board. The app receives detections and status from it, sends settings you choose, and can send your current location fix over the encrypted local link so the board can geotag detections. The app does not connect to or control nearby detected devices.

Location

If you grant location access, your approximate position is used to pin detections on the map and can appear in Log CSV and GPX exports. Your phone also sends its current fix to your own board over the encrypted local Bluetooth link. The board holds that fix in memory, so a restart discards it, and it stops using the fix once it is about 18 hours old. Hits it records while your phone is away can carry a position for that long, and hits recorded after that carry no position at all. The one place a fix from your phone reaches the board's own storage is the offline detection buffer, described in the next section, which is off until you turn it on. The app does not automatically send those coordinates to us or an internet service. Apart from the encrypted local link to your board, they leave your phone only when you choose to export or contribute them. One exception is a board running the Mesh-Detect firmware on a private channel: while your phone is connected to it, the board adds your phone's current fix to its alerts over Meshtastic as a map link, readable by the nodes that hold that channel's key. The public-channel build never attaches your fix.

Offline detection buffer (off by default)

Off by default; you turn it on in the app. With it on, the board records detections to its own flash while your phone is away and replays them to your phone when you reconnect, over the same encrypted local link. Nothing in it is uploaded anywhere.

A buffered hit that is not a drone is written to that flash together with the last position your phone shared, whenever the board still holds one inside the 18-hour limit above. That is where your coordinates reach the board's storage. A drone's record carries the drone's own broadcast position instead, and a record the board has no usable fix for is stored with no position at all.

Those records are encrypted at rest on the board with a key your phone supplies. While the buffer is switched on, the board also keeps a copy of that key in its own flash so it can carry on recording across a restart. The tradeoff is deliberate, and it is the thing to weigh before switching the buffer on: someone who takes the board gets both the key and what it stored, including those coordinates. The buffer is not sealed against a seized board. Switching the buffer off deletes the board's copy of the key, but the deleted key can stay readable in the board's flash. Records not collected by the sixth time the board is turned on or plugged in are erased by the board on its own, and the ERASE control for the offline buffer in the app erases them on demand. Clearing the Log on your phone is a separate action and does not erase the board's records.

The board also limits how fast it stores recognized detections: a burst of 256, then about one every 10 seconds, with the last few reserved for devices it has kept hearing for at least 10 seconds. That keeps a transmitter broadcasting a flood of fake identities from overwriting the buffer in minutes. If the limit turns rows away, the app shows a DETECTION FLOOD REFUSED warning, because some real detections may be missing; the warning stays until the buffer is erased.

Maps

When you open the map, the map images are loaded from a map provider (OpenStreetMap on Android, Apple Maps on iOS). Like any web request, that provider can see your device's IP address and which area of the map you are viewing. No detections, detection identifiers, or board data are attached to those requests.

The tiles the map has loaded are a record of the areas you viewed. On Android the app caches them, up to about 100 MB, only in its own private internal storage, which is excluded from backups, and clearing the Log deletes that cache. On iOS the map is Apple Maps, which manages its own caching; the app keeps no tile cache of its own.

Data you export

You can export your Log as CSV or GPX. Both formats can contain locations: where your phone heard a device and, for drones, the aircraft and operator positions broadcast over Remote ID. Ordinary Log exports do not have location-removal switches and are not passed through the Improve Detection redactor, so review the file and destination before sharing. Each file is created on your device and handed to your phone's standard sharing tools, which send or save it only to the app, recipient, or destination you choose. The app does not automatically upload it.

To hand a file to those tools, the app first writes a temporary copy in its own private storage. Once a copy is more than an hour old, the app deletes it the next time it starts (on Android, also the next time you export). Clearing the Log deletes every such copy right away, along with the app's detection notifications. This applies to the files Improve Detection shares too. A copy you saved or sent somewhere else is outside the app and is not affected.

Improve detection contributions

The optional Improve Detection flow creates a CSV containing only observations from the capture window you start and stop. Its three location switches apply only to this contribution flow. Before sharing, you can separately choose whether to include your observation location, a drone's broadcast aircraft location, and its broadcast operator location. Your observation and operator locations are off by default; the aircraft location is on by default. If you add a photo, the app re-encodes it before attachment to remove GPS, date, camera, and software metadata.

When you choose Review & Share, the app opens a mail composer or your system share flow with the CSV and optional photo. It fills in logs@soyboi.tech where the selected mail app supports a recipient field and otherwise identifies that address in the message for you to paste. Nothing is sent until you confirm it in the mail or sharing app. You can change the recipient or save the files instead.

Firmware updates

The app fetches a small static version file from soyboi.tech to learn whether new firmware exists for your board, and downloads the firmware image if you choose to install it. These are plain file downloads from a static site: no account, location, or detection data is attached. The site host sees the request, including your IP address, the way any web server does.

Known-ALPR map layer (on by default)

On by default; the map layers panel turns it off. With the layer on, the app downloads one static dataset of community-mapped license-plate-reader locations from soyboi.tech and draws it on your map. It is a plain file download like the firmware check: your map viewport and detections are not attached, there are no per-view lookups, and the site host sees the ordinary request and IP address. The locations come from OpenStreetMap contributors (the registry the DeFlock project maintains), used under the ODbL.

Third parties

The app has no advertising, analytics, or tracking. Its automatic network use is limited to the map provider that supplies map tiles and the static soyboi.tech site for firmware and the known-ALPR dataset, both described above. A detection export or contribution reaches another service only when you explicitly hand it to a mail or sharing app and confirm the destination.

Contact

Questions? Open an issue at github.com/soyboitech/beacons.