Live service status board with Teams alerts
One page that watches our suppliers and our own websites every minute, catches certificate faults Windows hides, and tells the right people in Microsoft Teams without the noise.
My role: Technical Operations & QA Specialist. I designed, built and tested this myself, directing Claude Code as my AI pair programmer.
At a glance
- 7Third-party suppliers
- 21Of our own websites
- 60sBetween checks
- 0Dependencies
- 40Automated tests
The problem
Every day, someone on the support team opened each supplier’s status page and our internal monitoring by hand, checked them one by one, then ticked a checklist in Microsoft Teams.
It was slow and easy to forget. Worse, nobody heard about a problem that started between checks.
What I built
One web page that checks 7 third-party suppliers (payments, email, helpdesk, direct debit and banking providers) and 21 of our own websites every 60 seconds. Each one shows green, amber, red or grey, and the board posts to Microsoft Teams when something changes.
Suppliers
- Payments providerOperational
- Helpdesk platformOperational
- Direct debit providerOperational
- Banking providerCan’t check
-
Email platformDegraded
“We’re investigating delays to outbound email. Messages are queued and will be delivered.”
View supplier status page
Our websites
- portal-a.example.com200 · certificate 84 days
- shop-c.example.com200 · certificate 61 days
- booking-d.example.comCertificate expires in 21 days
-
portal-b.example.comProblem
Incomplete certificate chain: the server isn’t sending its intermediate certificate. Some devices and apps will refuse to connect.
How it works
Suppliers
Every minute, the board reads each supplier’s official status feed: the machine-readable data behind their public status page. It understands the Atlassian Statuspage, status.io, StatusHub and Freshstatus formats.
- Operational shows green.
- Degraded or maintenance shows amber.
- Outage shows red.
Each card quotes the supplier’s own explanation and links to their page. If a feed can’t be read or changes shape, the card shows grey (“can’t check”). It never shows a false green.
Our websites
Every minute, the board connects to each site the way a customer’s browser does. It checks that the HTTPS certificate is valid, issued for the right name, not expiring within 30 days, and sent with its complete chain. Then it reads the response code.
Teams alerts for two audiences
- Management’s chat gets outages only, the “it’s fixed” message, and one summary at 9am every day.
- The support team’s chat gets every change, plus summaries at 9, 11, 1, 3 and 5.
Every message links back to the board and to a certificate report.
Support team chat
Problem: portal-b.example.com
Incomplete certificate chain. The server isn’t sending its intermediate certificate, so some devices and apps will refuse to connect.
Open status boardCertificate report
Resolved: Email platform
Operational again and stable for 15 minutes.
Open status board
Certificate report
A second page lists every site’s certificate issuer, expiry date and days left, with problems first and a CSV download.
Built to be light
- Zero dependencies. Plain Node.js using only built-in modules. No npm install, no build step, no database.
- Tiny footprint. About 55 MB of memory and almost no CPU.
- Built, not bought. I trialled an off-the-shelf tool (Uptime Kuma) first. I built my own because I needed to read each supplier’s own explanation and route alerts to different audiences.
Making alerts useful, not noisy
Alert noise was the hardest problem. Alerts that cry wolf get muted, so every rule below exists to keep messages rare and trustworthy.
-
Problems now, recoveries when stable
Problems alert immediately. Recoveries wait until things have been stable for 15 minutes. One supplier incident that flapped back and forth would have sent about 25 messages. It now sends 2.
-
Confirm before alerting
A site must still be down a minute later before anyone is alerted, so a one-off network blip never reaches Teams. Certificate faults alert at once.
-
Never repeat itself
It remembers what it has already announced, so restarts never repeat messages. If two copies run at once, only one posts, using a lock file with a heartbeat.
-
No false alarms when it’s offline
If the board loses its own internet connection, everything goes grey rather than red.
-
UK time, all year
Schedules run on UK time and stay correct through daylight-saving changes.
Tested properly
40 automated checks, including a replica of the real certificate fault, 12 back-to-back restarts, two copies running at once, and a simulated clock change.
Safe by design
Read-only, using public information only. No logins or passwords stored. Webhook secrets are kept out of source control, and test endpoints are disabled in production.
Outcome
- Replaced the manual daily checklist with live monitoring and automatic alerts.
- Adopted by the business and hosted internally.
A really good addition to visibility.
The CIO, who asked for it on the office wall and for a show-and-tell
What I learned
Designing alerts for different audiences matters as much as detecting problems. Noisy alerts get ignored, however accurate they are.
And “it works on my machine” can hide real faults. The certificate issue looked fine on our machines, and was still broken for other devices and apps.