Tuesday, September 16
9:41

Your stack, on your lock screen.

Send Beacon a webhook from your build, your monitoring, or your agent. It becomes a Live Activity, a widget, or a notification. You write the rules.

live demo · swipe to dismiss · tap a button to answer

Three steps. One of them is a curl.

1Create a source

The app gives you an inbound URL and, if you want one, a signing secret. One source per tool is a good habit.

2Send it JSON

Anything that can POST works. No SDK to install, no schema to match.

curl -X POST $SRC \
  -d '{"title":"Hello from Beacon","status":"ok"}'

3Write a rule

When the payload matches, show it as a Live Activity, a widget, or a notification using one of eight templates. Replay recent payloads in the editor to check it first.

Every place an iPhone can show something.

Pick the surface by how long the thing lasts. A deploy is a Live Activity. A queue depth is a widget. A failed job is a notification with buttons.

Live Activity lock screen

Starts on the first event, updates in place on each one after, ends when you send phase: end. The eight-hour cap is handled by restarting.

Dynamic Island compact · expanded · minimal

The same activity folded into the island. Expand it for the full template and its buttons.

Widgets home and lock screen

Recent events, the latest from one source, or a grid of statuses. Buttons fire actions without opening the app.

Notifications passive · active · time-sensitive

Grouped by source, with the rule's actions as buttons, straight from the lock screen.

A rule reads like a sentence.

Conditions use JSONPath against the payload. Bindings pull fields into a template. The same evaluator runs on the phone and on the relay, so the debugger shows exactly what gets delivered.

WHEN$.status equals "failed" and $.branch starts with "release/"
THENnotification · time-sensitive · one per 10 minutes
SHOWBuild · status ← $.status · message ← {$.commit.message}
equalsnot equalscontainsstarts withmatches><exists

Eight templates. Tap one to send a sample event.

sent

Alert

title · body
severity · url
sent

Build

status · message
author · duration
sent

Value

value · unit
delta · label
sent

Metric

value · label
threshold
sent

Status

state · name
since
sent

Message

title · body
sender
sent

Log

line · level
timestamp
sent

Ticker

delta · label
period

Your phone can answer.

A rule can carry actions. They become buttons on the notification, in the Live Activity, in the island, and on widgets. Tap one and Beacon posts a signed callback to your URL with the original payload attached.

Or let the sender wait. A script or an agent posts a question, blocks on the answer, and carries on when you tap.

ID=$(curl -s -X POST $SRC \
  -d '{"title":"Deploy 4271 to production?",
       "status":"waiting"}' | jq -r .payloadId)

curl "$SRC/wait/$ID?timeout=600"
# blocks until you tap, then:
{"actionId":"ship","label":"Ship it"}

Anything that can POST. These come with recipes.

Each recipe in the app copies a working snippet with your URL and secret filled in, and installs default rules. Tap one to see what its event looks like when it lands.

Senders you run: curl, Python, Node.js, GitHub Actions, Claude Code, Shortcuts, Home Assistant, n8n. Vendors that already post webhooks: GitHub, Stripe, Sentry, Linear, Docker Hub, Grafana, Uptime Kuma, Alertmanager.

Built to hand a URL to someone else's tool.

Signed sources

Turn on a per-source secret and the relay checks an HMAC on every request. Leaked a URL? Rotate it and the old one retires after a grace period.

Rules stay on the phone

Sign in with Apple is the only account. The relay keeps push tokens and the most recent payloads per source, nothing else.

Delete everything

One switch in Settings clears the relay and the phone.

Questions

What does it cost?
A small one-time purchase. Not a subscription. The price isn't final yet.
When can I try it?
It's heading to TestFlight. Ask for an invite and you'll get one when the build is up.
Which iPhones?
iOS 17.2 or later. The Dynamic Island needs a phone that has one; everything else works on any supported iPhone.
Do I need to write code?
No. If a tool already sends webhooks, paste your source URL into it.
Android?
No. Beacon exists for Live Activities and the Dynamic Island.

Swipe up when you're ready.