2025-10-19 17:32:33 +02:00
# ntfy emergency
2025-10-16 09:50:36 +02:00
2025-10-19 17:32:33 +02:00
This is a simple web application that allows users to send emergency messages to a ntfy server and topic. No coding, no curl, no HTTP. Just a plain web form.
2025-10-16 09:50:36 +02:00
2025-10-18 14:34:43 +02:00
tldr: I look at messaging apps very infrequently and have no notifications for them. But what happens if there's a real emergency and someone needs to grab my attention? The only app in my phone that has notifications is the ntfy client, which I use to monitor servers and services. Why not receive a ntfy alert? This small webapp lets my trusted ones send me a high priority message if needed.
2025-10-16 09:50:36 +02:00
2025-10-19 17:32:33 +02:00
A gif is worth a thousand words:
2025-10-18 23:44:50 +02:00
[](https://postimg.cc/KKwtzjy3)
2025-10-18 14:34:43 +02:00
More details:
- You can deploy in a single `docker run` , simply passing the ntfy details through env vars.
- You can use it with both the official ntfy instance or with a selfhosted instance of your own.
- Deals with ntfy username/password auth if needed.
- No auth or spam protection: either roll your own, or simply pray nobody spams you.
## Dev setup
2025-10-16 09:50:36 +02:00
2025-10-17 19:35:19 +02:00
1. Install dependencies:
2025-10-18 14:34:43 +02:00
2025-10-16 09:50:36 +02:00
```bash
npm install
```
2025-10-17 19:35:19 +02:00
2. Configure environment variables:
2025-10-16 09:50:36 +02:00
```bash
2025-10-18 14:34:43 +02:00
cp env.example .env
# Edit .env with your values
2025-10-16 09:50:36 +02:00
```
2025-10-17 19:35:19 +02:00
3. Run the application:
2025-10-16 09:50:36 +02:00
```bash
npm start
```
2025-10-18 14:34:43 +02:00
## Environment Variables in detail
2025-10-16 09:50:36 +02:00
2025-10-19 00:02:50 +02:00
- `NTFY_TOPIC` : ntfy topic/channel to send messages to (required)
- `NTFY_URL` : URL of your ntfy server (optional, defaults to https://ntfy.sh)
- `NTFY_USER` : Username for ntfy authentication (optional, only needed for auth protected topics)
- `NTFY_PASSWORD` : Password for ntfy authentication (optional, only needed for auth protected topics)
2025-10-17 19:35:19 +02:00
- `PORT` : Port to run the application on (optional, defaults to 3000)
2025-10-18 18:13:47 +02:00
- `UI_MESSAGE` : Custom message to display in the UI (optional, defaults to "Emergency Message")
2025-10-16 09:50:36 +02:00
2025-10-18 14:34:43 +02:00
### Docker Registry Variables (Optional, needed to push to private registry)
Note that we assume that you `docker` cli is authenticated for the registry you want to use.
2025-10-16 12:08:18 +02:00
2025-10-17 19:35:19 +02:00
- `DOCKER_REGISTRY` : Custom registry to publish the image to (optional)
- `DOCKER_USERNAME` : Username/organization in the registry (optional)
- `DOCKER_TAG` : Tag for the Docker image (optional, defaults to "latest")
2025-10-16 12:08:18 +02:00
2025-10-17 19:35:19 +02:00
## Deployment
2025-10-16 09:50:36 +02:00
2025-10-18 14:34:43 +02:00
### Option 1: Docker Run
2025-10-16 09:50:36 +02:00
2025-10-19 00:02:50 +02:00
Run with Docker, passing environment variables directly:
2025-10-16 09:50:36 +02:00
```bash
2025-10-19 00:02:50 +02:00
docker run -d \
--name ntfy-emergency-app \
-p 3000:3000 \
-e NTFY_TOPIC=emergencia \
-e UI_MESSAGE="Send an emergency message" \
ghcr.io/pmartincalvo/ntfy-emergency-app:latest
2025-10-16 09:50:36 +02:00
```
2025-10-19 00:02:50 +02:00
For private ntfy servers with authentication:
2025-10-16 09:50:36 +02:00
```bash
2025-10-18 14:34:43 +02:00
docker run -d \
--name ntfy-emergency-app \
-p 3000:3000 \
2025-10-19 00:02:50 +02:00
-e NTFY_TOPIC=emergencia \
-e NTFY_URL=https://your-ntfy-server.com \
-e NTFY_USER=your-username \
-e NTFY_PASSWORD=your-password \
-e UI_MESSAGE="Send an emergency message" \
2025-10-18 19:07:00 +02:00
ghcr.io/pmartincalvo/ntfy-emergency-app:latest
2025-10-16 09:50:36 +02:00
```
2025-10-17 19:35:19 +02:00
The application will be available at `http://localhost:3000`
2025-10-16 09:50:36 +02:00
2025-10-17 19:35:19 +02:00
### Option 2: Direct Installation
2025-10-16 09:50:36 +02:00
2025-10-17 19:35:19 +02:00
1. Upload files to the server
2. Install Node.js (version 14 or higher)
2025-10-18 14:34:43 +02:00
3. Create a `.env` file with your credentials:
2025-10-16 09:50:36 +02:00
```bash
2025-10-18 14:34:43 +02:00
NTFY_TOPIC=emergencia
2025-10-18 18:13:47 +02:00
UI_MESSAGE=Send an emergency message
2025-10-19 00:02:50 +02:00
# Optional: only needed for private ntfy servers
# NTFY_URL=https://your-ntfy-server.com
# NTFY_USER=your-username
# NTFY_PASSWORD=your-password
2025-10-16 12:08:18 +02:00
```
2025-10-18 14:34:43 +02:00
4. Install dependencies:
2025-10-16 12:08:18 +02:00
```bash
2025-10-18 14:34:43 +02:00
npm install
2025-10-16 12:08:18 +02:00
```
2025-10-18 14:34:43 +02:00
5. Start the application:
2025-10-16 12:08:18 +02:00
```bash
2025-10-18 14:34:43 +02:00
npm start
2025-10-16 10:02:25 +02:00
```
2025-10-19 17:32:33 +02:00
### Reverse proxy
You probably want to put a reverse proxy in front of this. With [caddy ](https://caddyserver.com/ ), assuming it runs on the same box, this would suffice:
```
emergency.yourdomain.com {
reverse_proxy localhost:3000
}
```
2025-10-18 14:34:43 +02:00
## Docker Image Publishing
2025-10-16 10:02:25 +02:00
```bash
2025-10-18 14:34:43 +02:00
npm run docker:build-tag-push
```