Skip to main content

Journey Maps: 8 Critical Flows for VideoKing

Date: April 28, 2026
Phase: 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)
Each journey becomes the specification for UI redesign, feature planning, and analytics.

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 up
Context: 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 player
Moment 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)
Analytics Events Needed:
  • 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
Analytics Events Needed:
  • video_play_started
  • video_error (if stream fails)
  • video_fullscreen_toggled
  • video_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
Analytics Events Needed:
  • 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
Analytics Events Needed:
  • video_completed
  • video_end_card_shown
  • subscribe_button_clicked (from end card)
  • creator_channel_clicked
  • video_shared
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 2: Signup → Profile Setup

User Goal: Create account and set up initial profile
Context: User clicked “Sign up” after watching video (warm lead)
Persona: Converting viewer (intent to subscribe)

Stage 1: Signup Discovery

Touchpoint: Signup modal or dedicated page
Moment 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
Analytics Events Needed:
  • signup_modal_shown
  • signup_method_selected (email vs google vs apple)

Stage 2: Email/Password Entry

Touchpoint: Email input + password input
Moment 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
Analytics Events Needed:
  • signup_email_entered
  • signup_email_validated
  • signup_password_entered
  • signup_validation_error (if email/password invalid)

Stage 3: Email Verification

Touchpoint: Email inbox → verification link
Moment 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
Analytics Events Needed:
  • signup_verification_email_sent
  • signup_verification_link_clicked
  • signup_verification_complete
  • signup_verification_resend_requested (if user doesn’t receive)

Stage 4: Profile Setup + Payment

Touchpoint: Profile name/avatar + subscription tier selection
Moment 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?”)
Analytics Events Needed:
  • profile_name_entered
  • profile_avatar_uploaded
  • tier_selected
  • checkout_initiated
  • payment_processing (start)
  • payment_completed or payment_failed
  • account_activated
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 3: Subscription Renewal (Monthly)

User Goal: Renew subscription; continue access
Context: 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”
Analytics Events Needed:
  • renewal_reminder_email_sent
  • renewal_reminder_email_opened
  • renewal_reminder_link_clicked

Stage 2: Automatic Renewal (Background)

Touchpoint: Stripe webhook → database update
Moment 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?
Analytics Events Needed:
  • subscription_renewal_attempted
  • subscription_renewal_success
  • subscription_renewal_failed

Stage 3: Post-Renewal Access

Touchpoint: Dashboard refresh; video access continues
Moment 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
Analytics Events Needed:
  • subscription_active (after renewal)
  • post_renewal_video_count_shown (how many videos now available)
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 4: Unlock Video (Premium Content)

User Goal: Watch premium/exclusive video as subscriber
Context: 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 icon
Moment 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
Analytics Events Needed:
  • locked_video_shown
  • locked_video_clicked

Stage 2: Unlock Attempt

Touchpoint: “Unlock” modal or immediate access check
Moment 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
Analytics Events Needed:
  • unlock_requested
  • unlock_access_check
  • unlock_succeeded or unlock_denied
  • unlock_denial_reason (expired, no subscription, etc.)

Stage 3: Premium Video Playback

Touchpoint: Embedded Stream playing exclusive content
Moment 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
Analytics Events Needed:
  • premium_video_play_started
  • premium_video_progress (same checkpoints as Journey 1)
  • premium_video_completed
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 5: Creator Upload Video

User Goal: Record and publish video to audience
Context: Creator (not viewer) opening creator dashboard
Persona: Content creator

Stage 1: Upload Initiation

Touchpoint: “New Video” button in creator dashboard
Moment 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
Analytics Events Needed:
  • creator_upload_initiated
  • creator_upload_file_selected

Stage 2: Metadata Entry

Touchpoint: Title, description, thumbnail inputs
Moment 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
Analytics Events Needed:
  • creator_metadata_entered
  • creator_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
Analytics Events Needed:
  • creator_video_processing_started
  • creator_video_processing_complete or _failed
  • creator_video_processing_duration_seconds

Stage 4: Publish

Touchpoint: “Publish” button; video goes live
Moment 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
Analytics Events Needed:
  • creator_video_publish_requested
  • creator_video_published
  • creator_video_visibility_check (confirm privacy setting understood)
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 6: Creator Connected Account Onboarding

User Goal: Connect Stripe account to receive payouts
Context: Creator has earned $10+; prompted to “set up payments”
Persona: Creator ready to monetize

Stage 1: Onboarding Prompt

Touchpoint: Dashboard banner or in-app notification
Moment 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
Analytics Events Needed:
  • creator_payout_onboarding_shown
  • creator_payout_onboarding_clicked

Stage 2: Stripe Connect Flow

Touchpoint: Redirect to Stripe’s hosted onboarding
Moment 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
Analytics Events Needed:
  • creator_connect_redirect_to_stripe
  • creator_connect_success or _failed
  • creator_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.)
Analytics Events Needed:
  • creator_connect_verification_started
  • creator_connect_verification_status (pending, approved, rejected)
  • creator_connect_verification_complete

Stage 4: Payout Confirmation

Touchpoint: Dashboard shows “Account verified ✅”; payouts enabled
Moment 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
Analytics Events Needed:
  • creator_connect_verified
  • creator_payout_enabled
  • creator_earnings_dashboard_viewed
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 7: Payout Operations (Admin/Operator)

User Goal: Execute daily creator payouts; verify no errors
Context: Operator using enterprise dashboard (daily task)
Persona: VideoKing operations team

Stage 1: Payout Review

Touchpoint: Operator dashboard showing pending payouts
Moment 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)
Analytics Events Needed:
  • payout_batch_review_started
  • payout_batch_reviewed
  • payout_batch_anomaly_detected (if system finds suspicious activity)

Stage 2: Execution

Touchpoint: “Execute Payout” button; system creates Stripe transfers
Moment 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?)
Analytics Events Needed:
  • payout_batch_execution_started
  • payout_transfer_created (per creator)
  • payout_transfer_succeeded or _failed
  • payout_batch_execution_complete

Stage 3: Verification

Touchpoint: Post-execution report; operator reconciles against bank deposits
Moment 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
Analytics Events Needed:
  • payout_batch_verified
  • payout_settlement_confirmed (webhooks from Stripe)
  • payout_settlement_failed (if webhook indicates issue)
Current Metrics (Baseline) Target Metrics (Phase C)

Journey 8: Content Moderation (Admin)

User Goal: Review flagged content; remove violating videos
Context: Operator using moderation queue
Persona: Trust & Safety team

Stage 1: Flagged Content Review

Touchpoint: Moderation queue showing reported videos/comments
Moment 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”?)
Analytics Events Needed:
  • moderation_queue_viewed
  • moderation_item_reviewed

Stage 2: Moderation Decision

Touchpoint: “Approve” / “Reject” / “Escalate” buttons
Moment 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
Analytics Events Needed:
  • moderation_decision_made
  • moderation_decision_reason
  • content_removed
  • creator_notified (of removal)

Stage 3: Appeal Handling

Touchpoint: Creator emails support; appeal request made
Moment 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
Analytics Events Needed:
  • moderation_appeal_requested
  • moderation_appeal_decision (approved or rejected)
  • content_restored (if appeal approved)
Current Metrics (Baseline) Target Metrics (Phase C)

Part 2: Instrumentation Backlog

Priority 1 (Critical for Phase C)

  • Journey 1 (Viewer): Add video_progress_milestone events (25%, 50%, 75%, 100%)
  • Journey 2 (Signup): Add real-time password strength validation feedback
  • Journey 3 (Renewal): Add subscription_renewal_success confirmation email
  • Journey 4 (Unlock): Add unlock_access_check latency 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_verification automated 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):
  1. 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.
  2. Error messaging overhaul — Currently 30+ error types with generic messages. Phase C: specific, actionable errors + recovery steps.
  3. Email templates redesign — Currently generic; no personalization. Phase C: branded, mobile-optimized, action-driven templates.
Medium Impact / Medium Effort: 4. Creator discoverability (trending creators, recommendations) 5. Social sharing + viral loops 6. Subscription tier feature differentiation (why pay more?) 7. Operator task automation (bulk actions, auto-retry) Low Impact / Low Effort (Quick Wins): 8. Add “estimated time” to processing steps 9. Show creator view counts + ratings on end cards 10. Add “pause subscription” option (reduces churn) 11. Highlight next renewal date on dashboard 12. Add appeal form in-product (instead of email)

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