Running API checks and Playwright scripts on a schedule, retrying before alerting, keeping the history and sending a message when something changes fits in one session: Playwright does the browser work and a few SQLite tables do the rest. What Checkly adds is where the checks run (6 to 22 locations outside your own network), alert routing into on-call tools and phones, status pages, and a team workflow with a CLI, Terraform and CI. For one person with a few sites, one location and email or ntfy alerts is enough, and the prompt includes a self-watch ping so a dead monitor doesn't stay silent.
Before you buildCheck Checkly Hobby first: 10 uptime monitors, 10,000 API runs and 1,000 browser runs a month cost nothing for one person. It stops, rather than bills, when the runs are used up.
Build me a self-hosted synthetic monitor for my own sites to replace Checkly. Requirements: - Node.js 22 + TypeScript, one process: a scheduler plus Fastify serving Eta pages. `npm start` listens on http://localhost:4880; /admin is behind one password from .env. - Checks are files in ./checks: *.api.yaml (URL, method, headers, assertions on status, JSON path, body text and latency) and *.spec.ts Playwright tests run with @playwright/test. checks.yaml sets each check's interval (1 to 60 minutes), timeout and retries. - Storage: better-sqlite3 in ./data/monitor.db: every run (time, ok, duration, error) kept 30 days, then rolled into daily percentages. After a failed Playwright run keep the trace.zip and a screenshot in ./data/artifacts for 14 days. - A check goes down after 2 failures in a row, the second 30 seconds after the first, and recovers after 1 success. At most 2 browsers run at once; each run is cut off after 60 s. - Alerts on state changes only: email (nodemailer), a Slack webhook and an ntfy.sh topic, all optional in .env, plus one recovery message and at most one reminder per hour. - Dashboard: each check with its status, a 24-hour strip of runs, a latency sparkline as inline SVG, the last error and, for failed browser runs, the command that opens the trace (`npx playwright show-trace <path>`). - Self-watch: after every scheduler tick, ping HEALTHCHECK_URL (for example a free Healthchecks.io check) so something outside this process tells me if it dies. - No accounts, no telemetry, local-first: only my sites, the alert channels and HEALTHCHECK_URL are contacted. - Out of scope: multiple regions, private locations, status pages, SMS and phone alerts, teams, deploying checks from a CLI. - README: `npx playwright install --with-deps chromium`, how much memory one browser run takes on my machine (measure it), and a warning to host it at a different provider from the sites it watches, or one outage takes out both.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Checkly.
Add a second runner to the monitor in this folder. Requirements: - A `runner` mode (`npm start -- --runner`) that has no UI: it pulls its check list from the main server over HTTPS with a bearer token and posts each result back. - Each result carries the runner's name. A check only goes down when at least two runners, or the only one configured, report 2 failures in a row; show per-runner status in the UI. - Tokens are stored hashed; a runner that hasn't reported for 5 minutes triggers an alert. - Update the README with a systemd unit for the runner.
Add a public status page to the monitor in this folder. Requirements: - /status with no login: one row per check marked public in checks.yaml, a 90-day bar of daily uptime and the incidents of the last 14 days. - Incidents are created automatically from down periods, and I can add a note to one from /admin. - No third-party scripts; the page works without JavaScript. - Update the README.
Extend the Playwright checks of the monitor in this folder. Requirements: - Per-check environment variables in checks.yaml, read from .env with a prefix per check, passed to the spec as process.env and never written to logs, traces or the database. - Redact those values from error messages and from the stored trace before it is saved. - An example spec that signs in, opens one page and asserts a known text. - Update the README.
Checkly runs your Playwright tests as production monitors from outside your network, keeps the results, and pages the right people, all defined in the same repo as the code. A team that already writes Playwright tests gets monitoring without a new tool to learn, and nobody has to babysit a VPS full of browsers.
Estimate · A laptop costs nothing but sleeps; a small always-on VPS with enough memory for headless Chromium runs roughly $5 to $12 a month. Healthchecks.io and ntfy.sh have free tiers. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Hobby | $0 | $0 | 1 user, 10 uptime monitors at 2-minute intervals, 10,000 API check runs and 1,000 browser check runs a month, 6 locations, email, Slack and webhook alerts, 7 days of raw results. |
| Starter | $29 | $24 | 3 users, 50 uptime monitors at 1-minute intervals, 25,000 API check runs and 3,000 browser check runs a month, 6 locations, SMS alerts, 7 days of raw results. |
| Team | $80 | $64 | 10 users, 75 uptime monitors at 30-second intervals, 100,000 API check runs and 12,000 browser check runs a month, 22 locations, private locations, all alert channels, 30 days of raw results and a year of aggregates. |
| Enterprise | custom | — | Custom volumes, 1-second intervals, parallel scheduling, client certificates, 180 days of raw results and 25 months of aggregates. |
Hobby is free: 1 user, 10 uptime monitors, 10,000 API check runs and 1,000 browser check runs a month, from 6 locations.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $29 a month on the Starter plan, $348 a year (checked 2026-10-19).
Checks from 6 to 22 regions with round-robin or parallel scheduling; Alert routing into PagerDuty, Opsgenie, incident.io, Microsoft Teams, SMS and phone calls; Public status pages and dashboards tied to the monitors; The CLI, Terraform provider and AI-assisted root-cause analysis for a team; A year of aggregated history and private locations for internal services. If any of those matter to you, keep paying.
Yes: Uptime Kuma (open source), OpenStatus (open source), Gatus (open source).