Building Uptime Monitor: a production-grade website & API monitor in Django
How I built Uptime Monitor — a website and API monitoring service with scheduled checks, multi-channel alerts, team status pages, and uptime history, in Django.

I wanted a website and API monitor I fully owned — something in the spirit of UptimeRobot, Pingdom, or Better Stack, but self-hostable and open source. So I built Uptime Monitor.
What it does
You point it at a URL and it checks the endpoint on a schedule. When a healthy response turns into an error, a timeout, or a refused connection — or recovers — it alerts you instantly across email, Slack, webhooks, and SMS. Along the way it tracks response times, SSL-certificate expiry, and full uptime history, and can publish a shareable public status page.
How it's built
The stack is Python 3.12 and Django 6, with Celery (and a beat schedule) running the checks in the background and Redis as the broker. Uptime history is aggregated efficiently in the database and rendered as dependency-free inline SVG, so the detail pages stay fast. Alerts fan out through Resend (email), Slack OAuth, webhooks, and Twilio (SMS).
Teams, done quietly
Teams are ad-hoc by design: solo users never see the concept. Create a team, invite teammates by email, share monitors, and everyone gets alerted through their own preferences when a shared monitor goes down.
Try the live demo, or read the full write-up on the project page.