A while back, one of my small sites went down. I did not notice. Nobody told me for hours. A friend messaged me about it eventually, and that was the moment I realised I had no monitoring at all.

I looked at the hosted options. They all wanted a monthly fee, or an account, or a server I had to rent. I did not need any of that. I needed something that checks a URL every minute and tells me when it stops answering.

So I built Watchdog.

It is a lightweight uptime monitor that runs on your own machine. You add your websites, it checks them on a schedule, keeps the full history, shows a live dashboard, and pings you on Telegram or email the moment something goes down or comes back up. No Docker. No server to rent. No heavy dependencies. Just Python, FastAPI, and SQLite.

What it does

It monitors any HTTP or HTTPS URL on a schedule you choose, every 60 seconds by default. Every check is recorded: status code, response time, up or down, timestamp.

The dashboard shows per-site status cards, uptime percentages for the last 24 hours, 7 days and 30 days, response-time sparklines, and a recent event log. It polls the API every 15 seconds, so the page stays live.

One thing I was careful about: a site is only marked DOWN after a few consecutive failures. A single slow response should not page you at midnight. You can also pause or resume any site, or delete a site along with its full history.

Alerts are optional. Without them, Watchdog still monitors everything and logs state changes to the dashboard. With them, you get a Telegram or email message the moment a site flips from UP to DOWN, and again when it comes back.

How to run it

You need Python 3.10 or newer.

git clone https://github.com/MASHHOOD2019/watchdog.git cd watchdog pip install -r requirements.txt python app.py 

Open http://localhost:8000 in your browser and add your first URL in the form at the top. On Windows you can run it the same way from a terminal, or wrap it in a small .bat file.

To turn on Telegram alerts, copy config.example.json to config.json and fill in your bot token and chat id. For email, fill in the SMTP details in the same file. Restart the app and you are done.

How it works

A background thread checks every enabled site on its own schedule using the standard library, so there is nothing extra to install for the checking itself. Results go into a local SQLite database, one row per check, plus an event row on every state change. FastAPI serves both the dashboard and a small JSON API that the page polls.

The whole thing is one small codebase. app.py is the entry point, checker.py runs the background checks, db.py handles storage, alerts.py delivers Telegram and email. That is it.

If you run any small sites and you are still finding out about downtime from other people, this is for you.

Repo: https://github.com/MASHHOOD2019/watchdog