UAT: Card Pack Migration + Deck Builder

User acceptance testing plan for migrating card pack animations from the /prototype debug harness to production routes (/, /packs, /catalog) and introducing a Hearthstone-inspired deck builder on gskillpacks.com.

1. Evidence & Source Coverage

Current Implementation State

SurfaceStatusSource
Sealed pack tear-to-openImplemented in prototypesrc/components/SealedPack.tsx — drag-X gesture, curl effect, threshold trigger
Card fan-outImplemented in prototypesrc/components/PackOpener.tsx — spring-based fan offsets, rotation jitter
Card flip with benchmark gradesImplemented in prototypesrc/components/SkillCard.tsx + CardFace.tsx — 3D rotateY, A/B/C grade display
Bottom sheet drawerImplemented in prototypesrc/components/BottomSheet.tsx — slide-up, drag-to-dismiss, scrim
Close sequence (7 phases)Implemented in prototypeanimationMachine.ts — sealed → opening-apex → drawer-open → closing-collapse → closing-apex → sheet-exiting → card-settling
Debug harnessLive at /prototypeapp/prototype/page.tsx — DebugProvider, DebugPanel, imperative drivers
HomepageStatic layoutapp/page.tsx — hero blueprint panel, CTA links, no card pack UI
/packs pageStatic layoutapp/packs/page.tsx — filter buttons, static pack summary, no animations
/catalog pageStatic layoutapp/catalog/page.tsx — search/filter, static rows, no card interactions
Deck builderNot implementedRoadmap references VARD, ORD, Business AFPS, Devtool AFPS decks with manifest metadata

Research Evidence Used

Evidence Gaps

2. Target User Personas

Persona A: Developer Evaluating Skillpacks

Role
Solo builder or DX lead considering agentic-skills adoption
Job-to-be-done
Understand what skills are available, see benchmark quality evidence, decide whether to adopt specific packs
Context
Arrives from GitHub README, LexCorp, or search. Has 5-10 minutes of attention. Needs to see value before installing anything.
Acceptance threshold
Can find a relevant pack, open it, read card details including benchmark grades, and understand the skill's purpose within 2 minutes per pack

Persona B: Content Creator Browsing Collections

Role
Non-technical or semi-technical user exploring the catalog visually
Job-to-be-done
Browse skill collections, understand categories at a glance, share interesting finds
Context
Arrives from YouTube, X/Twitter, or Discord. Drawn by card aesthetics. May not install anything but should leave understanding what G Skillpacks offers.
Acceptance threshold
Can navigate between packs, open and close multiple packs without confusion, understand skill categories from card visuals alone

Persona C: Power User Building Workflow Decks

Role
Experienced agentic-skills user who already runs plan → run → ship cycles
Job-to-be-done
Compose custom workflow sequences by dragging skill cards into named decklists (VARD, ORD, Business AFPS, Devtool AFPS)
Context
Knows the pack system. Wants to visualize and share their workflow combos. Expects Hearthstone-style collection management.
Acceptance threshold
Can build a deck of 5+ skills, reorder them, see the workflow sequence validated, and persist the deck across page reloads
Gate: Evidence Sufficiency

Note: The deck builder has no visual UX spec. UAT journeys for it will be based on the Hearthstone-inspired concept description and deck metadata from the roadmap. These journeys test the concept acceptance, not pixel-perfect implementation.

3. Card Pack Migration Journeys

Journey 1: First-Visit Pack Discovery (Persona A)

User goal
Understand what skill packs exist and what they contain
Trigger
Developer clicks "Explore the Library" from homepage hero or navigates to /packs
Setup
Fresh browser session, no prior visits, desktop viewport (1280px+)

Task Sequence

  1. Land on homepage. Verify the hero section loads with card pack visual elements (not the old static blueprint panel).
  2. Identify at least 3 sealed packs visible on the page without scrolling (or within one scroll on smaller viewports).
  3. Hover over a sealed pack. Verify the pack shows a visual affordance that it can be opened (cursor change, hover lift, or label).
  4. Click a sealed pack to open it. Observe: does the tear-to-open animation play? Does the pack visually "unseal"?
  5. Wait for the card fan-out animation. Count the cards revealed. Verify the fan-out completes without visual glitches (no overlapping cards stuck mid-animation, no cards appearing outside the viewport).
  6. Read the first card's front face. Verify: skill name is legible, type badge is visible, benchmark grade (A/B/C) is displayed if the skill has benchmark data, command syntax is shown.
  7. Click a card to flip it. Verify: the 3D flip animation is smooth (no visual tearing), the back face shows description, platform, scope, pack, version, and tags.
  8. Click the card again to flip back to front.
  9. Close the pack (tap scrim, drag drawer down, or use close affordance). Verify the full close sequence plays: cards collapse to a stack, stack rises to apex, bottom sheet slides out, card settles back to sealed position.
  10. Verify the pack now shows an "opened" visual state (torn envelope, different styling from unopened packs).
  11. Navigate to /catalog. Verify skills from the opened pack are browseable in the catalog view.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"As a developer evaluating whether to adopt this skill library, did the pack-opening experience help you understand what's inside each pack? Would you open a second pack, or would you switch to a list/table view?"

Journey 2: Touch-Device Pack Interaction (Persona B)

User goal
Browse and open skill packs on a phone or tablet
Trigger
Content creator taps a link from X/Twitter or Discord on their phone
Setup
Mobile device or tablet (real device preferred, simulator acceptable). iOS Safari and Android Chrome. Portrait orientation.

Task Sequence

  1. Load the homepage on mobile. Verify sealed packs render in a scrollable layout (not cut off or overlapping).
  2. Attempt the tear gesture: place finger on a sealed pack and drag horizontally. Verify the tear/curl visual effect follows the finger position.
  3. Complete the tear past the threshold. Verify the pack opens and the bottom sheet slides up with the card fan-out.
  4. Scroll through the cards in the drawer. Verify scrolling is smooth and does not accidentally dismiss the drawer.
  5. Tap a card to flip it. Verify the tap target is large enough (44px minimum) and the flip triggers reliably on first tap.
  6. Attempt to dismiss the drawer by dragging it down. Verify the drag-to-dismiss threshold feels natural (not too sensitive, not too stiff).
  7. Rotate the device to landscape. Verify the layout reflows without breaking the card grid or cutting off content.
  8. Open a different pack. Verify the previous pack shows its opened state.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"Did you understand how to open a pack without reading instructions? Did any gesture feel like it was fighting the phone's native behavior (scrolling, back, refresh)?"

Journey 3: Multi-Pack Browse & Compare (Persona A)

User goal
Open multiple packs, compare skills across them, find a specific skill
Trigger
Developer wants to compare the "Market Intel" and "Domain Decks" sets to decide which packs to install
Setup
Desktop browser. At least 2 packs with overlapping skill types available.

Task Sequence

  1. Open the "Market Intel" pack. Note which skills are inside (names, types, grades).
  2. Close the pack. Verify the close animation completes cleanly.
  3. Open the "Domain Decks" pack. Note skills inside.
  4. Close the pack.
  5. Verify both packs now show their opened state visually.
  6. Attempt to open both packs simultaneously (click one while another is open). Verify the app handles this gracefully: either queues the second open, prevents it with feedback, or transitions smoothly.
  7. Navigate to /catalog. Search for a skill name seen in one of the opened packs. Verify the catalog search returns the expected skill.
  8. Navigate back to /packs. Verify opened-pack state persists across navigation.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"After browsing 3+ packs, did you feel you could compare skills across packs effectively? Was there anything that made comparing packs harder than it should be?"

Journey 4: Animation Performance Under Load (Persona A)

User goal
Verify animations run at 60fps with no jank on representative hardware
Trigger
QA pass before production deployment
Setup
Chrome DevTools Performance panel open. Test on: (1) modern desktop, (2) mid-range laptop with CPU throttling 4x, (3) mobile device or emulated mobile with CPU throttling 6x.

Task Sequence

  1. Open Chrome DevTools Performance panel. Enable CPU throttling at 4x slowdown.
  2. Start recording. Open a pack with the largest skill count (Foundation or Forge set).
  3. Observe the fan-out animation in the performance trace. Check for long frames (>16.6ms).
  4. Flip 3 cards in sequence while recording.
  5. Close the pack and observe the close sequence in the trace.
  6. Stop recording. Analyze the flame chart for layout thrashing, excessive paint, or JS long tasks during animations.
  7. Repeat at 6x CPU throttle to simulate low-end mobile.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"At what throttle level did the animations start to feel sluggish? Which specific animation phase was worst?"

4. Deck Builder Journeys

Note: No visual UX spec exists for the deck builder. These journeys test concept acceptance based on the Hearthstone-inspired description and VARD/ORD/AFPS deck metadata from the roadmap. Implementation details (layout, slot count, drag mechanics) are assumptions subject to the evidence gate above.

Journey 5: First Deck Creation (Persona C)

User goal
Build a custom workflow deck representing their preferred skill sequence
Trigger
Power user navigates to a "Deck Builder" or "Build a Deck" entry point from the packs or catalog page
Setup
Desktop browser. User has browsed at least 2 packs. 4 deck slots available: VARD, ORD, Business AFPS, Devtool AFPS.

Task Sequence

  1. Find the deck builder entry point. Verify it is discoverable from the main navigation or the packs page (not hidden in a submenu or requiring a direct URL).
  2. See the 4 available deck templates (VARD, ORD, Business AFPS, Devtool AFPS). Verify each has a name, a short description of its workflow purpose, and a visual theme.
  3. Select the "Devtool AFPS" deck to start building.
  4. Browse available skill cards in a sidebar or panel. Verify skills are filterable by pack, type, or search.
  5. Drag a skill card from the available pool into the deck. Verify: drag feedback is visible (card follows cursor, drop zone highlights), the card snaps into a slot on drop.
  6. Add 4 more skills to the deck (5 total). Verify the deck shows skills in the order they were added.
  7. Reorder a skill by dragging it to a different position in the deck. Verify the reorder animation is smooth and the new order persists.
  8. Remove a skill by dragging it out of the deck or using a remove affordance. Verify the slot empties and remaining skills reflow.
  9. Verify the deck shows a workflow sequence indicator: arrows or connectors between skills showing the execution order.
  10. Save the deck (or verify it auto-saves). Navigate away and return. Verify the deck contents persist.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"Did the deck-building experience feel like composing a workflow, or just collecting cards into a list? Did the deck template themes (VARD, ORD, etc.) help you understand what kind of workflow you were building?"

Journey 6: Deck Workflow Validation (Persona C)

User goal
Verify that the deck's skill sequence represents a valid workflow chain
Trigger
Power user finishes building a deck and wants to validate it makes sense as a workflow
Setup
A deck with 5+ skills already built. Include at least one skill that would be out of sequence (e.g., /ship before /plan).

Task Sequence

  1. View the completed deck. Look for workflow validation indicators (green checkmarks, warning icons, sequence arrows).
  2. Deliberately place a skill out of canonical order (e.g., add /ship as the first skill, before any planning skill).
  3. Check whether the deck builder shows a warning or suggestion about the out-of-order placement.
  4. Correct the order. Verify the warning resolves.
  5. Add a skill from a pack not associated with the deck's theme (e.g., a game pack skill in a Devtool AFPS deck). Check whether the deck builder flags or permits cross-pack skills.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"Did the validation help you understand the canonical workflow order, or did it feel like an arbitrary constraint? Would you want stricter or looser validation?"

5. Cross-Cutting Journeys

Journey 7: Homepage-to-Deck Full Funnel (Persona A)

User goal
Complete the full discovery-to-engagement funnel: land on homepage, explore packs, build a deck, understand the product value
Trigger
Developer arrives from GitHub README link
Setup
Fresh browser session. Desktop viewport. No prior visits.

Task Sequence

  1. Land on homepage. Within the first viewport, identify what G Skillpacks is and what the primary action is.
  2. Click the primary CTA. Verify it leads to an interactive experience (not a static page).
  3. Open one pack. Read 2-3 cards. Close the pack.
  4. Navigate to the deck builder (from nav or in-page link).
  5. Build a small deck (3 skills). Verify the deck reflects what you browsed.
  6. Navigate to /catalog. Search for a specific skill by name. Verify it appears.
  7. Navigate to /follow. Verify the page has working links to GitHub, YouTube, Discord, LexCorp.
  8. Return to the homepage. Verify the page state is consistent (opened packs still shown as opened).

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"After completing the full loop, could you explain to someone else what G Skillpacks is and why they might want it? What was the most compelling moment in the experience? What was the weakest?"

Journey 8: Accessibility & Reduced Motion (Persona B)

User goal
Navigate the full pack-opening experience using keyboard only and with reduced motion enabled
Trigger
Accessibility audit before production launch
Setup
Desktop browser. Enable prefers-reduced-motion: reduce in OS or DevTools. Disconnect mouse.

Task Sequence

  1. Tab through the page. Verify all sealed packs are focusable and have visible focus indicators.
  2. Press Enter or Space on a focused pack. Verify the pack opens (with reduced or no animation).
  3. Tab through the revealed cards in the drawer. Verify each card is focusable.
  4. Press Enter on a card. Verify it flips (with reduced or no animation).
  5. Press Escape. Verify the drawer closes and focus returns to the pack that was opened.
  6. Verify all animations are either eliminated or reduced to simple opacity/position transitions (no spring physics, no 3D transforms).
  7. Enable a screen reader (VoiceOver on macOS, NVDA on Windows). Verify pack names, skill names, and state changes are announced.

Acceptance Criteria

Non-Acceptance Signals

Evidence to Capture

Tester Notes Prompt

"Could you accomplish everything a mouse user can with keyboard alone? Did any interaction feel like it was designed only for mouse/touch?"

Gate: Acceptance Criteria Review
Gate: Scope & Non-Goals

Explicit Non-Goals for This UAT

Gate: Proposed File Changes
FileActionContent
research/uat-plan.mdCreateFull UAT plan with 8 journeys, persona definitions, evidence sources, acceptance criteria, result log templates
tasks/manual-todo.mdUpdate ## UAT Journeys8 human-run journey checklist items referencing research/uat-plan.md
alignment/uat-card-pack-migration.htmlAlready writtenThis page
Gate: Coverage Checkpoint
SurfaceJourneysCoverage
Card pack animationsJ1 (desktop open/close), J2 (touch), J4 (performance)Happy path, touch, perf profiling
Site migrationJ3 (multi-pack), J7 (full funnel), J8 (a11y)State persistence, cross-route nav, keyboard/screen reader
Deck builderJ5 (creation), J6 (validation)Build flow, sequence validation, persistence
Cross-cuttingJ7 (full funnel), J8 (a11y)End-to-end flow, reduced motion, screen reader
Gate: Final Approval

Compile Section

Use "Compile Feedback YAML" for revision requests on specific sections. Use "Compile Answers" when all required gates have selections to approve or reject the deliverables.