Files
GearBox/.planning/milestones/v2.2-phases/30-onboarding-redesign/30-UI-SPEC.md
Jean-Luc Makiola 2853477a75
All checks were successful
CI / ci (push) Successful in 1m15s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
chore: archive v2.2 User Experience Polish milestone
Phases 28-31 archived to milestones/v2.2-phases/
Requirements and roadmap snapshots archived to milestones/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:00:35 +02:00

7.1 KiB

phase, slug, status, shadcn_initialized, preset, created
phase slug status shadcn_initialized preset created
30 onboarding-redesign draft false none 2026-04-12

Phase 30 — UI Design Contract

Visual and interaction contract for the onboarding redesign. Generated by gsd-ui-researcher, verified by gsd-ui-checker.


Design System

Property Value
Tool none
Preset not applicable
Component library none (pure Tailwind)
Icon library Lucide via LucideIcon from lib/iconData
Font System font stack (Tailwind default)

Spacing Scale

Declared values (must be multiples of 4):

Token Value Usage
xs 4px Icon gaps, inline badge padding
sm 8px Compact element spacing, tag gaps
md 16px Default element spacing, card padding
lg 24px Section padding, step content margins
xl 32px Step container padding
2xl 48px Major section breaks between steps
3xl 64px Page-level vertical padding (step centering)

Exceptions: Hobby cards use 20px internal padding (5 in Tailwind) for visual balance with icons.


Typography

Role Size Weight Line Height Tailwind Class
Body 14px 400 (normal) 1.5 text-sm text-gray-500
Label 12px 500 (medium) 1.25 text-xs font-medium text-gray-400
Heading 18px 600 (semibold) 1.33 text-lg font-semibold text-gray-900
Display 30px 700 (bold) 1.2 text-3xl font-bold text-gray-900
Step Subtitle 16px 400 (normal) 1.5 text-base text-gray-500

Color

Role Value Usage
Dominant (60%) #FFFFFF / white Full-screen backgrounds, step containers
Secondary (30%) #F9FAFB / gray-50 Card backgrounds, hobby card default state, item grid background
Accent (10%) #374151 / gray-700 Primary CTA buttons, active step indicator, selected hobby card border
Destructive #DC2626 / red-600 Not used in onboarding (no destructive actions)

Accent reserved for: Primary "Get Started" / "Confirm" / "Continue" buttons, active progress indicator segment, selected hobby card outline ring.

Selection States

State Visual Treatment
Hobby card default bg-gray-50 border border-gray-200 rounded-2xl
Hobby card hover border-gray-300 shadow-sm
Hobby card selected border-gray-700 ring-2 ring-gray-700/20 bg-white
Item card default bg-white border border-gray-100 rounded-xl
Item card hover border-gray-200 shadow-sm
Item card selected border-gray-700 ring-2 ring-gray-700/20 with checkmark overlay

Copywriting Contract

Element Copy
Welcome heading "Welcome to GearBox"
Welcome body "Tell us what you're into, and we'll help you set up your collection with gear that people actually use."
Primary CTA (welcome) "Let's go"
Hobby picker heading "What are you into?"
Hobby picker body "Pick one or more — we'll show you popular gear for each."
Item browser heading "Popular gear for {hobby}"
Item browser body "Tap items you already own. We'll add them to your collection."
Item browser empty state heading "No gear cataloged yet"
Item browser empty state body "We're still building our catalog for this hobby. You can skip this step and add gear manually later."
Review heading "Your starting collection"
Review body "{N} items ready to add"
Review CTA "Add to my collection"
Review empty "No items selected — you can always add gear later from the catalog."
Skip link "Skip this step"
Done heading "You're all set!"
Done body "Your collection is ready. Browse the catalog anytime to discover more gear."
Done CTA "Start exploring"

Component Inventory

OnboardingFlow (top-level)

Full-screen overlay replacing the current OnboardingWizard. Renders when onboardingComplete !== "true" and user is authenticated.

Layout: fixed inset-0 z-50 bg-white
Step container: flex flex-col items-center justify-center min-h-screen px-8
Max content width: max-w-2xl (672px) for text steps, max-w-5xl (1024px) for item grid

Step Indicator

Full-width horizontal progress bar at the top of every step.

Container: fixed top-0 left-0 right-0 h-1 bg-gray-100
Progress fill: h-1 bg-gray-700 transition-all duration-500
Steps: Welcome=25%, Hobby=50%, Browse=75%, Review/Done=100%

HobbyCard

Visual card for hobby selection. Displays icon + name + short descriptor.

Layout: w-40 h-40 flex flex-col items-center justify-center gap-3 p-5 rounded-2xl cursor-pointer transition-all
Icon: LucideIcon size={32}
Name: text-sm font-semibold text-gray-900
Descriptor: text-xs text-gray-400
Grid: flex flex-wrap justify-center gap-4

Hobby card data:

Hobby Icon Descriptor
Bikepacking bike Ride & camp
Hiking mountain Trail gear
Climbing mountain-snow Vertical kit
Cycling circle-dot Road & gravel
Camping tent Base camp
Running footprints Run light

SelectableItemCard

Extends GlobalItemCard visual pattern with selection overlay.

Layout: Same as GlobalItemCard (bg-white rounded-xl border border-gray-100)
Selection overlay: absolute top-2 right-2, 24x24 circle
Unselected: border-2 border-gray-200 bg-white rounded-full
Selected: bg-gray-700 border-gray-700 rounded-full with white check icon (size 14)
Grid: grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-4

ReviewList

Summary of selected items grouped by category.

Category heading: text-xs font-medium text-gray-400 uppercase tracking-wide
Item row: flex items-center gap-3 py-2 border-b border-gray-50
Item image: w-10 h-10 rounded-lg object-cover bg-gray-50
Item name: text-sm text-gray-900
Remove button: text-gray-300 hover:text-red-500, X icon (size 16)

Transitions

Step transitions use CSS transitions (no framer-motion dependency):

Enter: opacity-0 translate-y-4 → opacity-100 translate-y-0 (duration-300 ease-out)
Exit: opacity-100 translate-y-0 → opacity-0 -translate-y-4 (duration-200 ease-in)

Implementation: conditionally render steps with Tailwind transition classes and a brief setTimeout for exit animation before switching step state.


Responsive Behavior

Breakpoint Behavior
Mobile (<640px) Single column item grid, hobby cards 2-across, step content full-width with px-6
Tablet (640-1024px) 2-3 column item grid, hobby cards 3-across
Desktop (>1024px) 4-column item grid, hobby cards in single centered row

Registry Safety

Registry Blocks Used Safety Gate
No external registries none not required

All components are custom Tailwind — no shadcn or third-party UI blocks.


Checker Sign-Off

  • Dimension 1 Copywriting: PASS
  • Dimension 2 Visuals: PASS
  • Dimension 3 Color: PASS
  • Dimension 4 Typography: PASS
  • Dimension 5 Spacing: PASS
  • Dimension 6 Registry Safety: PASS

Approval: pending