.claude/skills/ridendine-incident-response/SKILL.md
Master incident response procedures for RidenDine production outages and emergencies. Use when: (1) production outage occurs, (2) database performance degradation, (3) payment processing failures, (4) security incidents, (5) coordinating incident resolution. Key insight: Blameless postmortems, incident commander role, clear communication channels, runbooks for common issues.
npx skillsauth add Ritenoob/ridedine ridendine-incident-responseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Production incidents require rapid response, clear communication, and systematic resolution. RidenDine incidents may involve Supabase database, Vercel web apps, EAS mobile apps, Stripe payments, or third-party integrations.
Use this skill when:
| Severity | Impact | Response Time | Examples | |----------|--------|---------------|----------| | P0 (Critical) | Complete outage, no orders possible | < 15 min | Database down, web app unreachable, payment processing broken | | P1 (High) | Major feature broken, some orders affected | < 1 hour | Chef app broken, delivery tracking down, specific payment method failing | | P2 (Medium) | Minor feature degraded, workaround exists | < 4 hours | Slow page loads, search not working, image uploads failing | | P3 (Low) | Cosmetic issue, no business impact | < 1 day | UI glitch, broken link, typo |
Step 1: Detect (0-5 min)
Step 2: Triage (5-15 min)
Step 3: Communicate (immediate)
Step 4: Investigate (ongoing)
Step 5: Mitigate (ASAP)
Step 6: Resolve (varies)
Step 7: Postmortem (within 48 hours)
Symptoms: Slow queries, high CPU, connection pool exhaustion
Steps:
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
SELECT schemaname, tablename, attname
FROM pg_stats
WHERE n_distinct > 1000
AND attname NOT IN (
SELECT a.attname
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid
WHERE i.indisvalid
);
Symptoms: Orders stuck in "draft", payment webhook not firing
Steps:
curl -X POST https://ridendine.supabase.co/functions/v1/webhook_stripe \
-H "Content-Type: application/json" \
-d '{"test": true}'
supabase functions logs webhook_stripe
Symptoms: Build fails, site unreachable, 500 errors
Steps:
pnpm installvercel rollback
git push origin main
Symptoms: App crashes immediately after opening, high crash rate in Sentry
Steps:
eas buildeas update:rollback --channel production
Initial Alert:
🚨 Incident: [Brief description]
Severity: P[0-3]
Impact: [User-facing impact]
Status: Investigating
ETA: TBD
Incident Commander: @username
Channel: #incident-2024-01-15
Status Update (every 30min for P0/P1):
⏱️ Update [HH:MM]
Status: [Investigating | Mitigating | Resolved]
Progress: [What we've done]
Next Steps: [What's next]
ETA: [Updated estimate]
Resolution:
✅ RESOLVED [HH:MM]
Duration: [Total time]
Root Cause: [Brief explanation]
Fix: [What was done]
Monitoring: [How we're watching for recurrence]
Postmortem: [Link or "within 48 hours"]
Vercel Web/Admin:
# View recent deployments
vercel ls
# Rollback to specific deployment
vercel rollback <deployment-url>
# Or via dashboard: Deployments → ... → Promote to Production
EAS Mobile (OTA Update):
# View update history
eas update:view --channel production
# Rollback to previous update
eas update:rollback --channel production
# Or specify update ID
eas update:rollback --channel production --update-id <id>
Supabase Migration:
# Create rollback migration
supabase migration new rollback_issue_fix
# Write rollback SQL (reverse of original migration)
# Push migration
supabase db push
Edge Function:
# Deploy previous version from git
git checkout <previous-commit>
supabase functions deploy webhook_stripe
Title: [YYYY-MM-DD] [Brief description]
Summary:
Timeline:
Root Cause: [Detailed explanation of what went wrong and why]
Resolution: [What was done to fix the issue]
Impact:
Action Items:
Lessons Learned:
During Incident:
After Incident:
development
Integrate Coinbase crypto payments into payment systems. Use when: (1) adding crypto payment support, (2) building onchain features, (3) implementing wallet functionality. Covers Coinbase Commerce (payment processor) vs CDP (developer platform), Server Wallets, Embedded Wallets, and multi-network support.
development
Add Apple Pay and Google Pay to Stripe checkout. Use when: (1) adding mobile wallet payments, (2) improving mobile conversion, (3) implementing one-tap checkout. Stripe Payment Request Button automatically detects device capabilities and shows Apple Pay (Safari/iOS) or Google Pay (Chrome/Android).
development
Master Vercel deployment for RidenDine web and admin Next.js apps. Use when: (1) deploying to production, (2) configuring environment variables, (3) setting up preview deployments, (4) debugging build failures, (5) configuring domains, (6) seeing "No Next.js version detected" error in Vercel builds, (7) setting up monorepo with separate projects on free tier. Key insight: Vercel monorepos require Root Directory configuration via dashboard (not vercel.json), GitHub integration auto-detects monorepo structure, free tier allows multiple projects.
development
Master Supabase Row Level Security (RLS) for RidenDine. Use when: (1) adding new tables, (2) modifying RLS policies, (3) debugging access control issues, (4) role-based data access. Key insight: All tables use RLS with role-based policies from profiles.role column.