MetaWatch is a self-hosted monitoring platform for SEO/meta fields and uptime.
npm install
npm run devEnvironment variables are documented in .env.example.
MetaWatch supports both single-process and split web + worker deployments.
webmode: serves HTTP routes, usually holds scheduler lock.workermode: processes BullMQ jobs only (no HTTP).
Recommended split setup:
- Web service:
ENABLE_WEB=trueENABLE_SCHEDULER=trueENABLE_QUEUE_WORKERS=falseREDIS_URL=<shared redis>
- Worker service:
ENABLE_WEB=falseENABLE_SCHEDULER=falseENABLE_QUEUE_WORKERS=trueREDIS_URL=<shared redis>
Useful checks:
npm run doctor:web
npm run doctor:worker
npm run smoke:code
npm run db:migrate
npm run db:explainKey production flags (see .env.example for full list):
ENABLE_OUTBOUND_SAFETY=trueblocks private/internal outbound targets (SSRF guard).ENABLE_ALERT_STATE_ENGINE=trueenables cooldown/state-based alert suppression.DEFAULT_ALERT_COOLDOWN_MINUTES=60controls duplicate alert cooldown.SLOW_QUERY_MS=250logs slow SQL queries.ADMIN_SYSTEM_CACHE_TTL_MS=30000caches heavy/admin/systemsnapshot for a short TTL (0disables cache).WEBHOOK_SIGNING_SECRET=addsX-MetaWatch-SignatureHMAC header to outgoing webhooks.ENABLE_SCHEDULER=truecontrols cron startup (useful for web/worker split).ENABLE_WEBandENABLE_QUEUE_WORKERScontrol split runtime roles.REDIS_URLenables BullMQ queues and/admin/queues.VAPID_PUBLIC_KEYandVAPID_PRIVATE_KEYenable browser push notifications.API_RATE_LIMIT_WINDOW_MSandAPI_RATE_LIMIT_MAXtune/apirate limiting.API_V2_STATS_CACHE_TTL_MS=60000enables short-lived cache for/api/v2/stats(0disables cache).ALERT_RETENTION_DAYS,NOTIFICATION_LOG_RETENTION_DAYS,WEBHOOK_LOG_RETENTION_DAYScontrol data retention.
- Reports Center:
/reports - Exports:
/export/*(PDF/XLSX/CSV, plan-gated bysrc/report-access.js) - Billing and plan usage:
/billing - Manual admin plan assignment:
/admin/users
Detailed docs:
PROJECT_AUDIT_2026-03-02.mdOPS_RUNBOOK_RAILWAY.mdPLAN_FEATURE_MATRIX.mdREPORTS_REFERENCE.mdWEB_PUSH_SETUP.md
The Chrome extension lives in /extension and lets you quickly check if the current domain is monitored in MetaWatch uptime.
- Open
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select the local
extensionfolder from this repository.
- Click the extension icon.
- Click the gear icon to open settings.
- Fill in:
- MetaWatch URL (your deployed app URL)
- API Key
- Click Save Settings.
- Optional: click Test Connection (checks
/api/health).
Open your MetaWatch profile page:
/profilein your MetaWatch app
Use the generated API key from Profile & API Key in extension settings.