Benjamin Looi
Back to blogs
WOLE: The UpSnap for Android

WOLE: The UpSnap for Android

Benjamin Looi / October 25, 2025

WOLE: The UpSnap for Android

I had an old Android phone sitting in a drawer. I also had a homelab where I kept shutting down machines to save power, then walking over to press the power button when I needed them again. Wake-on-LAN exists, but it needs a device on the network to send the magic packet. I did not want to buy a Raspberry Pi for that.

So I built WOLE. It turns any Android phone into a WOL relay by running a small HTTP server as a foreground service. You send it a POST request with a MAC address, it broadcasts the magic packet on the local network, and your machine wakes up.

That is the whole idea.


How it works

WOLE is built with Expo and React Native. When you start the relay, it spins up an HTTP server using react-native-background-actions to keep it alive while the app is in the background. The server listens on a configurable port (default 8080) and exposes a POST /wol endpoint.

To wake a machine, you hit that endpoint with the target's MAC address:

curl -X POST "http://<phone-ip>:8080/wol" \
  -H "X-Auth-Token: your-secret" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "mac=AA:BB:CC:DD:EE:FF"
You can specify a broadcast IP and UDP port, but the defaults (255.255.255.255:9) work for most setups. Authentication uses a shared secret token: set it in the app, then include it in your requests.

The phone needs to be on the same LAN as the devices you want to wake. If you're remote, connect the phone to your network through Tailscale, WireGuard, or ZeroTier, and you can reach it from anywhere.


Why not just use UpSnap?

UpSnap is a proper web-based WOL dashboard that you run on a server. The catch is that you need a server running. If you are trying to wake your only server, you have the chicken-and-egg problem.

An old phone doesn't have that problem. It sips power on its own, it's already on your Wi-Fi, and it doesn't need a separate machine to host it. Plug it in, install WOLE, and forget about it.


What it actually does

Beyond the WOL relay, WOLE includes:

  • Device management: Save machines with names and MAC addresses so you do not have to remember them. There is a full CRUD API at /api/devices.
  • Ping checks: POST /api/ping checks whether a device is online. Useful for confirming that a wake worked.
  • Auto-start on boot: Once you start the relay, it automatically restarts when the phone reboots. No need to open the app every time.
  • Health endpoint: GET /health returns ok. Good for monitoring with something like Uptime Kuma.
  • In-app logs: The app shows a log of incoming requests and WOL dispatches, so you can see what's happening without checking adb logcat.

The setup

  1. Download the APK from the releases page.
  2. Install it on any Android 7+ device.
  3. Set a port and a shared secret token in the app.
  4. Hit the start button.

If Android kills the service, go into the battery optimization settings (there's a shortcut in the app) and exclude WOLE. Android is aggressive about killing background services, so this step matters.

For remote access, I use Tailscale. The phone gets a stable VPN IP, and I can reach the WOLE server from any of my devices without exposing anything to the internet.


Building from source

If you want to build it yourself:

npm install
npx expo prebuild -p android

WOLE also has a web UI that gets bundled into the APK. Build that first:

# Build the web UI, then build the APK
cd web && npm run build && cd ..
cd android && ./gradlew assembleRelease

What's next

WOLE does what I need right now. Next I want a better web dashboard, scheduled wakes, and stronger security beyond the shared token. The code is on GitHub if you want to contribute or poke around.

github.com/Benjaminlooi/WOLE

Thanks for reading! 😁

Comments

Related Posts

Related Projects

mobile
WOLE

WOLE

An Android foreground service that turns a phone into a Wake-on-LAN relay reachable over LAN, Tailscale, or WireGuard.

react-native
expo
typescript
vite
web
Open Resume

Open Resume

A resume builder with AI coaching, server-side rendering, local state persistence, and Cloudflare Workers deployment.

react
typescript
tailwind
zustand