Story 4.1.5: Wireframe: Inline Registration Accordion (Hybrid Approach)
Story: Story 4.1.5 (Registration Wizard) + Story 4.1.6 (Confirmation)
Last updated:
January 2, 2026
Reading time:
15 minutes
File size:
37.51 KB
Overview
This wireframe demonstrates a hybrid registration approach:
- Primary UX: Inline expandable registration within hero section (accordion-style 2-step wizard)
- Secondary UX: Dedicated
/register/:eventCoderoute using same components (for shareable links)
Design Principles
- Seamless Integration: Registration blends into hero section without modal/popup
- Accordion Pattern: Step 1 collapses when Step 2 expands (compact, focused experience)
- Dark Theme Consistency: Maintains zinc-950 background, blue-400 accents from existing design
- Progressive Disclosure: Only show whatβs needed at each step
- Component Reuse: Same wizard components work inline and in dedicated page
State 1: Hero Section - Default State (Collapsed)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Unicorn.studio Interactive Background] β
β β
β β
β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β π΅ Next Event β’ 12 days until event β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
β β
β Zero Trust Journey β
β Cloud-Native Security at Scale β
β β
β π
March 15, 2025 β
β π Kursaal Bern β
β β
β βββββββββββββββββββββββββββ β
β β Register Now β β Click to expand β
β βββββββββββββββββββββββββββ β
β (blue-400 button, rounded-lg) β
β β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β scroll down β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Event Logistics (EventLogistics component) β
β ββββββββββββββ¬βββββββββββββ¬βββββββββββββ¬βββββββββββββ β
β β π
Date β π Time β π Locationβ π₯ Capacityβ β
β β Mar 15 β 18:00-21:00β Kursaal β 87 / 120 β β
β ββββββββββββββ΄βββββββββββββ΄βββββββββββββ΄βββββββββββββ β
β β
β Event Program (Timeline, sessions, speakers...) β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Visual Characteristics:
- Full-screen hero (
h-screen) - Unicorn.studio background (z-0 layer)
- Content centered and bottom-aligned (
items-end pb-16) - βRegister Nowβ button has hover state (scale-105)
- Countdown timer badge floats above title
State 2: Hero Section - Expanded with Step 1 (Registration Form Visible)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Unicorn.studio Background - Semi-transparent overlay] β
β β
β Zero Trust Journey β
β Cloud-Native Security at Scale β
β π
March 15, 2025 β’ π Kursaal Bern β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. Your Details (Current) 2. Confirm Registration β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββ STEP 1: YOUR DETAILS ββββββββββββββββββββββββ β
β β (Accordion - EXPANDED, height: auto, opacity: 1) β β
β β β β
β β Personal Information β β
β β β β
β β First Name * Last Name * β β
β β βββββββββββββββββββββββ βββββββββββββββββββββββ β β
β β β β β β β β
β β βββββββββββββββββββββββ βββββββββββββββββββββββ β β
β β (shadcn Input component, zinc-900 bg, zinc-100 text) β β
β β β β
β β Email Address * β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β βΉοΈ We'll send your ticket and event updates here β β
β β (zinc-500 helper text, text-sm) β β
β β β β
β β Company * Role * β β
β β βββββββββββββββββββββββ βββββββββββββββββββββββ β β
β β β β β β β β
β β βββββββββββββββββββββββ βββββββββββββββββββββββ β β
β β β β
β β β First Name is required β β
β β (Validation error: red-400 text, only shows on blur if invalid) β β
β β β β
β β [Cancel] [Next: Review β] β β
β β (zinc-800 outline) (blue-400 solid) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββ STEP 2: CONFIRM REGISTRATION ββββββββββββββββββββ β
β β (Accordion - COLLAPSED, height: 0, opacity: 0, display: none) β β
β β ... content hidden ... β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β smooth height transition (500ms)
Interaction Flow:
- User clicks βRegister Nowβ button
- Button fades out (200ms)
- Hero section expands smoothly (500ms ease-in-out)
- Step 1 form fades in (300ms with 200ms delay)
- Unicorn.studio background dims slightly (opacity: 0.7)
- Page scrolls to keep form in view (auto-scroll)
Form Behavior:
- Validation: Real-time validation with react-hook-form + zod
- Error Display: Inline errors below fields (red-400 text)
- Required Fields: Asterisk (*) in label
- Helper Text: Light gray (zinc-500) below inputs
State 3: Step 1 β Step 2 Accordion Transition
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Unicorn.studio Background - Semi-transparent overlay] β
β β
β Zero Trust Journey β
β Cloud-Native Security at Scale β
β π
March 15, 2025 β’ π Kursaal Bern β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. Your Details 2. Confirm Registration (Current) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββ STEP 1: YOUR DETAILS ββββββββββββββββββββββββ β
β β (Accordion - COLLAPSED, Collapsible component) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β Personal Information Complete β β β
β β β John Smith β’ john.smith@techcorp.ch β β β
β β β TechCorp AG β’ Senior Developer [Edit] β β β
β β β (zinc-800 bg, zinc-300 text, compact summary) β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββ STEP 2: CONFIRM REGISTRATION ββββββββββββββββββββ β
β β (Accordion - EXPANDED, height: auto, opacity: 1) β β
β β β β
β β Review Your Registration β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Event: Zero Trust Journey β β β
β β β Date: March 15, 2025 β β β
β β β Time: 18:00 - 21:00 β β β
β β β Location: Kursaal Bern β β β
β β β Price: FREE (including coffee & networking) β β β
β β β β β β
β β β Attendee: John Smith (john.smith@techcorp.ch) β β β
β β β Company: TechCorp AG β’ Senior Developer β β β
β β β (zinc-900/50 bg, border-zinc-800, rounded-lg, p-4) β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Communication Preferences β β
β β β Send me event reminders (1 week and 1 day before) β β
β β β Subscribe to BATbern newsletter (monthly) β β
β β (shadcn Checkbox, default: reminders=true, newsletter=false) β β
β β β β
β β Special Requests (Optional) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Dietary requirements, accessibility needs, etc. β β β
β β β β β β
β β β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β (shadcn Textarea, 4 rows, zinc-900 bg) β β
β β β β
β β Terms & Conditions β β
β β β I agree to the event terms and photo/video policy * β β
β β (Required checkbox, links to terms page) β β
β β β β
β β π‘ Want to manage all your registrations? β β
β β [Create a free account β] β β
β β (zinc-800 bg, blue-400 link, rounded-lg, p-3, mt-4) β β
β β β β
β β [Cancel] [β Back] [Complete Registration] β β
β β (outline) (outline) (blue-400 solid, disabled β β
β β until terms checked) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Accordion Animation:
- Step 1 Collapse: 300ms ease-out (height: auto β collapsed summary)
- Step 2 Expand: 300ms ease-in (height: 0 β auto), 100ms delay
- Smooth Transition: Uses shadcn Collapsible component with CSS transitions
- Scroll Behavior: Auto-scroll to keep Step 2 header visible
Submit Button States:
- Disabled (default): Gray, cursor-not-allowed, opacity-50
- Condition: Terms checkbox unchecked
- Enabled: Blue-400, cursor-pointer, opacity-100
- Condition: Terms checkbox checked
- Loading: βCompleting Registrationβ¦β with spinner
- Condition: API call in progress
State 4: Registration Success β Redirect
[Immediately after successful submission]
Redirect to: /registration-confirmation/BAT-2025-000123
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Confetti animation - canvas-confetti package] β
β β
β π Registration Confirmed! β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β [QR Code - 200x200px] β β
β β β β
β β Confirmation Code: BAT-2025-000123 β β
β β (large, blue-400 text, centered) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βΉοΈ Confirmation email sent to john.smith@techcorp.ch β
β β
β What's Next? β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β π
Add to β β πΎ Download β β π Share β β
β β Calendar β β QR Code β β Event β β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β
β π‘ Want to manage your registration and get personalized updates? β
β [Create Your Free Account β] β
β (prominent CTA for anonymous users to convert to full account) β
β β
β [Register Another Person] (link back to /register/:eventCode) β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Confirmation Page Features:
- Confetti animation on page load (3 seconds)
- QR code for event check-in (generated server-side)
- Calendar export (.ics file download)
- Social sharing (LinkedIn, Twitter/X, Email)
- βCreate accountβ CTA for anonymous users
- Shareable confirmation code
Alternative Flow: Dedicated Registration Page
Route: /register/:eventCode
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Back to Event β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Event Registration β β
β β Zero Trust Journey β’ March 15, 2025 β’ Kursaal Bern β β
β β (Mini event context, compact header, zinc-900 bg) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. Your Details (Current) 2. Confirm Registration β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Same RegistrationAccordion component as inline version] β
β [Step 1 and Step 2 components identical to inline flow] β
β β
β Key Differences: β
β - No Unicorn.studio background (simple dark background) β
β - Full-page layout (not hero section) β
β - "Back to Event" breadcrumb at top β
β - Max-width container (max-w-3xl, centered) β
β - Uses PublicLayout wrapper β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Use Cases for Dedicated Page:
- Shareable Links: Event organizers share
/register/BATbern025directly - Email CTAs: Confirmation emails link to dedicated page
- Social Sharing: LinkedIn/Twitter posts link to dedicated page
- Bookmarks: Users can bookmark registration page
- Deep Linking: Mobile apps can deep-link to registration
Benefits of Hybrid Approach:
- β Inline registration reduces friction for homepage visitors
- β Dedicated page supports marketing/sharing use cases
- β Same components = no code duplication
- β Consistent UX across both flows
Mobile Responsive Design
Mobile View (< 640px)
βββββββββββββββββββββββββββββ
β [Unicorn.studio BG] β
β β
β Zero Trust Journey β
β Cloud-Native Security β
β β
β π
March 15, 2025 β
β π Kursaal Bern β
β β
β βββββββββββββββββββββ β
β β Register Now β β
β βββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββ
β expands β
βββββββββββββββββββββββββββββ
β Zero Trust Journey β
β π
Mar 15 β’ π Bern β
β β
β βββββββββββββββββββββ β
β 1. Details 2. Confirm β
β β
β ββ STEP 1: DETAILS βββββ β
β β β β
β β First Name * β β
β β ββββββββββββββββββββ β β
β β β β β β
β β ββββββββββββββββββββ β β
β β β β
β β Last Name * β β
β β ββββββββββββββββββββ β β
β β β β β β
β β ββββββββββββββββββββ β β
β β β β
β β (Stacked layout) β β
β β β β
β β [Cancel] [Next β] β β
β ββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββ
Mobile Optimizations:
- Single Column: All fields stack vertically
- Full Width: Inputs use full container width
- Larger Touch Targets: Buttons min-height 44px (iOS guideline)
- Simplified Header: Event title + date only (no description)
- Sticky Progress Bar: Progress indicator sticks to top on scroll
- Auto-Scroll: Form auto-scrolls to keep input in view (avoid keyboard overlap)
Component Architecture
Component Tree
HomePage
βββ HeroSection [Enhanced with registration state]
βββ Hero Content (default state)
β βββ Countdown Badge
β βββ Event Title
β βββ Event Date & Location
β βββ "Register Now" Button
βββ RegistrationSection (expandable)
βββ Registration Header
β βββ Event Mini Summary
β βββ Progress Indicator
βββ RegistrationWizard
βββ RegistrationAccordion
βββ PersonalDetailsStep (Collapsible)
β βββ Form Fields (shadcn Input)
β βββ Validation (react-hook-form + zod)
β βββ Navigation Buttons
βββ ConfirmRegistrationStep (Collapsible)
βββ Summary Card
βββ Communication Preferences (shadcn Checkbox)
βββ Special Requests (shadcn Textarea)
βββ Terms Checkbox (shadcn Checkbox)
βββ Account Creation CTA
βββ Navigation Buttons
RegistrationPage (Dedicated Route)
βββ PublicLayout
βββ Breadcrumb ("Back to Event")
βββ RegistrationWizard [Same component as inline]
βββ RegistrationAccordion [Reused]
State Management
typescript
// HeroSection.tsx state
const [isRegistrationExpanded, setIsRegistrationExpanded] = useState(false);
// RegistrationWizard.tsx state
const [currentStep, setCurrentStep] = useState(1); // 1 or 2
const [formData, setFormData] = useState({
firstName: '',
lastName: '',
email: '',
company: '',
role: '',
termsAccepted: false,
communicationPreferences: {
newsletterSubscribed: false,
eventReminders: true,
},
specialRequests: '',
});
const [isSubmitting, setIsSubmitting] = useState(false);
API Requirements
Registration Flow APIs
-
Check Duplicate Email (optional, before submission)
GET /api/v1/events/{eventCode}/registrations?filter[email]={email}- Returns: 200 with empty array (OK) or 200 with registration (duplicate)
- UI: Show warning if duplicate found
-
Submit Registration
POST /api/v1/events/{eventCode}/registrations- Payload:json
{ "email": "john.smith@techcorp.ch", "firstName": "John", "lastName": "Smith", "company": "TechCorp AG", "role": "Senior Developer", "termsAccepted": true, "communicationPreferences": { "newsletterSubscribed": false, "eventReminders": true }, "specialRequests": "Vegetarian meal" } - Response (201 Created):json
{ "id": "reg_123", "confirmationCode": "BAT-2025-000123", "eventCode": "BATbern025", "status": "confirmed", "registrationDate": "2025-03-01T10:30:00Z", "firstName": "John", "lastName": "Smith", "email": "john.smith@techcorp.ch", "company": "TechCorp AG" }
-
Get Registration for Confirmation Page
GET /api/v1/events/{eventCode}/registrations/{confirmationCode}- Public access (no auth required)
- Returns: Full registration details
-
Get QR Code
GET /api/v1/events/{eventCode}/registrations/{confirmationCode}/qr- Public access
- Returns: PNG image (200x200px)
Design System Integration
Colors (from Story 4.1.1)
css
/* Background */
--background: 240 10% 3.9%; /* zinc-950 */
/* Text */
--foreground: 240 5% 96%; /* zinc-100 */
/* Accent */
--primary: 200 98% 39%; /* blue-400 */
/* Card Background */
--card: 240 4% 16%; /* zinc-900/50 */
/* Border */
--border: 240 4% 26%; /* zinc-800 */
/* Muted */
--muted-foreground: 240 4% 46%; /* zinc-500 */
/* Destructive (Errors) */
--destructive: 0 84% 60%; /* red-400 */
Typography
- Headings: font-light (font-weight: 300)
- Body: font-normal (font-weight: 400)
- Labels: font-medium (font-weight: 500)
- Font Family: Sans-serif (system default)
Spacing
- Container Padding: px-4 (mobile), px-6 (tablet), px-8 (desktop)
- Section Spacing: py-12 (mobile), py-16 (desktop)
- Form Field Spacing: space-y-4 (between fields)
- Button Spacing: gap-4 (between buttons)
Shadows
- Card Shadow: shadow-lg (large shadow for cards)
- Button Hover: shadow-md (medium shadow on hover)
Accessibility Considerations
WCAG 2.1 AA Compliance
-
Keyboard Navigation
- All form fields accessible via Tab key
- βEnterβ key submits current step
- βEscapeβ key cancels registration (with confirmation)
- Focus indicators visible (blue-400 ring)
-
Screen Reader Support
- Form labels properly associated with inputs
- Error messages announced via aria-live regions
- Progress indicator has aria-current
- Required fields marked with aria-required=βtrueβ
-
Color Contrast
- Text: zinc-100 on zinc-950 (21:1 ratio) β
- Accent: blue-400 on zinc-950 (8.2:1 ratio) β
- Errors: red-400 on zinc-950 (5.1:1 ratio) β
-
Form Validation
- Inline errors with descriptive messages
- Error summary at top of form (if multiple errors)
- Focus moves to first error on submission
Performance Considerations
-
Lazy Loading
- RegistrationWizard component lazy-loaded on button click
- Reduces initial bundle size
-
Animations
- CSS transitions (GPU-accelerated)
- No layout thrashing (will-change: height)
- Smooth 60fps animations
-
API Optimization
- Debounce email duplicate check (300ms)
- Single API call on final submission
- Optimistic UI updates
-
Form State
- Local state management (no global state overhead)
- Form data persisted in localStorage (recovery on refresh)
Testing Scenarios
Manual Testing Checklist
Inline Registration Flow:
Dedicated Page Flow:
- Navigate to
/register/BATbern025
Validation:
Responsive:
Error Handling:
Change Log
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-11-08 | 1.0 | Initial wireframe creation for inline registration accordion | Sally (UX Expert) |
Notes
- Component Reuse: RegistrationWizard and child components work in both inline and dedicated page contexts
- Design Consistency: All components follow shadcn dark theme established in Story 4.1.1
- Anonymous Registration: Per ADR-005, no authentication required for registration
- Account Linking: βCreate accountβ CTA shown after registration for anonymous users to convert
Dependencies:
- Story 4.1.1 (shadcn dark theme) β
- Story 4.1.3 (Hero section) β
- shadcn components: input, textarea, checkbox, collapsible β
- Backend:
POST /api/v1/events/{eventCode}/registrationsβ
Next Steps:
- Implement RegistrationWizard container component
- Implement PersonalDetailsStep with validation
- Implement ConfirmRegistrationStep with preferences
- Enhance HeroSection with expansion logic
- Create RegistrationPage for dedicated route