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.mdflagged 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:
- P0 issues → fix immediately, don't wait
- P1 issues → fix today
- 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