# Site name — kebab-case, must match the filename (dr-garcia.yaml → name: dr-garcia). # Used in log output and the dashboard. name: example-site # Root URL of the site. All page paths below are resolved relative to this. baseUrl: https://example.com # Optional human-friendly label shown in the sidebar, overview cards, and site header. # If omitted, the name field is used. Unlike name, this can contain spaces and any characters. # displayName: My Site # Master switch. Set to true once selectors are validated and you're ready to monitor. enabled: false # Alerting behaviour for this site. Three forms are accepted: # # alerting: true — use default channels from config.yaml (default) # alerting: false — disable all alerts for this site # alerting: — delta from the global defaults # add: [channel-name] — add channels not in the default list # remove: [channel-name] — suppress channels that are in the default list # alerting: true # Milliseconds to wait between page requests within this site (both healthcheck and Lighthouse). # Overrides runner.pageDelayMs from config.yaml for this site only. # Useful for servers that get overloaded by rapid sequential requests. # pageDelayMs: 2000 healthcheck: # Master switch. Keep false until you've validated selectors with `hcw check --site `. enabled: false # How often to run the healthcheck. Overrides healthcheck.defaultIntervalMinutes in config.yaml. intervalMinutes: 10 # Page navigation timeout in seconds. Overrides healthcheck.defaultTimeoutSeconds in config.yaml. timeoutSeconds: 30 lighthouse: # Master switch. Enable only after healthcheck is passing cleanly. enabled: false # How often to run a full Lighthouse audit. 360 = every 6 hours. intervalMinutes: 360 # Throttling profile. mobile simulates a mid-tier phone on slow 3G. # desktop uses the dimensions set in config.yaml (lighthouse.desktopWidth/Height). throttling: mobile # mobile | desktop # Pages to monitor. Each page gets its own healthcheck and Lighthouse audit. pages: - path: / # Human-readable label used in logs and the dashboard. name: Home # CSS selectors that must be visible for the page to be considered healthy. # Use browser DevTools to find stable selectors — prefer semantic elements or # stable class names over auto-generated ones. At least one selector is required. selectors: - "nav" # replace with real selectors for this site - "main" - "footer" - path: /contact/ name: Contact selectors: - "nav" - "form" # API checks — not yet implemented, schema reserved for future use. # api: # enabled: false # intervalMinutes: 5 # checks: # - path: /api/health # name: Health endpoint # method: GET # expectedStatus: 200 # latencyThresholdMs: 500 # # - path: /api/login # name: Login smoke test # method: POST # headers: # Content-Type: application/json # body: # inline: '{"username": "probe", "password": "probe"}' # expectedStatus: 200 # latencyThresholdMs: 1000 # assertions: # - type: json # path: "$.token" # exists: true # # - path: /api/orders # name: Create order # method: POST # headers: # Authorization: "Bearer ${API_PROBE_TOKEN}" # body: # file: ./payloads/create-order.json # expectedStatus: 201 # assertions: # - type: json # path: "$.id" # exists: true # expectedResponse: # file: ./expected/create-order.json