Journey Maps: 8 Critical Flows for VideoKing
Date: April 28, 2026Phase: B (Standardize)
Initiative: T1.2 — Build Journey Maps for Top 8 User and Operator Flows
Reference: VideoKing current state + T1.1 design rubric + design system
Mission
Create one canonical journey map for each critical flow to:- Clarify touchpoints and decision moments for UX design
- Define instrumentation requirements for analytics + observability
- Establish success metrics (conversion, time-to-completion, satisfaction)
- Identify UX debt and quick wins for Phase C (Raise UX Quality)
Part 1: Journey Map Template
Every journey follows this structure:Journey 1: Anonymous Viewer (Watch Video)
User Goal: Watch a free/trial video without signing upContext: User clicks link from YouTube, Twitter, or email; lands on VideoKing
Persona: Prospective subscriber (cold start)
Stage 1: Discovery
Touchpoint: Video landing page with embedded playerMoment of Truth: Video thumbnail + metadata visible within 3 seconds?
UX Debt Identified:
- No preview thumbnail before clicking play (users click blindly)
- Creator name buried in meta; should be prominent
- No estimated video duration shown
- No engagement indicator (view count, rating)
video_page_viewed(page load timestamp)video_player_attempted(when user clicks play)video_player_loaded(when stream starts)
Stage 2: Engagement Decision
Touchpoint: Video player (embedded Stream iframe)Moment of Truth: Does video play without error? (Network, device, permissions)
UX Debt:
- No captions (accessibility + mobile engagement)
- Volume control unclear on mobile (too small)
- No playback speed control (users want 1.5x for long videos)
- No “jump to chapter” if video has segments
video_play_startedvideo_error(if stream fails)video_fullscreen_toggledvideo_playback_speed_changed(when available)
Stage 3: Active Viewing
Touchpoint: Video players + sidebar (related videos, creator channel)Moment of Truth: Do they watch to 50%? 100%? Drop off?
UX Debt:
- No progress bar feedback (where are they in the video?)
- No estimated remaining time
- No “jump forward 10 seconds” or “rewind 5 seconds” buttons
- Sidebar (related videos) loads slowly; users don’t scroll
video_progress_milestone(25%, 50%, 75%, 100%)video_seek(if user scrubs timeline)sidebar_video_clicked(if they click related video)
Stage 4: Post-View Decision
Touchpoint: End card (creator channel, subscribe button, related videos)Moment of Truth: Do they subscribe to watch more, or leave?
UX Debt:
- No indication of subscription benefits (why $4.99?)
- No trust signals (subscriber count, rating)
- “Sign up” button vs “Subscribe” — confusing for trial users
- No email capture if user doesn’t subscribe immediately
video_completedvideo_end_card_shownsubscribe_button_clicked(from end card)creator_channel_clickedvideo_shared
Target Metrics (Phase C)
Journey 2: Signup → Profile Setup
User Goal: Create account and set up initial profileContext: User clicked “Sign up” after watching video (warm lead)
Persona: Converting viewer (intent to subscribe)
Stage 1: Signup Discovery
Touchpoint: Signup modal or dedicated pageMoment of Truth: Does modal appear quickly? Is form clarity high?
UX Debt:
- No autofill hints (browser can’t prefill email)
- Password requirements unclear before user types
- No indication of how long signup takes (“Takes 2 minutes”)
- Social signup fails silently if user denies permissions
signup_modal_shownsignup_method_selected(email vs google vs apple)
Stage 2: Email/Password Entry
Touchpoint: Email input + password inputMoment of Truth: Can user enter credentials without friction?
UX Debt:
- No real-time validation feedback (password strength bar)
- Error messages don’t explain the issue or solution
- No “show password” toggle (users worried about typing mistakes)
- On mobile: keyboard covers password field
signup_email_enteredsignup_email_validatedsignup_password_enteredsignup_validation_error(if email/password invalid)
Stage 3: Email Verification
Touchpoint: Email inbox → verification linkMoment of Truth: Does user click email link quickly? (Time window matters)
UX Debt:
- No countdown timer (“Link expires in 24h”)
- Verification page doesn’t explain what happens next
- No indication of how long verification takes (instant?)
- Broken link handling is generic
signup_verification_email_sentsignup_verification_link_clickedsignup_verification_completesignup_verification_resend_requested(if user doesn’t receive)
Stage 4: Profile Setup + Payment
Touchpoint: Profile name/avatar + subscription tier selectionMoment of Truth: Does user complete payment and become active subscriber?
UX Debt:
- Profile visibility not explained (private vs public)
- No “choose later” option for avatar (users skip)
- No coupon/promo code field
- Checkout doesn’t show what they’re paying for (“Why $4.99?”)
profile_name_enteredprofile_avatar_uploadedtier_selectedcheckout_initiatedpayment_processing(start)payment_completedorpayment_failedaccount_activated
Target Metrics (Phase C)
Journey 3: Subscription Renewal (Monthly)
User Goal: Renew subscription; continue accessContext: Recurring billing event happens in background; user sees update if renewal fails
Persona: Existing subscriber
Stage 1: Billing Alert (Proactive)
Touchpoint: Email reminder (day -7 before renewal)Moment of Truth: Does user know renewal is coming? Can they manage it?
UX Debt:
- No indication of how to cancel without losing access immediately
- No “pause” option (users don’t want to cancel; just pause)
- Renewal amount not shown in email (creates surprise)
- No upsell: “Consider annual plan for 20% savings”
renewal_reminder_email_sentrenewal_reminder_email_openedrenewal_reminder_link_clicked
Stage 2: Automatic Renewal (Background)
Touchpoint: Stripe webhook → database updateMoment of Truth: Does payment process without user noticing? (Ideal) or fail gracefully?
UX Debt:
- No “renewal receipt” email (users can’t find proof of payment)
- Failed renewal doesn’t explain card issues
- No “update payment method” link in failure email
- No fallback: auto-pause if payment fails repeatedly?
subscription_renewal_attemptedsubscription_renewal_successsubscription_renewal_failed
Stage 3: Post-Renewal Access
Touchpoint: Dashboard refresh; video access continuesMoment of Truth: Does user feel assured access continues? Any disruption?
UX Debt:
- No celebration/thank-you moment
- Renewal date is hard to find (buried in account settings)
- No “you now have access to X new videos” notification
subscription_active(after renewal)post_renewal_video_count_shown(how many videos now available)
Target Metrics (Phase C)
Journey 4: Unlock Video (Premium Content)
User Goal: Watch premium/exclusive video as subscriberContext: User is logged in; clicks “watch now” on locked video
Persona: Paid subscriber
Stage 1: Discovery of Locked Content
Touchpoint: Video grid/feed showing lock iconMoment of Truth: Is it clear the video is premium? Can viewer tell?
UX Debt:
- Lock icon not distinctive enough (confused with playback warning)
- No explanation of why content is exclusive
- No value prop (why pay to watch?)
- Clicking lock shows modal; unclear what will happen
locked_video_shownlocked_video_clicked
Stage 2: Unlock Attempt
Touchpoint: “Unlock” modal or immediate access checkMoment of Truth: Does system verify subscription instantly?
UX Debt:
- Error message is generic (“Access denied”)
- Expired subscribers don’t see clear “renew” CTA
- No “gift option” (buy access for another user)
- No “try 7 days free” for non-subscribers
unlock_requestedunlock_access_checkunlock_succeededorunlock_deniedunlock_denial_reason(expired, no subscription, etc.)
Stage 3: Premium Video Playback
Touchpoint: Embedded Stream playing exclusive contentMoment of Truth: Does video play immediately without buffering?
UX Debt:
- Same as Journey 1, but subscribers expect premium experience (faster)
- No indication of being “premium” content while watching (pride/status)
- No “download for offline” even though subscribers typically want this
premium_video_play_startedpremium_video_progress(same checkpoints as Journey 1)premium_video_completed
Target Metrics (Phase C)
Journey 5: Creator Upload Video
User Goal: Record and publish video to audienceContext: Creator (not viewer) opening creator dashboard
Persona: Content creator
Stage 1: Upload Initiation
Touchpoint: “New Video” button in creator dashboardMoment of Truth: Upload form appears; is it clear what to do?
UX Debt:
- No resume capability if upload interrupts
- No progress indicator while uploading
- Mobile: no clear “select file” button (relying on drag-drop)
- No indication of processing time after upload completes
creator_upload_initiatedcreator_upload_file_selected
Stage 2: Metadata Entry
Touchpoint: Title, description, thumbnail inputsMoment of Truth: Can creator complete form without friction?
UX Debt:
- Title character count not shown (users don’t know optimal length)
- Description length suggestion missing (YouTube: 5000 char sweet spot)
- No SEO suggestions (title/description for searchability)
- Thumbnail preview too small; can’t see if faces are visible
creator_metadata_enteredcreator_metadata_validation_error(if required fields missing)
Stage 3: Processing
Touchpoint: Video processing page (transcoding, thumbnail generation)Moment of Truth: Does creator understand it’s processing? How long?
UX Debt:
- No indication of what’s happening (transcoding? thumbnail? )
- Creator might think upload failed
- No “go do something else” guidance
- Processing takes ~20 min for HD video; no timeout handling
creator_video_processing_startedcreator_video_processing_completeor_failedcreator_video_processing_duration_seconds
Stage 4: Publish
Touchpoint: “Publish” button; video goes liveMoment of Truth: Is publish confirmation clear? Can creators undo?
UX Debt:
- Creator can’t preview how video appears in feed before publishing
- No “schedule for later” option
- No indication of who will see it (if privacy = unlisted, which users?)
- No visible “published at [time]” indicator
creator_video_publish_requestedcreator_video_publishedcreator_video_visibility_check(confirm privacy setting understood)
Target Metrics (Phase C)
Journey 6: Creator Connected Account Onboarding
User Goal: Connect Stripe account to receive payoutsContext: Creator has earned $10+; prompted to “set up payments”
Persona: Creator ready to monetize
Stage 1: Onboarding Prompt
Touchpoint: Dashboard banner or in-app notificationMoment of Truth: Creator understands what they’re connecting and why
UX Debt:
- No explanation of what data is shared with Stripe
- No indication of how long onboarding takes
- No FAQ link for common questions
creator_payout_onboarding_showncreator_payout_onboarding_clicked
Stage 2: Stripe Connect Flow
Touchpoint: Redirect to Stripe’s hosted onboardingMoment of Truth: Creator completes Stripe account creation
UX Debt:
- Creator redirected away from VideoKing; feels risky
- No indication of progress (which step of many?)
- If connection fails, no clear recovery path
creator_connect_redirect_to_stripecreator_connect_successor_failedcreator_connect_failure_reason
Stage 3: Account Verification
Touchpoint: Stripe verifies identity (background)Moment of Truth: Does creator understand they must wait for verification?
UX Debt:
- Creator doesn’t know Stripe is verifying in background
- No notification when status changes
- Rejected creators don’t know how to appeal
- No self-serve resolution for common issues (SSN mismatch, etc.)
creator_connect_verification_startedcreator_connect_verification_status(pending, approved, rejected)creator_connect_verification_complete
Stage 4: Payout Confirmation
Touchpoint: Dashboard shows “Account verified ✅”; payouts enabledMoment of Truth: Creator understands they can now receive earnings
UX Debt:
- Creator doesn’t understand payout timing
- No indication of payout fees
- Missing: expected earnings trend (when will next payout happen?)
- No notification when payout sends
creator_connect_verifiedcreator_payout_enabledcreator_earnings_dashboard_viewed
Target Metrics (Phase C)
Journey 7: Payout Operations (Admin/Operator)
User Goal: Execute daily creator payouts; verify no errorsContext: Operator using enterprise dashboard (daily task)
Persona: VideoKing operations team
Stage 1: Payout Review
Touchpoint: Operator dashboard showing pending payoutsMoment of Truth: Operator can quickly review and spot issues
UX Debt:
- No way to exclude a creator from batch (must cancel entire batch)
- No indication of which creators are new (higher risk)
- Missing: payout failure visibility (which creators failed last time?)
- No export option (auditors need CSV)
payout_batch_review_startedpayout_batch_reviewedpayout_batch_anomaly_detected(if system finds suspicious activity)
Stage 2: Execution
Touchpoint: “Execute Payout” button; system creates Stripe transfersMoment of Truth: Payouts succeeded or failed; operator alerted to problems
UX Debt:
- No indication of how long execution takes (could be 5–30 min)
- Failed creators aren’t prioritized (which ones are critical?)
- No “retry failed” button (operator must re-review entire batch)
- System doesn’t explain why each creator failed (account suspended? bank issue?)
payout_batch_execution_startedpayout_transfer_created(per creator)payout_transfer_succeededor_failedpayout_batch_execution_complete
Stage 3: Verification
Touchpoint: Post-execution report; operator reconciles against bank depositsMoment of Truth: Operator confirms all payouts settled correctly
UX Debt:
- No indication of settlement SLA (when should money appear in creator banks?)
- Missing: failed creator automatic email (why they didn’t get paid)
- No audit log (which operator executed? when? any issues?)
- Reconciliation process is manual error-prone
payout_batch_verifiedpayout_settlement_confirmed(webhooks from Stripe)payout_settlement_failed(if webhook indicates issue)
Target Metrics (Phase C)
Journey 8: Content Moderation (Admin)
User Goal: Review flagged content; remove violating videosContext: Operator using moderation queue
Persona: Trust & Safety team
Stage 1: Flagged Content Review
Touchpoint: Moderation queue showing reported videos/commentsMoment of Truth: Operator can quickly see violation details and decide
UX Debt:
- No way to view full report from original reporter (context missing)
- Queue is chronological only (should prioritize high-severity)
- Missing: related content detection (this creator uploaded 5 similar videos?)
- No quick stats (what % of reports are “false alarm”?)
moderation_queue_viewedmoderation_item_reviewed
Stage 2: Moderation Decision
Touchpoint: “Approve” / “Reject” / “Escalate” buttonsMoment of Truth: Operator makes correct decision; system enforces policy consistently
UX Debt:
- No decision reasoning required (audit trail is empty)
- Generic removal email doesn’t explain policy
- No indication of whether decision is consistent (did similar content get approved before?)
- Creator can’t appeal easily
moderation_decision_mademoderation_decision_reasoncontent_removedcreator_notified(of removal)
Stage 3: Appeal Handling
Touchpoint: Creator emails support; appeal request madeMoment of Truth: Creator understands why content was removed and can appeal
UX Debt:
- No appeal form in-product (creator must email)
- Appeal process is manual and slow (no SLA)
- Missing: policy documentation (why was this a violation?)
- No indication of how often appeals are overturned
moderation_appeal_requestedmoderation_appeal_decision(approved or rejected)content_restored(if appeal approved)
Target Metrics (Phase C)
Part 2: Instrumentation Backlog
Priority 1 (Critical for Phase C)
- Journey 1 (Viewer): Add
video_progress_milestoneevents (25%, 50%, 75%, 100%) - Journey 2 (Signup): Add real-time password strength validation feedback
- Journey 3 (Renewal): Add
subscription_renewal_successconfirmation email - Journey 4 (Unlock): Add
unlock_access_checklatency tracking to Sentry - Journey 5 (Creator Upload): Add upload progress (%) + estimated time remaining
- Journey 6 (Creator Onboarding): Add email notifications for verification status changes
- Journey 7 (Payout Ops): Add
payout_batch_verificationautomated reconciliation check - Journey 8 (Moderation): Add LLM-powered content classification with confidence scores
Priority 2 (Nice to have)
- Journey 1: A/B test end-card designs (current vs new CTA layouts)
- Journey 2: Add “password strength meter” to password input
- Journey 3: Test annual subscription upsell in renewal reminder email
- Journey 4: Add “download for offline” feature
- Journey 5: Auto-generate better thumbnails (test current vs AI-generated)
- Journey 6: Self-serve document upload for Stripe verification
- Journey 7: Operator dashboard export (CSV of batch history)
- Journey 8: Policy documentation hub (internal wiki + creator-facing FAQ)
Part 3: UX Debt Summary
High Impact / High Effort (Phase C Initiative):- End-to-end performance sprints — Currently 4–5 touchpoints slow > 2s (page load, email delivery, email verification, video playback, payout execution). Phase C target: ≤1.5s critical path.
- Error messaging overhaul — Currently 30+ error types with generic messages. Phase C: specific, actionable errors + recovery steps.
- Email templates redesign — Currently generic; no personalization. Phase C: branded, mobile-optimized, action-driven templates.
T1.2 Exit Criteria (by May 22, 2026)
- 8 complete journey maps (8 flows described end-to-end)
- Instrumentation backlog for each journey (PostHog events defined)
- Current metrics baseline for each journey (~20 metrics)
- Target metrics (Phase C) for each journey
- UX debt identified (~45 issues across 8 journeys)
- Figma wireframes for Phase C redesigns (starts May 15)
- Prioritized roadmap for Phase C (by Priority 1/2/3)
- Design review schedule (weekly touchpoints May 15+)
Version History
Status: ✅ T1.2 READY FOR DESIGN + ANALYTICS TEAM
Next: T1.3 (Accessibility Audit) + T1.4 (Design System Scope) — starts May 15–22