BrandPilot — Ops Playbooks

Production URL: https://p24-brandpilot.zintegrowana.online Health endpoint: https://p24-brandpilot.zintegrowana.online/api/health Grafana dashboard: BrandPilot — Service Health (uid: brandpilot-health)

Components

ComponentHealth signalPlaybook
Next.js app (Vercel)probe_success{instance=~".*brandpilot.*"} = 0 OR /api/health → non-200app-down.md
n8n AI campaign workflow (bms-4 SvcDlrMxBMN9aTUJ)Campaign generation returns “N8N webhook failed” errorn8n-ai-webhook-down.md
Supabase (dedicated free-tier)/api/health returns supabase.ok: falsesupabase-connection-failed.md
LinkedIn OAuthPosts fail with “LinkedIn token expired”linkedin-token-expired.md

Automated monitoring

  • Prometheus blackbox probe: https://p24-brandpilot.zintegrowana.online/api/health (every 30s)
  • SSL probe: https://p24-brandpilot.zintegrowana.online (every 5m)
  • n8n hourly check: workflow BrandPilot — Hourly Health Check on bms-4 — fires Discord + GitHub issue on failure
  • Alert rules: EndpointDown, BrandPilotSupabaseDegraded in monitoring/prometheus/rules/

Secrets location

All credentials: p24-infra/secrets/brandpilot.env.sops (SOPS+age). Synced to Vercel on merge via secrets-sync.yml.

Architecture

Cloudflare DNS
  └─ Vercel (Next.js 14 App Router)
       ├─ Supabase (auth + database, dedicated free-tier)
       ├─ Resend (transactional email)
       ├─ n8n bms-4 webhook → SvcDlrMxBMN9aTUJ → claude-proxy:9999 → Anthropic API
       └─ LinkedIn OAuth (per-user tokens in social_accounts table)

4 items under this folder.