Scroll to explore
Launch Readiness & QA Checklist
Check off blockers as verified. Cross-browser matrix below.
0%
blockers verified
0 / 28 critical
Signup / Login
Auth redirect after login drops user on Home, not previous page
warning
Guest users accessing /Profile or /Studio get a clean redirect-to-login, not a crash
blocker
Magic link email deliverability confirmed
blocker
User role assignment (fan vs creator) fires correctly on first login
blocker
Onboarding
GenreOnboarding skipped for returning users (no loop)
blocker
Creator compliance check does not block fan users
blocker
AIArtistIntroModal does not auto-trigger on first session (Phase 1B disabled)
warning
ProfileSetupModal does not auto-fire (Phase 1B disabled)
info
Pricing / Checkout
Stripe checkout opens correctly for fan_premium and creator plans
blocker
Successful checkout updates Subscription record (webhook fires)
blocker
Plans page shows correct prices matching Stripe dashboard
blocker
Trial period (if any) shown on checkout UI before confirmation
warning
Billing portal link in Settings opens correct Stripe portal
warning
Past-due banner shown for past_due subscriptions
blocker
Creator Dashboard
Non-creator users (fans) cannot access /Studio or creator-only routes
blocker
Earnings section shows correct net_eligible_cents, not raw gross
blocker
Payout profile (Stripe Connect) onboarding link works end-to-end
blocker
Release capacity counter reflects actual remaining capacity
blocker
AI Artist creation enforces plan limits (1 for free, 3+ for Pro)
warning
Track analytics show legitimate_plays, not total plays
warning
Tracks in taken_down state are visible to creator but marked clearly
warning
Upload / Publish Flow
Audio upload validates file type (MP3/WAV only) client-side before upload
blocker
Upload fails gracefully with user-visible error (not silent)
blocker
Release capacity check fires before upload starts, not after
blocker
Legal attestation checkbox required before publish button activates
blocker
Suno attestation flow shown when Suno is selected as ai_tool_used
warning
ISRC auto-generated on publish (not on draft save)
warning
Track goes to draft state correctly on save (not immediately public)
blocker
Restricted users (access_restriction active) cannot publish (UI blocks)
blocker
Playback / Discovery
taken_down tracks return 404/blocked on playback, not audio
blocker
playback_blocked=true tracks are not streamable from any surface
blocker
Guest users can browse Home/Feed but cannot play tracks (sign-up prompt)
warning
Playback heartbeat events fire during streaming (no silent drop)
warning
Stream qualification does not count fraud-flagged plays toward royalties
blocker
Cuts playback works on mobile (vertical video, muted by default)
warning
Statements / Payouts
Creator can view their own statements (/Earnings or similar)
blocker
Statement shows correct breakdown by track
blocker
JSON export downloads correctly (not opens in browser tab)
warning
CSV export has correct column headers and cents vs dollars is labeled clearly
warning
Payout history shows SENT/FAILED payouts with correct dates
blocker
Creators without Stripe Connect see a setup prompt, not a blank payout section
blocker
Moderation / Admin Pages
Non-admin users cannot access /AdminPayouts, /AdminModerationQueue etc
blocker
Admin complaint queue loads OPEN complaints by default
warning
Ops dashboard alert feed shows current open alerts (not empty)
warning
Payout approval button disabled until reason entered (reject flow)
warning
Repair toolkit escalation path prevents financial record mutations
blocker
Reconciliation queue shows critical findings highlighted in red
warning
Cross-Browser / Cross-Device QA Matrix
Manually test each flow on each device. Click cells to cycle status.
Signup / Login
| Test Case | iPhone Safari | Android Chrome | Desktop Chrome | Desktop Safari |
|---|---|---|---|---|
| Create new account (email) | — | — | — | — |
| Login with existing account | — | — | — | — |
| Redirect to Home after login | — | — | — | — |
| Guest redirect to login on protected route | — | — | — | — |
Checkout
| Test Case | iPhone Safari | Android Chrome | Desktop Chrome | Desktop Safari |
|---|---|---|---|---|
| Purchase fan_premium plan | — | — | — | — |
| Purchase creator plan | — | — | — | — |
| Failed payment shows error | — | — | — | — |
| Subscription record created after success | — | — | — | — |
Upload
| Test Case | iPhone Safari | Android Chrome | Desktop Chrome | Desktop Safari |
|---|---|---|---|---|
| Upload MP3 audio file | — | — | — | — |
| Reject non-audio file with visible error | — | — | — | — |
| Complete publish with legal attestation | — | — | — | — |
| Verify track appears in library | — | — | — | — |
Playback
| Test Case | iPhone Safari | Android Chrome | Desktop Chrome | Desktop Safari |
|---|---|---|---|---|
| Play a public track end-to-end | — | — | — | — |
| Verify taken_down track is unplayable | — | — | — | — |
| Play track on mobile without layout break | — | — | — | — |
| Cuts viewer opens and plays | — | — | — | — |
Payouts / Statements
| Test Case | iPhone Safari | Android Chrome | Desktop Chrome | Desktop Safari |
|---|---|---|---|---|
| View earnings statement | — | — | — | — |
| Export statement as CSV | — | — | — | — |
| View payout history list | — | — | — | — |
| Stripe Connect onboarding prompt for new creator | — | — | — | — |
⚠️ Known Remaining Blind Spots
•Upload pipeline (uploadAudio.js / validateAndUploadAudio.js) — emitAlert not wired into media failure catch paths. Needs manual addition.
•stripeWebhook invoice.payment_failed does not emit an OperatorAlert (only sends email). Consider adding alert for repeated payment failures per user.
•Settlement automation partial_failure (totalFailed > 0 but totalAdvanced > 0) does not emit an alert — only fatal crashes do. Add warning-level alert for partial failures.
•No alert when a Payout stays PENDING_APPROVAL for > 7 days (scanForAlerts only checks APPROVED→stuck). Add threshold check.
•Content fingerprinting / duplicate detection results are not surfaced in ops dashboard.
•PDF export of statements is frontend-rendered (jsPDF) and not tested on all browsers. Safari may block blob downloads.
•MUX/Bunny webhook failures (muxWebhook.js, bunnyWebhook.js) have no OperatorAlert wiring.