A minimalist, self-hosted web interface to schedule notifications for ntfy.
Instead of relying on calendar events or alarms, this lightweight container lets you type a message, pick a date, and fire it off to your phone via your own ntfy server whenever you want it to.
Features- Zero Dependencies: Runs on a single lightweight Docker container.
- Mobile-Friendly: Clean, dark-mode UI that works great on phones.
- Scheduled Delivery: Queues messages locally and POSTs them to ntfy at the exact time.
- Topic Presets: Define your favorite topics in
docker-composeto save typing. - Instant Test: "Test" button to verify your emojis and topics immediately.
- Secure: Optional Basic Authentication to keep prying eyes out.
- Auto-Cleanup: Automatically removes old reminders after 30 days.
You do not need to build anything. Just copy this docker-compose.yml and run it.
services:
ntfy-scheduler:
image: ghcr.io/simlocker/ntfy-scheduler:latest
container_name: ntfy_scheduler
restart: unless-stopped
ports:
- "5050:5000"
volumes:
- ./data:/data
environment:
- TZ=Europe/Madrid
- NTFY_BASE_URL=https://ntfy.sh
# Authentication (Optional)
- AUTH_ENABLED=true
- AUTH_USER=admin
- AUTH_PASS=secret
# Dropdown Options
- TOPIC_PRESETS=reminders,house-chores,alertsRun the container:
docker compose up -dAccess the UI at http://your-server-ip:5050
| Variable | Default | Description |
|---|---|---|
TZ |
Europe/Madrid |
Your timezone (Important for correct scheduling!) |
NTFY_BASE_URL |
https://ntfy.sh |
Your self-hosted ntfy server URL. |
AUTH_ENABLED |
true |
Set to false to disable the login screen. |
AUTH_USER |
admin |
Username for Basic Auth. |
AUTH_PASS |
secret |
Password for Basic Auth. |
TOPIC_PRESETS |
(Empty) | Comma-separated list of topics for the dropdown menu (e.g., alerts,chores). |
- Python (Flask) - Backend
- APScheduler - Timing engine
- SQLite - Local storage
- TailwindCSS - Styling
- Google Gemini AI - Co-pilot & Code Architect
