Production Checklist
Complete these steps before launching to real customers.
๐ Stripe Configuration
โ Enable Live Mode
- [ ] Switch Stripe dashboard from Test mode to Live mode
- [ ] Get new API keys from Live mode
- [ ] Update
STRIPE_SECRET_KEYsecret with live key:npx wrangler secret put STRIPE_SECRET_KEY # Enter your sk_live_... key
โ Update Webhook Endpoint
- [ ] Delete test mode webhook endpoint
- [ ] Create new webhook in Live mode:
- URL:
https://beatflow-api.terry-c67.workers.dev/api/webhooks/stripe - Events:
checkout.session.completed,account.updated,payment_intent.payment_failed
- URL:
- [ ] Update
STRIPE_WEBHOOK_SECRETwith live signing secret:npx wrangler secret put STRIPE_WEBHOOK_SECRET # Enter your live whsec_... secret
โ Platform Fee Configuration
- [ ] Review platform fee percentage in
workers/wrangler.toml:PLATFORM_FEE_PERCENT = "10" # Adjust as needed - [ ] Deploy updated config:
cd workers && npm run deploy
โ ๏ธ Critical - Using test mode keys in production will prevent real transactions. Always verify you're in Live mode before launch.
๐ Domain Configuration
โ Custom Domain for Frontend
- [ ] Purchase domain (e.g.,
beatdrop.com) - [ ] Add domain to Cloudflare Pages:
Dashboard โ Pages โ beatflow โ Custom domains โ Add - [ ] Update DNS records (Cloudflare handles this automatically)
- [ ] Update
FRONTEND_URLinworkers/wrangler.toml:FRONTEND_URL = "https://beatdrop.com"
โ Custom Domain for API (Optional)
- [ ] Configure custom domain for Workers:
Dashboard โ Workers โ Routes โ Add route - [ ] Route pattern:
api.beatdrop.com/*โbeatflow-apiworker - [ ] Update frontend
.env:VITE_API_BASE=https://api.beatdrop.com - [ ] Update Stripe webhook URL to use custom domain
๐ Security
โ Rate Limiting
- [ ] Enable Cloudflare WAF (Web Application Firewall)
- [ ] Configure rate limiting rules:
- Checkout endpoint: 5 requests/minute per IP
- Download endpoint: 10 requests/hour per token
- [ ] Or implement KV-based rate limiting (see API docs)
โ CORS Configuration
- [ ] Verify
FRONTEND_URLmatches your production domain - [ ] Test CORS headers in production
- [ ] Ensure no wildcard CORS (
*) in production
โ Secrets Audit
- [ ] Verify all secrets are set in production:
npx wrangler secret list - [ ] Required secrets:
STRIPE_SECRET_KEY(live mode)STRIPE_WEBHOOK_SECRET(live mode)
- [ ] Remove any test/development secrets
๐ File Management
โ R2 Bucket Organization
- [ ] Create folder structure in R2:
beatdrop-files/ โโโ beats/ # Audio files โโโ covers/ # Album art โโโ stems/ # Stem files (ZIP) โโโ licenses/ # License PDFs - [ ] Upload license agreement PDFs for each tier:
licenses/basic.pdflicenses/premium.pdflicenses/exclusive.pdf
โ Seller Upload Flow
- [ ] Implement presigned upload URLs (currently manual R2 upload)
- [ ] Build seller dashboard for beat management
- [ ] Add file validation (format, size limits)
๐ฐ Business Operations
โ Legal Documents
- [ ] Create Terms of Service
- [ ] Create Privacy Policy
- [ ] Create Seller Agreement
- [ ] License agreement PDFs for each tier
- [ ] Add links to footer of website
โ Platform Settings
- [ ] Confirm platform fee percentage (default: 10%)
- [ ] Set minimum beat price (if desired)
- [ ] Configure seller payout schedule (Stripe default: 2-day rolling)
โ Seller Onboarding Process
- [ ] Test complete seller onboarding flow
- [ ] Verify Stripe Connect identity verification works
- [ ] Ensure seller dashboard shows accurate data
- [ ] Test payout flow (use Stripe test mode first)
๐ Monitoring & Analytics
โ Cloudflare Analytics
- [ ] Enable Cloudflare Analytics for Pages
- [ ] Enable Workers Analytics
- [ ] Set up alerts for high error rates
โ Stripe Dashboard Monitoring
- [ ] Bookmark Stripe Dashboard sections:
- Payments
- Connect (sellers)
- Webhooks
- [ ] Set up email alerts for failed webhooks
- [ ] Configure revenue reports
โ D1 Database Monitoring
- [ ] Monitor D1 query performance in Cloudflare dashboard
- [ ] Set up alerts for database errors
- [ ] Schedule regular backups (D1 auto-backups, but export periodically)
๐งช Testing
โ End-to-End Testing
- [ ] Complete seller onboarding flow (production Stripe Connect)
- [ ] Upload sample beat and verify files in R2
- [ ] Complete test purchase (use live mode test card)
- [ ] Verify download links work
- [ ] Test webhook delivery
- [ ] Verify seller receives payout
โ Browser Testing
- [ ] Test on Chrome, Firefox, Safari, Edge
- [ ] Test on mobile (iOS Safari, Android Chrome)
- [ ] Test audio player on all platforms
- [ ] Verify checkout flow on mobile
๐ Deployment
โ Final Deployment Steps
- [ ] Deploy Workers with live Stripe keys:
cd workers && npm run deploy - [ ] Deploy frontend with production API URL:
npm run build && npx wrangler pages deploy dist - [ ] Verify all endpoints respond correctly
- [ ] Test complete purchase flow end-to-end
๐ข Launch Preparation
โ Marketing & Branding
- [ ] Finalize brand name and logo
- [ ] Create social media accounts
- [ ] Prepare launch announcement
- [ ] Set up customer support email
โ Content
- [ ] Create "How It Works" page
- [ ] Write seller onboarding guide
- [ ] Prepare FAQ section
- [ ] Add pricing comparison chart
โ
Ready to Launch! - Once all items are checked, you're ready to go live. Start with soft launch to a small group, then scale up.
Post-Launch Monitoring (First 48 Hours)
- [ ] Monitor Stripe webhook success rate (should be >99%)
- [ ] Check Cloudflare Workers error logs
- [ ] Verify download links are working
- [ ] Monitor seller onboarding completion rate
- [ ] Check for any CORS errors in browser console
- [ ] Monitor R2 storage usage
- [ ] Watch for any failed transactions
Ongoing Maintenance
Weekly
- Review Stripe payouts to sellers
- Check for failed webhooks
- Monitor platform revenue
Monthly
- Review Cloudflare usage (approaching free tier limits?)
- Audit D1 database for orphaned records
- Check R2 storage usage
- Review seller feedback
Quarterly
- Update dependencies (npm, Wrangler)
- Review and update legal documents
- Analyze platform metrics and growth