PwnLink · 2026

A phone app for a Pi in the field

In progressIndependent engineer

Running a Raspberry Pi in the field from a laptop is impractical. A generic Bluetooth terminal lacks location support, a versioned protocol, and a connection that survives the screen turning off.

The constraint

The phone and the Pi meet on a Bluetooth personal area network. There is no assumption of a stable internet path. Interface captures will be added once they exist.

Built with

  • Kotlin
  • Bluetooth
  • GPS

How it works

Phone and Raspberry Pi on a Bluetooth PAN. Versioned JSON over the link. GPS originates on the phone. A foreground service keeps the socket.

  1. Android
  2. Bluetooth PAN
  3. Raspberry Pi
  1. GPS
  2. JSON protocol
  3. Foreground service
Phone and Raspberry Pi on a Bluetooth PAN. Versioned JSON over the link. GPS originates on the phone. A foreground service keeps the socket.

The calls that shaped it

Each decision with the pressure that forced it and the price it keeps costing.

  1. Bluetooth PAN, not a cloud relay

    The phone discovers the device from the incoming WebSocket address on the PAN. The path is local.

  2. Versioned JSON both ways

    A custom protocol, not an informal stream of strings, so a firmware bump can fail closed.

  3. Foreground service

    GPS can stream and the link stays up while the screen is off. A connection that drops when the device is locked is not usable in the field.

A device without mobile data needs a protocol and a network you control. The app provides both.

Field hardware with no steady internet gets a phone companion on the same local network, a protocol that fails closed, and a connection that survives the screen being locked.

Where it stands

In progress. Field hardware work: Bluetooth PAN, versioned protocol, and a foreground service for a device with no steady internet.

What was handed over

  1. Protocol version notes
  2. How discovery is supposed to happen
  3. What the foreground service is allowed to do
Next project Ingestion Collecting web data without losing the failures