Crit Alarm
Repeats until you acknowledge

Your server pages you. Even at 3am.

One HTTP endpoint per topic. Post to it from cron, CI, Uptime Kuma or a shell script. Mark the topic critical and the alarm repeats until you acknowledge it.

Crit Alarm home screen with no open incidentsA critical alert ringing on the lock screen at 03:12The red critical screen with the Acknowledge buttonA topic detail screen listing past messagesThe create topic screen with a name and a default priorityThe Crit Alarm welcome screen

Publish with one request

Every topic gets a URL and a bearer token. Headers carry the priority, title and tags. The body is the message. Anything that can make an HTTP request can wake you up.

# from the uptime-kuma webhook, or any shell
curl -X POST https://api.critalarm.app/t/prod-db \
  -H "Authorization: Bearer ca_live_7Hq2mN9xPz4wKd8" \
  -H "Priority: critical" \
  -H "Title: Primary database down" \
  -H "Tags: postgres,db-1" \
  -d "pg_isready failed 3 times in 90 s. Replica promoted to primary on db-2."

# 202 Accepted
"id":"msg_01J7Q","topic":"prod-db","priority":"critical","delivered":"2026-09-10T03:12:04+08:00"
What the phone did Delivery log for msg_01J7Q
Delivered
03:12:04
Rang
4 times, 30 s apart
Acknowledged
03:14:18 by Z
Escalation
not needed

How it works

Create a topic

Name it prod-db. Pick a default priority. Copy the endpoint and the token from the screen.

Post to it

cron, systemd, GitHub Actions, Home Assistant, a bash one-liner. If it can make an HTTP request, it can alert you.

Answer the alarm

Default priority is a notification. Critical rings, vibrates and repeats every 30 seconds until you tap Acknowledge.

The apps are not in the stores yet

Join the waitlist and you get an invite when the builds land.

Read how it works

Critical means it wakes you

A critical alert plays at alarm volume. It repeats every 30 seconds for up to an hour, or until you acknowledge it. If nobody has acknowledged after 5 minutes, escalation rings a second device or places a call.

  • Plays at alarm volume
  • Repeats every 30 seconds
  • Escalates after 5 minutes
  • Stops only when you acknowledge

The priority ladder

Set a default on the topic, override it per message with the Priority header. The phone behaves differently at each rung, and the face changes with it.

min

Stored in history. No notification at all.

low

Silent notification. No sound, no vibration.

default

Standard notification with sound. Respects quiet hours.

high

Sound and vibration. Shows on the lock screen even during quiet hours.

critical

Alarm. Repeats every 30 seconds until you acknowledge.

See the whole ladder

Pricing

Free

$0
  • 5 topics
  • 1 critical topic
  • 7 days of history
  • Repeat until acknowledged
Get the app

Pro

$4 a month
  • Unlimited topics, unlimited critical
  • Escalation to a second device or a phone call
  • 90 days of history
  • Priority override per message
  • Quiet hours per topic
Start Pro

Self-hosted

$0
  • Every Pro feature
  • Your hardware, your SQLite file
  • Point the app at your URL
  • Open source AGPL-3.0
Read the guide
Compare all plans and limits

Run it on your own box

One container, one SQLite file, one env var for push credentials. The app has a server field in Settings. Change it and everything, including critical alarms, goes through your machine.

docker run -d --name critalarm \
  -p 8080:8080 \
  -v ./data:/data \
  -e CA_BASE_URL=https://alerts.example.net \
  -e CA_APNS_KEY_FILE=/data/apns.p8 \
  ghcr.io/critalarm/server:1

Stop finding out in the morning

Free for 5 topics. Critical rings from the first one.