Back to projects
12DevOps · Uptime Monitoring2026Live

PulseWatch

A serious dark-mode uptime monitor that checks your sites on a schedule, records latency and uptime history, opens an incident after two consecutive failures, and fires one down alert plus one recovery alert — with a public status page and a full admin back office.

Screenshots
Details

Role: Solo developer

Status: Live

Next.jsTypeScriptPrismaNeon PostgresTailwind CSSRechartsResendBackground SchedulerDocker
Problem

Uptime monitoring looks like a simple 'ping a URL' loop, but the hard parts are the ones that keep it honest. A single blip shouldn't page anyone, so failures need to be confirmed before they become incidents — and once an incident is open, you want exactly one alert when it goes down and exactly one when it recovers, not a flood every minute it stays broken. On top of that, each monitor has its own check interval, history has to be recorded and retained without the database growing forever, and the whole loop has to keep running reliably in a single container — all while presenting a clean public status page to visitors and a detailed operational view to the owner.

Approach

PulseWatch is a full uptime-monitoring product with a real scheduler at its core. Background scheduler: a loop started from Next.js instrumentation boots with the server and, every 60 seconds, loads active monitors, checks only the ones whose interval is actually due, and records a CheckResult with status and latency — no external cron or worker needed for the demo. Incident engine: two consecutive failures open an incident; a successful check closes it. Alerts are de-duplicated to a single down notification and a single recovery notification per incident, so the on-call inbox stays sane. History + retention: latency and uptime are stored per check and charted with Recharts, with 90-day uptime rollups, while a daily retention job prunes raw checks older than 7 days to keep the database lean. Two audiences: a login-free public /status page shows current state to anyone, while the admin back office adds monitors (with a live test before saving), per-monitor charts and recent checks, and a full incident log. Built on Next.js 16 (App Router) + TypeScript, Prisma against Neon Postgres, Tailwind, and Recharts, with optional Resend email alerts (it logs to the console without a key) and a /api/health endpoint — shipped Docker standalone for Coolify.

Outcome

A deployed, portfolio-ready ops tool that handles the parts real monitoring lives or dies on — failure confirmation, single down/recovery alerts, interval scheduling, and history retention — inside one self-contained container, not just a naive URL pinger.

PulseWatch | Hassan Al Salam