Monitoring

Monitoring of 28 websites with a daily Telegram report

📅2026
⏱3 days
👥1 developer
Site monitoring · 28 sites · grouped by region🌎 Americaloadboard.carrier.com200 · 0.4 striphase-ltd.com200 · 0.4 skp-door.com200 · 0.4 s🇺🇦 Ukrainealemi.pro200 · 0.4 scoffee-cream.ua200 · 0.4 sauto-respect.ua503 · 3/3 failedkub-granitu.com.ua200 · 0.4 s🏙 Kyivekopel.com.ua200 · 0.4 selite-advice.ua200 · 0.4 sultrasound-medtrade.ua200 · 0.4 sDaily run · 12:00 KyivControl panelsites CRUDObserver → GitHubsites.jsonHosting cron3 tries × 10 sTelegram1 report / dayTelegram · 12:00❗ 1 of 28 sites is down🇺🇦 UKRAINE• auto-respect.ua — 50304.11.2026 12:00 (Kyiv)
28
sites in the daily check
12:00
report every day, Kyiv time
0
external monitoring services

The challenge

After launching dozens of client websites nobody knew one had gone down until the client called. Paid monitoring services sent an email for every hiccup, and the list of sites kept changing.

What was built

Monitoring was built into our own project control panel: sites are added there, and an observer rewrites sites.json in a GitHub repository on every change. Every day at 12:00 Kyiv time the hosting cron calls a key-guarded endpoint that checks each site sequentially with three attempts and a 10-second timeout and sends one Telegram report: “all N sites are up” or America / Ukraine / Kyiv sections with the sites that are down. GitHub Actions stayed as a manual backup in case of hosting trouble.

1

One list

sites are kept in the panel and grouped by region; sites.json in GitHub updates automatically.

2

Checks without panic

3 attempts of 10 seconds in sequence, so a short network blip does not become a false alarm.

3

One report a day

a green message when all is well, or a structured list of problems by region.

4

Hosting cron as the base

a key in the request, a 5-minute time limit for the whole run; no external services.

5

Backup run

GitHub Actions with a manual start reads the same sites.json.

6

Deduplication

a script normalises URLs (www, slash, protocol) so one site is never counted twice.

The result

We learn about a site going down before the client does, and the inbox gets one message a day instead of a stream of emails. Adding a site to monitoring is one form in the panel.

Tech stack

LaravelGitHub APIHostinger cronGitHub ActionsTelegram Bot API

Have a similar challenge?

Discuss a project

Next case

Google Sheets + Telegram

Telegram alerts for changes in a Google Sheet →