Skip to main content

Knowledge > Runbooks > Business Ops > Daily System and Business Health Check

Daily System and Business Health Check

A 5–10 minute morning check to confirm all systems are healthy and no customer-impacting issues require immediate attention.

Prerequisites​

  • Access to Supabase SQL editor or MCP tool
  • Stripe CLI available
  • Access to churchwiseai.com/founder/[token] dashboard

Steps​

1. Check the Founder Dashboard​

Open https://churchwiseai.com/founder/[token] and review:

  • WatchTower alerts section — any red or amber banners?
  • Pending items from FOUNDER_ACTIONS.md flagged in the UI
  • Recent activity summary

If there are flashing P0 banners, switch to the Error Log Triage Runbook immediately.

2. Check for New P0/P1 Errors (Last 24 Hours)​

SELECT
severity,
route,
message,
count(*) as occurrences,
max(created_at) as last_seen
FROM ops_error_reports
WHERE created_at > now() - interval '24 hours'
AND resolved_at IS NULL
GROUP BY severity, route, message
ORDER BY severity, occurrences DESC
LIMIT 20;

If any P0 errors are unresolved: triage immediately (see error-log-triage.md). If only P1/P2: log to FOUNDER_ACTIONS.md if founder action needed, otherwise fix in next coding session.

3. Check Service Quota Health​

SELECT service, metric_name, metric_value, recorded_at
FROM ops_quota_snapshots
ORDER BY recorded_at DESC
LIMIT 15;

Alert thresholds to watch:

  • Twilio balance < $10: top up immediately (voice calls will fail)
  • Resend approaching plan limit: upgrade plan before hitting cap
  • Last snapshot older than 30 minutes: ops cron may be down — check /api/ops/collect

4. Check Stripe for New Subscriptions or Payment Failures (Test Mode)​

# New subscriptions in last 24 hours (test mode)
stripe subscriptions list --status active --limit 10

# Recent payment failures
stripe charges list --limit 10

For live mode (when customers exist):

stripe subscriptions list --status active --limit 10 --api-key $STRIPE_LIVE_SECRET_KEY
stripe charges list --limit 10 --api-key $STRIPE_LIVE_SECRET_KEY

Watch for:

  • New subscriptions → welcome and onboarding triggered?
  • Payment failures → follow up with the customer
  • Churn (subscription cancellations) → investigate root cause

5. Check Voice Call Volume​

SELECT
date_trunc('day', created_at) as day,
count(*) as calls
FROM voice_call_logs
WHERE created_at > now() - interval '3 days'
GROUP BY day ORDER BY day DESC;

No calls is expected while there are 3 Stripe subscriptions (1 customer + 2 founder tests). A sudden drop to 0 calls from active customers may indicate the LiveKit voice agent is down.

6. Check Prayer Requests and Callbacks (Last 24 Hours)​

SELECT 'prayer' as type, count(*) as count
FROM voice_prayer_requests
WHERE created_at > now() - interval '24 hours'
UNION ALL
SELECT 'callback', count(*)
FROM voice_callback_requests
WHERE created_at > now() - interval '24 hours';

These should be forwarded to the relevant church contact via email/SMS (verify notifications are working if counts are non-zero but no emails were received).

7. Review FOUNDER_ACTIONS.md for New Items​

Check C:\dev\FOUNDER_ACTIONS.md for any newly added P0 or P1 items that require founder action. If items were added since the last check, surface them clearly.

8. All Clear or Action Plan​

If all checks pass: the system is healthy. Note the check was completed.

If issues found: create a prioritized action list:

  1. P0 issues → fix immediately, don't wait
  2. P1 issues → fix today
  3. P2 issues → add to next sprint backlog

Verification​

  • No unresolved P0 errors in the last 24 hours
  • Service quotas all above safe thresholds
  • Stripe shows no unexpected failures or cancellations
  • FOUNDER_ACTIONS.md has no urgent unaddressed items

See Also​