# Site Health

A free, drop-in admin page for the health of your site and apps: every app's self-test with the fix, security headers, today's usage against the Cloudflare free limits, your Cloudflare setup at a glance, and optional uptime monitoring with email alerts and a public status page.

**Beta.** Site Health is in beta: it works, but things may still break. Tell us if something does: open an issue at https://github.com/sundoggs/support/issues/new.

Category: [Site health](/categories/monitoring.md)

## Requirements (tell the site owner before buying)

- Cloudflare plan: Cloudflare free plan
- Works on: Cloudflare Workers, Cloudflare Pages
- Version: 0.2.3 (needs site layer 0.23.0 or later; it comes in the same download)
- Free, and included with every install. Runs on the Cloudflare free plan in the same D1 database as your other site apps. No outside service, no third-party script: nothing leaves your site except the uptime requests to your own pages and the alert email or webhook you set up.
- The Overview works as soon as it is installed. Uptime checks are off until you switch them on, because they need a Cron Trigger (optional). Workers: one line, triggers.crons, in the Wrangler config (the free plan allows 5 Cron Triggers per account). Pages has no Cron Triggers, so your AI agent adds a small helper Worker (a separate Worker with its own Cron Trigger) that asks your site to run its checks; the skill has the ready file.
- Free-plan limits: a Cron Trigger run gets 10 ms of CPU time and 50 outbound requests, so one run checks at most 20 addresses (your home page, up to 5 key pages, and a rotating share of your /go/ links). A check every 5 minutes is the default.
- Alerts: email uses the same Cloudflare Email setup as Forms notifications (nothing is sent until you set an address); a webhook is any https address you choose.
- The public status page is off by default. It shows only page names (paths), status, uptime and incidents: no bindings, no admin path.
- Cost per visit: none. Visits are not touched. Cost per check: one request to the page checked (it counts as a request to your site, so it also counts toward the Cloudflare 100,000 a day on the free plan when your Worker runs for pages) and a few small database writes per run, kept as daily roll-ups and limited by the site's daily write budget.

Settings:
- `SITE_EMAIL` (optional): Workers: send_email binding for incident alert emails.
- `SITE_EMAIL_BINDING` (optional): Workers: the name of an existing send_email binding to use instead of SITE_EMAIL (e.g. EMAIL).
- `SITE_EMAIL_API_TOKEN` (optional): Pages: API token with Email Sending: Edit, for incident alert emails.
- `SITE_EMAIL_ACCOUNT_ID` (optional): Pages: the Cloudflare account id for that token.

## Works with

Cloudflare Workers, Cloudflare Pages, Astro, Next.js (with OpenNext), Vite, Hugo, Plain HTML sites, Vanilla JavaScript.

## Price

Free

## What's new in 0.2.3

- Marked as beta: it works, but things may still break. The admin shows where to report a problem.

## Included

- Site admin dashboard (installed with your first app, no extra cost)
- Updates for as long as the app is free (you keep it if that ever changes)
- An agent skill and install guide
- Free License: any number of sites

## Install

Free on every site. The site owner signs in (the client opens the browser), or you send an API key. Then call the MCP tool `get_download` for the site's domain with `apps: ["health"]`: it claims the app first if the account doesn't own it (or claim it on its own with `claim_free_app`) and gives the files.

The prompt the app page gives the owner to paste into their agent:

```
Install the Site Health app (id: health) from the Sundogs site apps store on this site.
First read https://sundo.gs/apps/health.md and tell me what it needs and what it costs.
It's free: get_download claims it for me if I don't have it yet.
Then download it with get_download for this site's domain. Follow the install guide (site-apps/INSTALL.md in the download, also at https://sundo.gs/install-guide.md).
Check it with the install guide's step 6 (the public status, then the self-test once you can sign in to the admin) and tell me what's next.
(Not connected to the store yet? See https://sundo.gs/agents.)
```

## Related playbooks

- [Check your site for downtime and broken links on a schedule with a Cloudflare Cron Trigger](/playbooks/broken-link-uptime-check-cron.md): A small separate Worker that pings your pages every 5 minutes, crawls your sitemap hourly in small batches, records broken links in D1 and sends an alert to a webhook. Fits the free plan limits, and works for Pages sites because it checks over HTTP.
- [Create a Cloudflare account and connect Wrangler (also from a cloud AI agent)](/playbooks/create-cloudflare-account-connect-wrangler.md): Sign up for a free Cloudflare account, verify the email, and let your AI coding agent deploy for you with wrangler login, including the device-code login for agents with no browser and the API-token fallback. With the exact clicks, how to check each step worked, and what to do when it doesn't.
- [How to vibecode an affiliate site on Next.js (and host it free on Cloudflare)](/playbooks/vibecode-affiliate-site-nextjs.md): Build a whole affiliate site with an AI coding agent, start to finish: pick a niche you can win, plan the pages that earn (best-of lists, comparisons, reviews), set up Next.js as a static export, write content Google rewards, get the SEO basics right, deploy on the Cloudflare free plan, then monetise with affiliate links and an email list, and measure which pages make money. With prompts you can give your agent at each step.
- [Start a new website on Cloudflare Workers, with or without GitHub](/playbooks/start-a-site-on-cloudflare.md): No site yet? An AI agent creates one on the Cloudflare free plan, puts it live on a free workers.dev address, and adds the free site apps (a contact form inbox and a health page). With GitHub you get automatic deploys on every push; without GitHub it deploys straight from your computer. Includes the Cloudflare temporary accounts, where the agent deploys first and you claim the site within an hour.
