Skip to content
AI agents & automation
Launch pack

Site Health Report

Know the site works without checking it: daily alerts and a weekly report.

  • Monitoring
  • Trigger.dev
  • Reports

Install

npx skills add webrenew/skills --skill launch-site-health-report
GitHub

1 file · 216 lines · any agent that reads SKILL.md

Use it when

  • The owner hears about a broken form from a customer
  • A certificate or domain could expire unnoticed
  • You want a weekly summary of leads and site health

What your agent delivers

  • Daily checks: uptime, a real form test, certificate and noindex
  • Alerts that say the impact first, once per problem
  • A weekly email that the owner reads in under a minute

Source files

Read every line before you install. Copy or download one file.

SKILL.md

216 lines

---
name: launch-site-health-report
description: >
  Build scheduled jobs that check a small business website every morning and alert when
  something breaks, plus a short plain-English weekly email for the owner: is the site up,
  does the form still deliver, how fast is it, are links broken, when do the certificate and
  domain expire, and how many leads came in. Use this skill for site monitoring, weekly reports,
  uptime checks, form tests, Core Web Vitals tracking, broken-link checks, or "tell me if my
  site breaks". Built with Trigger.dev scheduled tasks.
---

# Site Health Report: Know the Site Works Without Checking It

**RULE: A breakage alerts the same morning the daily check finds it. Everything else waits
for one short weekly email that the owner can read in under a minute.**

Most small business sites break quietly: a form stops delivering after a plugin or provider
change, a certificate expires, a page starts to 404. The owner finds out from a customer, or
never. This job finds out first.

## What to check

| Check | How | Alert at once when |
|---|---|---|
| Site is up | `GET` the home page and main landing page | Status is not 200, or the response takes over 10 s |
| Form delivers | Call the test entry point, then confirm the lead was stored and `ownerAlertedAt` is set | Not stored, or no alert after 5 minutes. A 503 from the test route (`LEAD_TEST_SECRET` or `LEAD_TEST_INBOX` unset), a 401 or 403 (the job's secret does not match the site's), or a site that is not `business.url`, is a configuration error: alert the agency, and do not tell the owner the form is broken. |
| Certificate | Read the TLS certificate and its expiry | Not valid for the hostname, or under 14 days left |
| Domain | Expiry date from RDAP (auto-renew status is only in the registrar's account) | Under 30 days left |
| Broken links | Fetch every URL in `sitemap.xml` and internal links on key pages | A page in the sitemap returns 4xx or 5xx |
| `noindex` | Check robots meta and `robots.txt` on key pages | A production page says `noindex` |
| Speed | Chrome UX Report (field data) or PageSpeed Insights | LCP, INP or CLS moves from "good" to "poor" |
| Leads | Count leads this week vs last week, by source | (report only) |

## Scheduled task

```ts
// trigger/site-health.ts
import { schedules } from "@trigger.dev/sdk"

import { runChecks } from "@/lib/site-health/checks"
import { sendAlert, sendWeeklyReport } from "@/lib/site-health/report"

export const siteHealthDaily = schedules.task({
  id: "site-health-daily",
  cron: { pattern: "0 7 * * *", timezone: "America/New_York", environments: ["PRODUCTION"] },
  maxDuration: 300,
  run: async () => {
    const results = await runChecks({ quick: true })        // uptime, form, TLS, noindex
    const broken = results.filter((r) => r.status === "fail")
    if (broken.length > 0) await sendAlert(broken)
    return { failed: broken.length }
  },
})

export const siteHealthWeekly = schedules.task({
  id: "site-health-weekly",
  cron: { pattern: "0 8 * * 1", timezone: "America/New_York", environments: ["PRODUCTION"] },
  maxDuration: 900,
  run: async () => {
    const results = await runChecks({ quick: false })       // everything, including links and speed
All skills
  1. 21

    Lead Triage Agent

    Launch packlaunch-lead-triage-agent

    An agent sorts each lead and drafts a reply that the owner approves from a phone.

    An agent sorts each lead and drafts a reply that the owner approves from a phone.

  2. 22

    Agent Guardrails

    Launch packlaunch-agent-guardrails

    Rules that make a customer-facing agent safe to turn on and easy to trust.

    Rules that make a customer-facing agent safe to turn on and easy to trust.

  3. 01

    Technical SEO

    Growth & marketingseo-technical

    Make each page clear to search engines. Give them a path to every link.

    Make each page clear to search engines. Give them a path to every link.

  4. 02

    Local SEO

    Launch packGrowth & marketinglaunch-local-seo

    Get found by customers nearby, in local search and on Google Maps.

    Get found by customers nearby, in local search and on Google Maps.