Files
claude-mem/LANDING-PAGE-DETAILED-PLAN.md
T
Alex Newman c27f07023c fix: Remove all session validation to prevent continuation errors after /exit
Root cause: Hooks provide session_id as the source of truth. We were adding
unnecessary validation (checking if sessions exist, checking status, etc.)
which caused 409 conflicts when continuing sessions after /exit.

Changes:
1. worker-service.ts: Removed 409 "Session already exists" check in handleInit
2. SessionStore.ts: Made createSDKSession idempotent using INSERT OR IGNORE
3. new-hook.ts: Simplified to just call createSDKSession - no findActiveSDKSession,
   no reactivateSession logic, no status management
4. save-hook.ts: Removed session validation, use fixed port instead of session.worker_port
5. summary-hook.ts: Removed session validation, use fixed port instead of session.worker_port

Philosophy: Hooks manage lifecycle, we just save data with whatever session_id
they give us. No validation, no status checks, no guessing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 21:44:58 -04:00

71 KiB

Claude-Mem Landing Page - Detailed Implementation Plan

Magic UI Component Integration Strategy

This document outlines the complete implementation plan for the claude-mem landing page, integrating Magic UI components to create an intuitive, delightful, and effective storytelling experience.


Executive Summary

Goal: Create a landing page that shows rather than tells - demonstrating claude-mem's value through interactive, visual storytelling.

Approach: Use Magic UI components strategically to:

  • Make abstract concepts (memory, persistence) tangible
  • Create moments of delight that mirror the product's value
  • Guide users through an intuitive understanding journey
  • Reduce friction at conversion points

Key Metrics:

  • Average section score: 43.5/50 (87%)
  • Total delight factor: 85%
  • Primary conversion point: Installation section (44/50)

Section-by-Section Implementation

Section 1: HERO - "Claude Never Forgets"

Winning Concept: "Fading Memory" Effect (Score: 42/50)

Layout

┌─────────────────────────────────────────────────────┐
│         [Grid Beams Background - Blue/Purple]        │
│                                                      │
│  ┌────────────────────────────────────────────┐    │
│  │     [Morphing Text - Main Headline]         │    │
│  │  "Claude Never Forgets" → "Claude Always    │    │
│  │   Remembers" → "Claude Learns Forever"      │    │
│  └────────────────────────────────────────────┘    │
│                                                      │
│            [Orbiting Circles Visualization]          │
│                 ┌──────────┐                        │
│            ○───│  Brain/  │───○                     │
│           ○    │ Database │    ○                    │
│            ○───│   Icon   │───○                     │
│                 └──────────┘                        │
│    Inner orbit: File icons (code files)             │
│    Middle orbit: Lightbulb icons (decisions)        │
│    Outer orbit: Bug icons (fixes)                   │
│                                                      │
│  ┌────────────────────────────────────────────┐    │
│  │   [Scratch To Reveal - Pain Point]          │    │
│  │   Scratch surface with grain texture        │    │
│  │   Reveals: "Every /clear wipes Claude's     │    │
│  │             memory. Until now."              │    │
│  └────────────────────────────────────────────┘    │
│                                                      │
│         [Pulsating Button - Main CTA]               │
│           "Give Claude a Memory"                     │
│                                                      │
└─────────────────────────────────────────────────────┘

Component Specifications

Grid Beams (Background)

  • gridSize: 40
  • gridColor: "rgba(100, 150, 255, 0.15)"
  • rayCount: 12
  • rayOpacity: 0.3
  • raySpeed: 0.8
  • backgroundColor: "#0a0f1e"
  • Purpose: Creates "memory grid" tech aesthetic

Morphing Text (Headline)

  • texts: ["Claude Never Forgets", "Claude Always Remembers", "Claude Learns Forever"]
  • duration: 3000ms per text
  • className: "text-6xl font-bold text-center"
  • Purpose: Reinforces core value proposition from multiple angles

Orbiting Circles (Central Visualization)

// Inner orbit - Files
<OrbitingCircles radius={120} duration={20} iconSize={24}>
  <FileIcon /> <FileIcon /> <FileIcon /> <FileIcon />
</OrbitingCircles>

// Middle orbit - Decisions
<OrbitingCircles radius={180} duration={30} iconSize={28} reverse>
  <LightbulbIcon /> <LightbulbIcon /> <LightbulbIcon />
</OrbitingCircles>

// Outer orbit - Bugs
<OrbitingCircles radius={240} duration={40} iconSize={32}>
  <BugIcon /> <BugIcon />
</OrbitingCircles>
  • Purpose: Visually demonstrates what gets remembered

Scratch To Reveal (Pain Point)

  • width: 600
  • height: 150
  • minScratchPercentage: 40
  • gradientColors: ["#1a1a2e", "#16213e", "#0f3460"]
  • Reveals text: "Every /clear wipes Claude's memory. Until now."
  • Purpose: Makes pain point visceral and interactive

Pulsating Button (CTA)

  • pulseColor: "59, 130, 246" (blue)
  • duration: "1.5s"
  • Text: "Give Claude a Memory"
  • Purpose: Primary conversion action

Implementation Notes

  • Hero should be full viewport height
  • Orbiting circles animate automatically on load
  • Scratch-to-reveal activates on first scroll or after 3 seconds
  • Grid beams subtle enough to not distract from content
  • Ensure accessibility: keyboard navigation for scratch-to-reveal

Section 2: BEFORE/AFTER Comparison

Winning Concept: "Split Screen Wipe" (Score: 44/50)

Layout

┌────────────────────┬────────────────────┐
│      BEFORE        │       AFTER        │
│                    │                    │
│  [Safari Mockup]   │  [Safari Mockup]   │
│  ┌──────────────┐  │  ┌──────────────┐  │
│  │ Session 1:   │  │  │ Session 1:   │  │
│  │ "We use Redux"│ │  │ "We use Redux"│ │
│  │              │  │  │              │  │
│  │ [Fading...]  │  │  │ [Persists]   │  │
│  │ opacity: 0.3 │  │  │ ┌──Border──┐ │  │
│  │              │  │  │ │Beam glow │ │  │
│  └──────────────┘  │  │ └──────────┘ │  │
│                    │  │              │  │
│  [Safari Mockup]   │  [Safari Mockup]   │
│  ┌──────────────┐  │  ┌──────────────┐  │
│  │ Session 2:   │  │  │ Session 2:   │  │
│  │ "What state  │  │  │ Claude knows │  │
│  │  mgmt do you │  │  │ Redux setup  │  │
│  │  use?" ❌    │  │  │ already ✓    │  │
│  └──────────────┘  │  └──────────────┘  │
└────────────────────┴────────────────────┘

Component Specifications

Safari (Browser Mockups - 4 total)

  • width: 500
  • height: 350
  • mode: "simple"
  • url: "claude.ai/chat"
  • Content: Rendered as children (conversation bubbles)

Before Side Animations:

<TextAnimate
  animateType="line"
  animation="fadeIn"
  duration={0.8}
>
  Session 1 conversation
</TextAnimate>

// Then fade out
<div style={{ opacity: 0.3, transition: 'opacity 2s' }}>
  Previous session content
</div>

After Side Animations:

<div className="relative">
  <TextAnimate
    animateType="line"
    animation="slideUp"
    duration={0.6}
  >
    Session 2 with context
  </TextAnimate>

  <BorderBeam
    duration={8}
    colorFrom="#3b82f6"
    colorTo="#8b5cf6"
  />
</div>

Scratch To Reveal (Optional - Before side)

  • Applied over entire Before column
  • Scratch to reveal the "forgetting" behavior
  • Creates visceral understanding of the problem

Implementation Notes

  • Use CSS Grid for split layout
  • Before/After labels with subtle divider
  • Conversations animate in sequence (Session 1, then Session 2)
  • Border Beam pulses on After side every 3 seconds
  • Consider responsive: stack vertically on mobile

Section 3: REAL EXAMPLES - 3 Scenarios

Winning Concept: "Timeline Story" (Score: 44/50)

Layout

┌─────────────────────────────────────────────────────┐
│              [Arc Timeline - Horizontal]             │
│                                                      │
│    Mon        │         Wed        │       Fri      │
│    ●──────────┼─────────●─────────┼────────●       │
│  Context   Architecture      Bug Pattern            │
│   Across     Memory         Recognition             │
│  Sessions                                            │
│                                                      │
│  [Expanded Node View]                               │
│  ┌──────────────────────────────────────────────┐  │
│  │  [Orbiting Circles around active node]        │  │
│  │         ○                                     │  │
│  │    ○         ○   [Active Node]                │  │
│  │         ○                                     │  │
│  │                                               │  │
│  │  Files: store.ts, actions.ts                  │  │
│  │  Decisions: Redux for state                   │  │
│  │  Concepts: state-management, architecture     │  │
│  │                                               │  │
│  │  [Animated List - Claude Remembers]           │  │
│  │  ✓ Your store structure                       │  │
│  │  ✓ Redux patterns you prefer                  │  │
│  │  ✓ Async/await convention                     │  │
│  └──────────────────────────────────────────────┘  │
│                                                      │
│  [Highlighter on key phrases in examples]           │
└─────────────────────────────────────────────────────┘

Component Specifications

Arc Timeline

const timelineData = [
  {
    time: 'Monday',
    title: 'Context Across Sessions',
    description: 'Redux state management discussion'
  },
  {
    time: 'Wednesday',
    title: 'Architectural Memory',
    description: 'API endpoint creation with remembered patterns'
  },
  {
    time: 'Friday',
    title: 'Bug Pattern Recognition',
    description: 'Similar issues recognized across weeks'
  }
];

<ArcTimeline
  data={timelineData}
  arcConfig={{
    circleWidth: 4000,
    angleBetweenMinorSteps: 0.4,
    lineCountFillBetweenSteps: 8,
    boundaryPlaceholderLinesCount: 40
  }}
  defaultActiveStep={{ time: 'Monday', stepIndex: 0 }}
/>

Orbiting Circles (Around Active Node)

// File orbit
<OrbitingCircles radius={80} duration={15} iconSize={20}>
  <DocumentIcon /> <DocumentIcon />
</OrbitingCircles>

// Decision orbit
<OrbitingCircles radius={120} duration={20} iconSize={24} reverse>
  <LightbulbIcon />
</OrbitingCircles>

// Concept orbit
<OrbitingCircles radius={160} duration={25} iconSize={20}>
  <TagIcon /> <TagIcon />
</OrbitingCircles>

Animated List (Claude Remembers)

<AnimatedList delay={500}>
  <li> Your store structure</li>
  <li> Redux patterns you prefer</li>
  <li> Async/await convention</li>
  <li> Auth middleware setup</li>
</AnimatedList>

Highlighter (Key Phrases)

<Highlighter color="#3b82f6" action="underline" strokeWidth={2}>
  Your store structure
</Highlighter>

Implementation Notes

  • Timeline is the central organizing element
  • Click timeline node to expand that scenario
  • Orbiting circles show related context types
  • Animated list reveals sequentially (stagger 500ms)
  • Highlight key remembered elements in blue
  • Smooth transitions between scenarios

Section 4: HOW IT WORKS - Pipeline

Winning Concept: "Layered Depth Model" (Score: 43/50)

Layout

┌─────────────────────────────────────────────────────┐
│         [Grid Beams Background - Subtle]             │
│                                                      │
│               [Morphing Text - State]                │
│          "Capturing" → "Compressing" →              │
│             "Storing" → "Retrieving"                │
│                                                      │
│  ┌─────────────────────────────────────────┐       │
│  │  [Layer 1 - Front] Magic Card            │       │
│  │  You code with Claude today              │       │
│  │  ┌─────────────────────────────────┐    │       │
│  │  │ [Particles flowing down]         │    │       │
│  └──│───────────────────────────────────│───┘       │
│     │                                    │           │
│   ┌─│─────────────────────────────────│─┐          │
│   │ │  [Layer 2 - Mid] Magic Card     │ │          │
│   │ └─────────────────────────────────┘ │          │
│   │  claude-mem captures & compresses   │          │
│   │  [Shine Border - Active]             │          │
│   └──────────────────────────────────────┘          │
│                                                      │
│     ┌─────────────────────────────────────┐        │
│     │  [Layer 3 - Back] Magic Card         │        │
│     │  Tomorrow, Claude starts with context│        │
│     └─────────────────────────────────────┘        │
│                                                      │
│            [Border Beam Arrows Between]             │
│                                                      │
│  [Highlighter on "Automatic. Zero effort."]         │
└─────────────────────────────────────────────────────┘

Component Specifications

Grid Beams (Background)

  • gridSize: 50
  • gridColor: "rgba(100, 100, 150, 0.08)"
  • rayCount: 8
  • rayOpacity: 0.2
  • backgroundColor: "#0f0f1e"
  • Purpose: Represents storage layer

Morphing Text (State Display)

<MorphingText
  texts={["Capturing", "Compressing", "Storing", "Retrieving"]}
  className="text-3xl font-semibold text-center mb-12"
/>

Magic Cards (3 Layers with Z-depth)

// Layer 1 - Front
<MagicCard
  className="z-30 transform perspective-1000 rotateX-5"
  gradientColor="#1a1a3e"
  gradientFrom="#3b82f6"
  gradientTo="#8b5cf6"
>
  <h3>You code with Claude today</h3>
  <p>Every tool use, every decision, every file change</p>
</MagicCard>

// Layer 2 - Middle (with Shine Border)
<div className="z-20 transform perspective-1000 rotateX-10 translateY-20">
  <ShineBorder
    color={["#3b82f6", "#8b5cf6"]}
    borderWidth={3}
    duration={12}
  >
    <MagicCard>
      <h3>claude-mem captures & compresses</h3>
      <p>AI-powered compression into structured memories</p>
    </MagicCard>
  </ShineBorder>
</div>

// Layer 3 - Back
<MagicCard
  className="z-10 transform perspective-1000 rotateX-15 translateY-40"
  gradientColor="#0f0f2e"
>
  <h3>Tomorrow, Claude starts with context</h3>
  <p>Full project history injected automatically</p>
</MagicCard>

Particles (Flowing Between Layers)

<Particles
  className="absolute inset-0"
  quantity={50}
  color="#3b82f6"
  // Configure to flow downward
/>

Border Beam (Arrows/Connections)

  • Between Layer 1 → Layer 2
  • Between Layer 2 → Layer 3
  • Animated flow showing data movement

Highlighter

<Highlighter color="#10b981" action="highlight" strokeWidth={3}>
  Automatic. Zero effort. Always on.
</Highlighter>

Implementation Notes

  • Use CSS perspective for 3D depth
  • Cards slide into position on scroll
  • Morphing text cycles continuously
  • Particles subtle, not distracting
  • Responsive: reduce z-depth on mobile
  • Ensure cards remain readable with gradients

Section 5: WHAT GETS REMEMBERED - Features

Winning Concept: "Memory Bank Slots" (Score: 41/50)

Layout

┌─────────────────────────────────────────────────────┐
│        [Aurora Text - Section Heading]               │
│          "What Gets Remembered"                      │
│                                                      │
│  ┌──────────┬──────────┬──────────┐                │
│  │ [Scratch │ [Scratch │ [Scratch │                 │
│  │   Card]  │   Card]  │   Card]  │                 │
│  │          │          │          │                 │
│  │ Decisions│   Bugs   │ Patterns │                 │
│  │   💡     │    🐛    │   📋     │                 │
│  └──────────┴──────────┴──────────┘                │
│                                                      │
│  ┌──────────┬──────────┬──────────┐                │
│  │ [Scratch │ [Scratch │ [Scratch │                 │
│  │   Card]  │   Card]  │   Card]  │                 │
│  │          │          │          │                 │
│  │  Files   │ Refactor │  Deps    │                 │
│  │   📄     │   🔄     │   📦     │                 │
│  └──────────┴──────────┴──────────┘                │
│                                                      │
│  [Revealed cards show Shine Border]                 │
│  [Orbiting circles appear around revealed cards]     │
│  [Pulsating indicators on high-value items]         │
└─────────────────────────────────────────────────────┘

Component Specifications

Aurora Text (Heading)

<AuroraText
  colors={["#3b82f6", "#8b5cf6", "#ec4899", "#f59e0b"]}
  speed={1.5}
  className="text-5xl font-bold text-center mb-16"
>
  What Gets Remembered
</AuroraText>

Bento Grid (6 Cards Layout)

<div className="grid grid-cols-3 gap-6">
  {memoryTypes.map((type, index) => (
    <ScratchCard key={index} type={type} />
  ))}
</div>

Scratch To Reveal Cards (6 Individual)

const MemoryCard = ({ icon, title, description }) => {
  const [revealed, setRevealed] = useState(false);

  return (
    <div className="relative">
      <ScratchToReveal
        width={280}
        height={320}
        minScratchPercentage={50}
        gradientColors={['#1e293b', '#334155', '#475569']}
        onComplete={() => setRevealed(true)}
      >
        <MagicCard className="h-full p-6">
          <div className="text-6xl mb-4">{icon}</div>
          <h3 className="text-xl font-bold mb-2">{title}</h3>
          <p className="text-sm text-gray-300">{description}</p>
        </MagicCard>
      </ScratchToReveal>

      {revealed && (
        <>
          <ShineBorder color={["#3b82f6", "#8b5cf6"]} />
          <OrbitingCircles radius={60} duration={20}>
            <CheckIcon />
          </OrbitingCircles>
        </>
      )}
    </div>
  );
};

Memory Types Data

const memoryTypes = [
  {
    icon: '💡',
    title: 'Decisions',
    description: 'Why did we choose this architecture? What trade-offs did we make?'
  },
  {
    icon: '🐛',
    title: 'Bugs Fixed',
    description: 'How did we solve this before? What was the root cause?'
  },
  {
    icon: '📋',
    title: 'Code Patterns',
    description: "What's our convention for this? How do we structure similar code?"
  },
  {
    icon: '📄',
    title: 'File Changes',
    description: 'What did we modify last session? Which files are related?'
  },
  {
    icon: '🔄',
    title: 'Refactorings',
    description: 'What was the old implementation? Why did we change it?'
  },
  {
    icon: '📦',
    title: 'Dependencies',
    description: 'Which libraries are we using? What versions? Why those?'
  }
];

Pulsating Button (High-value indicators)

  • Applied to "Decisions" and "Bugs Fixed" cards
  • Subtle pulse before scratching
  • pulseColor: "59, 130, 246"
  • duration: "2s"

Implementation Notes

  • Cards arranged in 3x2 grid (responsive: 2x3 on tablet, 1x6 on mobile)
  • Scratch surface has subtle grain texture
  • Revealed cards get Shine Border animation
  • Orbiting circles appear with checkmark icon after reveal
  • Track which cards are revealed, celebrate when all revealed
  • Consider adding a "Reveal All" button for impatient users
  • Ensure scratch works on touch devices

Winning Concept: "Live Search Demo" (Score: 44/50)

Layout

┌─────────────────────────────────────────────────────┐
│              [Section Heading]                       │
│              Powerful Search                         │
│                                                      │
│  [Safari Browser Mockup - Search Interface]          │
│  ┌──────────────────────────────────────────────┐  │
│  │ 🔍 [Text Animate - Typing Query]              │  │
│  │    "Find all the database migrations we did" │  │
│  │                                               │  │
│  │  [Animated List - Results Appearing]          │  │
│  │  ┌────────────────────────────────────────┐  │  │
│  │  │ [Magic Card with Border Beam]           │  │  │
│  │  │ March 15: Added user_preferences table  │  │  │
│  │  │ [Highlighter on "user_preferences"]     │  │  │
│  │  └────────────────────────────────────────┘  │  │
│  │                                               │  │
│  │  ┌────────────────────────────────────────┐  │  │
│  │  │ [Magic Card with Border Beam]           │  │  │
│  │  │ March 12: Migration for OAuth tokens    │  │  │
│  │  │ [Highlighter on "OAuth tokens"]         │  │  │
│  │  └────────────────────────────────────────┘  │  │
│  │                                               │  │
│  │  ┌────────────────────────────────────────┐  │  │
│  │  │ [Magic Card]                            │  │  │
│  │  │ March 8: Index optimization on sessions │  │  │
│  │  └────────────────────────────────────────┘  │  │
│  └──────────────────────────────────────────────┘  │
│                                                      │
│  [Morphing Text - Search Types]                     │
│  "Migrations" → "Decisions" → "Patterns" → "Bugs"   │
│                                                      │
│  [7 Search Tools - Animated List]                   │
│  ✓ search_observations    ✓ find_by_concept         │
│  ✓ search_sessions        ✓ find_by_file            │
│  ✓ find_by_type          ✓ get_recent_context       │
│  ✓ advanced_search (Combined filters)               │
└─────────────────────────────────────────────────────┘

Component Specifications

Safari (Search Interface Mockup)

<Safari
  url="claude.ai/chat"
  width={900}
  height={600}
  mode="default"
>
  <SearchDemoContent />
</Safari>

Text Animate (Typing Search Query)

const queries = [
  "Find all the database migrations we did",
  "What decisions did we make about authentication?",
  "Show me bug fixes from last week"
];

<TextAnimate
  animateType="character"
  animation="blurIn"
  duration={0.05}
  className="text-lg font-mono"
>
  {currentQuery}
</TextAnimate>

Animated List (Search Results)

<AnimatedList delay={800} className="space-y-4 mt-6">
  {results.map((result, index) => (
    <MagicCard key={index} className="p-4 relative">
      <BorderBeam
        duration={5 + index}
        delay={index * 0.5}
      />

      <div className="flex items-start gap-3">
        <CalendarIcon className="text-blue-400" />
        <div>
          <p className="font-semibold">
            {result.date}:
            <Highlighter
              color="#3b82f6"
              action="underline"
              strokeWidth={2}
            >
              {result.highlight}
            </Highlighter>
          </p>
          <p className="text-sm text-gray-400 mt-1">
            {result.description}
          </p>
        </div>
      </div>
    </MagicCard>
  ))}
</AnimatedList>

Morphing Text (Search Types Cycling)

<MorphingText
  texts={["Migrations", "Decisions", "Patterns", "Bugs", "Files", "Refactors"]}
  className="text-2xl font-semibold text-center my-8"
/>

Highlighter (Matched Keywords in Results)

<Highlighter
  color="#3b82f6"
  action="underline"
  strokeWidth={2}
  animationDuration={600}
>
  {matchedKeyword}
</Highlighter>

Animated List (7 Search Tools)

<AnimatedList delay={400} className="grid grid-cols-2 gap-4 mt-8">
  <div className="flex items-center gap-2">
    <CheckIcon className="text-green-400" />
    <span>search_observations</span>
  </div>
  <div className="flex items-center gap-2">
    <CheckIcon className="text-green-400" />
    <span>find_by_concept</span>
  </div>
  {/* ... remaining 5 tools ... */}
</AnimatedList>

Implementation Notes

  • Safari mockup shows actual search interface
  • Query types out character by character (realistic typing)
  • Results appear sequentially with stagger (800ms delay)
  • Each result card has Border Beam animation
  • Highlight matched keywords in blue
  • Morphing text cycles to show different search types
  • Consider interactive: let user click different query types
  • Show "Instant recall. Full project history." tagline

Section 7: THE NUMBERS - Metrics

Winning Concept: "Progress Bar Transformation" (Score: 45/50) HIGHEST

Layout

┌─────────────────────────────────────────────────────┐
│              [Section Heading]                       │
│                 The Numbers                          │
│                                                      │
│  ┌──────────────────────────────────────────────┐  │
│  │ [Magic Card with Shine Border]                │  │
│  │                                               │  │
│  │  Context repetition                           │  │
│  │  ──────────────────────────────────────       │  │
│  │  BEFORE: ████████████████████ Every session  │  │
│  │          [Red bar - 100%]                     │  │
│  │                                               │  │
│  │  AFTER:  [Green bar - 0%]     Never          │  │
│  │          [Morphing animation]                 │  │
│  └──────────────────────────────────────────────┘  │
│                                                      │
│  [4 more Magic Cards with progress transformations] │
│                                                      │
│  [Morphing Text - Cycling Metrics]                  │
│  "Context" → "Onboarding" → "Bugs" → "Questions"    │
│                                                      │
│  [Pulsating Button - "See the Difference"]          │
└─────────────────────────────────────────────────────┘

Component Specifications

Magic Cards (5 Metrics)

const metrics = [
  {
    name: 'Context repetition',
    before: { value: 100, label: 'Every session', color: '#ef4444' },
    after: { value: 0, label: 'Never', color: '#10b981' }
  },
  {
    name: 'Onboarding time',
    before: { value: 75, label: '5-10 min per session', color: '#f59e0b' },
    after: { value: 0, label: '0 seconds', color: '#10b981' }
  },
  {
    name: 'Bug re-investigation',
    before: { value: 80, label: 'Common', color: '#ef4444' },
    after: { value: 10, label: 'Rare', color: '#10b981' }
  },
  {
    name: 'Architectural questions',
    before: { value: 90, label: '"What did we decide?"', color: '#f59e0b' },
    after: { value: 5, label: 'Claude already knows', color: '#10b981' }
  },
  {
    name: 'Code pattern consistency',
    before: { value: 60, label: 'Manual enforcement', color: '#f59e0b' },
    after: { value: 95, label: 'Automatic', color: '#10b981' }
  }
];

{metrics.map((metric, index) => (
  <MagicCard key={index} className="p-6 mb-4">
    <ShineBorder
      color={["#10b981", "#3b82f6"]}
      borderWidth={2}
      duration={15}
    >
      <h3 className="text-xl font-bold mb-4">{metric.name}</h3>

      {/* Before Progress Bar */}
      <div className="mb-2">
        <div className="flex justify-between text-sm mb-1">
          <span className="text-gray-400">BEFORE:</span>
          <span>{metric.before.label}</span>
        </div>
        <div className="h-8 bg-gray-800 rounded-full overflow-hidden">
          <div
            className="h-full transition-all duration-1000"
            style={{
              width: `${metric.before.value}%`,
              backgroundColor: metric.before.color
            }}
          />
        </div>
      </div>

      {/* After Progress Bar */}
      <div>
        <div className="flex justify-between text-sm mb-1">
          <span className="text-gray-400">AFTER:</span>
          <span className="text-green-400 font-semibold">
            {metric.after.label}
          </span>
        </div>
        <div className="h-8 bg-gray-800 rounded-full overflow-hidden">
          <div
            className="h-full transition-all duration-1000 delay-500"
            style={{
              width: `${metric.after.value}%`,
              backgroundColor: metric.after.color
            }}
          />
        </div>
      </div>
    </ShineBorder>
  </MagicCard>
))}

Morphing Text (Cycling Metric Names)

<MorphingText
  texts={["Context", "Onboarding", "Bugs", "Questions", "Consistency"]}
  className="text-3xl font-bold text-center my-8"
/>

Pulsating Button (CTA)

<PulsatingButton
  pulseColor="16, 185, 129" // Green
  duration="1.8s"
  className="mx-auto mt-8"
>
  See the Difference
</PulsatingButton>

Animation Sequence

  1. Cards appear with stagger (200ms between each)
  2. "Before" bars animate in first (duration: 1000ms)
  3. "After" bars animate in with delay (delay: 500ms, duration: 1000ms)
  4. Shine Border pulses continuously
  5. Morphing text cycles through metric names
  6. On hover: card spotlights activate

Implementation Notes

  • Progress bars use CSS transitions for smooth animation
  • Color coding: Red/Orange for "before", Green for "after"
  • Bars animate on scroll into view (IntersectionObserver)
  • Consider adding count-up animation for percentages
  • Ensure high contrast for accessibility
  • Mobile: Stack bars vertically if needed

Section 8: INSTALLATION - Quick Start

Winning Concept: "Copy-Paste Delight" (Score: 44/50)

Layout

┌─────────────────────────────────────────────────────┐
│              [Section Heading]                       │
│         Installation - 2 Minutes                     │
│                                                      │
│  [Safari Terminal Mockup]                            │
│  ┌──────────────────────────────────────────────┐  │
│  │ $ [Text Animate - Typing Command]             │  │
│  │   git clone https://github.com/...            │  │
│  │                                               │  │
│  │   [Shiny Button - Copy] 📋                    │  │
│  └──────────────────────────────────────────────┘  │
│                                                      │
│  [Animated List - 3 Steps with Checkmarks]          │
│  ┌─────────────────────────────────────────────┐   │
│  │ ✓ [Step 1] Clone and install                 │   │
│  │   git clone + cd claude-mem                  │   │
│  │                                               │   │
│  │ ○ [Step 2] Add to Claude Code                │   │
│  │   /plugin marketplace add .claude-plugin/... │   │
│  │                                               │   │
│  │ ○ [Step 3] Install                           │   │
│  │   /plugin install claude-mem                 │   │
│  └─────────────────────────────────────────────┘   │
│                                                      │
│  [Highlighter on "2 minutes"]                        │
│  [Confetti when all steps complete]                 │
│                                                      │
│  [Pulsating Button - "Get Started"]                 │
└─────────────────────────────────────────────────────┘

Component Specifications

Safari (Terminal Mockup)

<Safari
  url="terminal"
  width={800}
  height={400}
  mode="simple"
  className="mb-8"
>
  <TerminalContent />
</Safari>

Text Animate (Typing Commands)

const commands = [
  "git clone https://github.com/thedotmack/claude-mem.git",
  "cd claude-mem",
  "/plugin marketplace add .claude-plugin/marketplace.json",
  "/plugin install claude-mem"
];

<TextAnimate
  animateType="character"
  animation="slideUp"
  duration={0.03}
  className="font-mono text-green-400"
>
  $ {currentCommand}
</TextAnimate>

Shiny Button (Copy Button)

<ShinyButton
  onClick={handleCopy}
  className="absolute top-2 right-2"
>
  <CopyIcon /> Copy
</ShinyButton>

Animated List (3 Steps)

<AnimatedList delay={600} className="space-y-6">
  {steps.map((step, index) => (
    <div
      key={index}
      className={`flex items-start gap-4 p-4 rounded-lg transition-all ${
        step.completed ? 'bg-green-900/20' : 'bg-gray-800/50'
      }`}
    >
      <div className="text-3xl">
        {step.completed ? '✓' : '○'}
      </div>
      <div className="flex-1">
        <h4 className="text-lg font-semibold mb-2">
          {step.title}
        </h4>
        <code className="text-sm text-gray-300 block bg-gray-900 p-2 rounded">
          {step.command}
        </code>
      </div>
      {step.completed && <CheckIcon className="text-green-400" />}
    </div>
  ))}
</AnimatedList>

Highlighter ("2 minutes")

<Highlighter
  color="#10b981"
  action="highlight"
  strokeWidth={3}
  className="inline"
>
  2 minutes
</Highlighter>

Confetti (Completion Celebration)

{allStepsComplete && (
  <Confetti
    particleCount={100}
    angle={90}
    spread={70}
    origin={{ x: 0.5, y: 0.6 }}
    colors={['#10b981', '#3b82f6', '#8b5cf6']}
  />
)}

Pulsating Button (Get Started CTA)

<PulsatingButton
  pulseColor="59, 130, 246"
  duration="1.5s"
  className="mx-auto mt-8 text-lg px-8 py-4"
  onClick={scrollToTop}
>
  Get Started Now
</PulsatingButton>

Interactive Sequence

  1. Terminal appears with first command typing
  2. User clicks copy button → copied feedback
  3. Shiny Button shows success state briefly
  4. Animated list reveals steps sequentially
  5. As user progresses (simulated or tracked), checkmarks appear
  6. When final step completes → Confetti celebration
  7. Pulsating button draws attention to next action

Implementation Notes

  • Terminal has realistic command-line styling
  • Copy buttons work with clipboard API
  • Consider simulating installation progress (for demo)
  • Track actual installation if possible (analytics)
  • Confetti fires once, not repeatedly
  • Ensure keyboard navigation for copy buttons
  • Mobile: Reduce terminal size, keep copy buttons visible

Section 9: UNDER THE HOOD - Architecture

Winning Concept: "Layered Stack" (Score: 44/50)

Layout

┌─────────────────────────────────────────────────────┐
│         [Warp Background - Depth Effect]             │
│                                                      │
│         [Morphing Text - Active Layer]               │
│    "Hooks" → "Worker" → "SQLite" → "MCP" → "Context"│
│                                                      │
│              [5 Layered Magic Cards]                 │
│                                                      │
│  ┌────────────────────────────────┐  [Layer 1]     │
│  │  Hooks (SessionStart, PostTool) │  ← Shine       │
│  │  📌 5 lifecycle hooks           │     Border     │
│  └─│──────────────────────────────┘                 │
│    │ [Particles flowing down]                       │
│  ┌─│────────────────────────────────┐ [Layer 2]    │
│  │ Worker Service                   │               │
│  │ ⚙️  Express.js + PM2             │               │
│  └─│────────────────────────────────┘               │
│    │                                                 │
│  ┌─│──────────────────────────────────┐ [Layer 3]  │
│  │ SQLite Database                    │             │
│  │ 💾 FTS5 Search + Sessions          │             │
│  └─│──────────────────────────────────┘             │
│    │                                                 │
│  ┌─│────────────────────────────────┐ [Layer 4]    │
│  │ MCP Server                       │               │
│  │ 🔍 7 Search Tools                │               │
│  └─│────────────────────────────────┘               │
│    │                                                 │
│  ┌─│──────────────────────────────────┐ [Layer 5]  │
│  │ Context Injection                  │             │
│  │ 🎯 Future Session Loading          │             │
│  └────────────────────────────────────┘             │
│                                                      │
│  [Highlighter on "Zero maintenance. Just works."]   │
└─────────────────────────────────────────────────────┘

Component Specifications

Warp Background

<Warp
  perspective={1200}
  beamsPerSide={5}
  beamSize={4}
  beamDuration={3}
  gridColor="#1e293b"
  className="absolute inset-0 -z-10"
/>

Morphing Text (Active Layer Indicator)

<MorphingText
  texts={["Hooks", "Worker Service", "SQLite Database", "MCP Server", "Context Injection"]}
  className="text-3xl font-bold text-center mb-12"
/>

Layered Magic Cards (5 Layers)

const layers = [
  {
    title: 'Hooks',
    icon: '📌',
    description: '5 lifecycle hooks capture tool usage',
    details: 'SessionStart, UserPromptSubmit, PostToolUse, Summary, SessionEnd',
    zIndex: 50,
    transform: 'rotateX(5deg) translateY(0px)',
    shine: true
  },
  {
    title: 'Worker Service',
    icon: '⚙️',
    description: 'Express.js HTTP API managed by PM2',
    details: 'Processes observations, handles AI compression',
    zIndex: 40,
    transform: 'rotateX(10deg) translateY(60px)'
  },
  {
    title: 'SQLite Database',
    icon: '💾',
    description: 'FTS5 full-text search + structured storage',
    details: 'Sessions, observations, summaries with citations',
    zIndex: 30,
    transform: 'rotateX(15deg) translateY(120px)',
    highlight: true // Central piece
  },
  {
    title: 'MCP Server',
    icon: '🔍',
    description: '7 specialized search tools',
    details: 'search_observations, find_by_concept, find_by_type, etc.',
    zIndex: 20,
    transform: 'rotateX(20deg) translateY(180px)'
  },
  {
    title: 'Context Injection',
    icon: '🎯',
    description: 'Loads relevant context into future sessions',
    details: 'Automatic retrieval of last 3 session summaries',
    zIndex: 10,
    transform: 'rotateX(25deg) translateY(240px)'
  }
];

<div className="relative perspective-1000 h-[800px]">
  {layers.map((layer, index) => (
    <div
      key={index}
      className="absolute left-1/2 -translate-x-1/2 w-[600px]"
      style={{
        zIndex: layer.zIndex,
        transform: layer.transform
      }}
    >
      {layer.shine ? (
        <ShineBorder
          color={["#3b82f6", "#8b5cf6"]}
          borderWidth={3}
          duration={12}
        >
          <LayerCard layer={layer} />
        </ShineBorder>
      ) : (
        <MagicCard
          gradientColor={layer.highlight ? "#1e3a5f" : "#1a1a2e"}
          gradientFrom="#3b82f6"
          gradientTo="#8b5cf6"
        >
          <LayerCard layer={layer} />
        </MagicCard>
      )}
    </div>
  ))}

  <Particles
    className="absolute inset-0"
    quantity={30}
    color="#3b82f6"
  />
</div>

Layer Card Component

const LayerCard = ({ layer }) => (
  <div className="p-6 bg-gray-900/80 backdrop-blur">
    <div className="flex items-center gap-3 mb-3">
      <span className="text-4xl">{layer.icon}</span>
      <h3 className="text-2xl font-bold">{layer.title}</h3>
    </div>
    <p className="text-lg text-gray-200 mb-2">{layer.description}</p>
    <p className="text-sm text-gray-400">{layer.details}</p>
  </div>
);

Highlighter (Tagline)

<Highlighter
  color="#10b981"
  action="underline"
  strokeWidth={3}
  className="text-2xl text-center block mt-12"
>
  Zero maintenance. Runs in the background. Just works.
</Highlighter>

Animation Sequence

  1. Warp background creates depth immediately
  2. Cards slide in from top with stagger (150ms between)
  3. Each card settles into z-position
  4. Morphing text cycles through layer names
  5. Shine Border on top layer (Hooks) pulses
  6. Particles flow downward between layers
  7. On scroll/hover: cards can expand slightly to show more detail

Implementation Notes

  • Use CSS perspective and transform for 3D effect
  • Cards stack with decreasing z-index
  • Active layer (from morphing text) gets subtle highlight
  • Particles subtle, flow from top to bottom
  • Consider scroll interaction: layers separate as you scroll
  • Responsive: reduce perspective on mobile, stack more vertically
  • Ensure text remains readable at all angles

Section 10: USE CASES - User Types

Winning Concept: "Role Selector" (Score: 46/50) HIGHEST DELIGHT

Layout

┌─────────────────────────────────────────────────────┐
│              [Section Heading]                       │
│                 Use Cases                            │
│                                                      │
│         [Dock Component - Role Icons]                │
│  ┌────────────────────────────────────────────┐    │
│  │  👤     👥      🎓      🔧                  │    │
│  │  Solo   Team  Learning Refactor             │    │
│  └────────────────────────────────────────────┘    │
│                                                      │
│  [Expanded Magic Card - Selected Role]              │
│  ┌──────────────────────────────────────────────┐  │
│  │  [Spotlight Effect Active]                    │  │
│  │                                               │  │
│  │  Solo Developers                              │  │
│  │  [Avatar Circles - User Count]                │  │
│  │  +2,500                                       │  │
│  │                                               │  │
│  │  [Animated List - Benefits]                   │  │
│  │  ✓ Never lose context between sessions        │  │
│  │  ✓ Build on past decisions automatically      │  │
│  │  ✓ Remember why you made each choice          │  │
│  │                                               │  │
│  │  [Highlighter on key benefits]                │  │
│  └──────────────────────────────────────────────┘  │
│                                                      │
│  [Confetti when selecting "your" role]              │
└─────────────────────────────────────────────────────┘

Component Specifications

Dock (Role Selector)

const roles = [
  { id: 'solo', icon: '👤', label: 'Solo Developers' },
  { id: 'team', icon: '👥', label: 'Team Projects' },
  { id: 'learning', icon: '🎓', label: 'Learning & Experiments' },
  { id: 'refactor', icon: '🔧', label: 'Large Refactors' }
];

<Dock
  iconMagnification={80}
  iconDistance={150}
  direction="middle"
  className="mb-12"
>
  {roles.map((role) => (
    <DockIcon
      key={role.id}
      onClick={() => selectRole(role.id)}
      className={selectedRole === role.id ? 'scale-125' : ''}
    >
      <div className="text-5xl">{role.icon}</div>
      <span className="text-xs mt-1">{role.label}</span>
    </DockIcon>
  ))}
</Dock>

Magic Card (Expanded Role Details)

const useCases = {
  solo: {
    title: 'Solo Developers',
    userCount: 2500,
    gradient: { from: '#3b82f6', to: '#8b5cf6' },
    benefits: [
      'Never lose context between coding sessions',
      'Build on past decisions automatically',
      'Remember why you made each choice',
      'Track your learning journey over time'
    ]
  },
  team: {
    title: 'Team Projects',
    userCount: 1200,
    gradient: { from: '#10b981', to: '#3b82f6' },
    benefits: [
      'Share architectural knowledge across sessions',
      'Maintain consistency in code patterns',
      'Document decisions as they happen',
      'Onboard new team members with context'
    ]
  },
  learning: {
    title: 'Learning & Experiments',
    userCount: 1800,
    gradient: { from: '#f59e0b', to: '#ec4899' },
    benefits: [
      'Track what you tried and what worked',
      'Build a personal knowledge base',
      'Learn from past mistakes',
      'See your progress over time'
    ]
  },
  refactor: {
    title: 'Large Refactors',
    userCount: 900,
    gradient: { from: '#8b5cf6', to: '#ec4899' },
    benefits: [
      'Remember what you changed across multiple sessions',
      'Track progress on multi-day tasks',
      'Maintain context through interruptions',
      'Reference old implementations easily'
    ]
  }
};

<MagicCard
  className="max-w-2xl mx-auto p-8"
  gradientFrom={currentUseCase.gradient.from}
  gradientTo={currentUseCase.gradient.to}
  gradientSize={250}
>
  <h3 className="text-3xl font-bold mb-4">
    {currentUseCase.title}
  </h3>

  <AvatarCircles
    numPeople={currentUseCase.userCount}
    className="mb-6"
  />

  <AnimatedList delay={300} className="space-y-3">
    {currentUseCase.benefits.map((benefit, index) => (
      <div key={index} className="flex items-start gap-3">
        <CheckIcon className="text-green-400 flex-shrink-0 mt-1" />
        <p className="text-lg">
          <Highlighter
            color="#3b82f6"
            action="underline"
            strokeWidth={2}
          >
            {highlightKeyPhrase(benefit)}
          </Highlighter>
        </p>
      </div>
    ))}
  </AnimatedList>
</MagicCard>

Confetti (Selection Celebration)

{justSelected && (
  <ConfettiButton
    options={{
      particleCount: 80,
      spread: 60,
      origin: { x: 0.5, y: 0.4 },
      colors: [
        currentUseCase.gradient.from,
        currentUseCase.gradient.to,
        '#ffffff'
      ]
    }}
  />
)}

Interactive Behavior

  1. Dock icons magnify on hover (macOS-style)
  2. Click icon → Card expands with selected role details
  3. Magic Card spotlight follows cursor
  4. Avatar Circles show user count for that role
  5. Animated List reveals benefits sequentially
  6. Key phrases highlighted in benefits
  7. Confetti celebration when role selected (delight moment!)
  8. Consider: "This is me!" button that triggers extra confetti

Implementation Notes

  • Dock provides familiar, intuitive interface
  • Smooth transitions between role selections (300ms)
  • Avatar Circles update count with animation
  • Confetti fires once per selection
  • Consider adding a quiz: "Which role fits you?" → confetti on result
  • Track which roles are most popular (analytics)
  • Ensure dock works well on touch devices
  • Mobile: Dock might need to be grid instead of horizontal

Section 11: FAQ

Winning Concept: "Scratch to Answer" (Score: 42/50)

Layout

┌─────────────────────────────────────────────────────┐
│              [Section Heading]                       │
│                     FAQ                              │
│                                                      │
│  [Morphing Text - Common Concerns]                   │
│  "Cost?" → "Speed?" → "Privacy?" → "Storage?"        │
│                                                      │
│  ┌──────────────────┬──────────────────┐           │
│  │ [Scratch Card]   │ [Scratch Card]   │           │
│  │ ┌──────────────┐ │ ┌──────────────┐ │           │
│  │ │ Does this    │ │ │ How much does│ │           │
│  │ │ slow down    │ │ │ it cost?     │ │           │
│  │ │ Claude?      │ │ │              │ │           │
│  │ │              │ │ │ [Scratch to  │ │           │
│  │ │ [Scratch to  │ │ │  reveal]     │ │           │
│  │ │  reveal]     │ │ │              │ │           │
│  │ └──────────────┘ │ └──────────────┘ │           │
│  └──────────────────┴──────────────────┘           │
│                                                      │
│  [6 Question Cards Total - 2x3 Grid]                │
│                                                      │
│  [Revealed cards show Magic Card with Confetti]     │
│                                                      │
│  [Pulsating Button - "More Questions?"]             │
└─────────────────────────────────────────────────────┘

Component Specifications

Morphing Text (Common Concerns)

<MorphingText
  texts={["Cost?", "Speed?", "Privacy?", "Storage?", "Search?", "Compatibility?"]}
  className="text-2xl font-semibold text-center mb-8 text-gray-400"
/>

FAQ Data

const faqs = [
  {
    question: 'Does this slow down Claude?',
    answer: 'No. Memory processing happens in the background via PM2 worker service. Claude responds instantly. Zero impact on response time.',
    important: false
  },
  {
    question: 'How much does it cost?',
    answer: 'Minimal. Memory compression uses your chosen model (default: Sonnet 4.5). Typical cost: $0.01-0.05 per coding session.',
    important: false
  },
  {
    question: 'Where is data stored?',
    answer: 'Locally in ~/.claude-mem/claude-mem.db on your machine. Fully private. Never leaves your computer. You have complete control.',
    important: true, // Triggers confetti
    highlight: 'Fully private. Never leaves your computer.'
  },
  {
    question: 'Can I search my memories?',
    answer: 'Yes! 7 specialized search tools available through Claude. Search by file, concept, type, date range, or full-text query.',
    important: false
  },
  {
    question: 'Does it work with existing projects?',
    answer: 'Yes. claude-mem starts learning immediately when installed. No configuration needed. Works with any project.',
    important: false
  },
  {
    question: 'What if I want to forget something?',
    answer: 'Delete observations directly from the SQLite database, or start fresh by removing ~/.claude-mem/claude-mem.db.',
    important: false
  }
];

Scratch To Reveal FAQ Cards

<div className="grid grid-cols-2 gap-6 max-w-4xl mx-auto">
  {faqs.map((faq, index) => (
    <div key={index} className="relative">
      <ScratchToReveal
        width={380}
        height={280}
        minScratchPercentage={45}
        gradientColors={['#1e293b', '#334155', '#475569']}
        onComplete={() => handleReveal(index, faq.important)}
      >
        <MagicCard className="h-full p-6">
          <h4 className="text-lg font-bold mb-4 text-blue-400">
            {faq.question}
          </h4>

          <p className="text-sm leading-relaxed text-gray-200">
            {faq.highlight ? (
              <Highlighter
                color="#10b981"
                action="highlight"
                strokeWidth={3}
              >
                {faq.highlight}
              </Highlighter>
            ) : (
              faq.answer
            )}
          </p>
        </MagicCard>
      </ScratchToReveal>

      {revealed[index] && faq.important && (
        <Confetti
          particleCount={60}
          angle={90}
          spread={50}
          origin={{ x: 0.5, y: 0.5 }}
          colors={['#10b981', '#3b82f6', '#ffffff']}
        />
      )}
    </div>
  ))}
</div>

Pulsating Button (More Questions)

<PulsatingButton
  pulseColor="139, 92, 246" // Purple
  duration="2s"
  className="mx-auto mt-12"
  onClick={() => window.location.href = 'https://github.com/thedotmack/claude-mem/issues'}
>
  More Questions? Ask on GitHub
</PulsatingButton>

Interactive Behavior

  1. Questions visible on scratch surface
  2. User scratches card to reveal answer
  3. When 45% scratched → answer revealed
  4. Revealed card shows Magic Card beneath with answer
  5. Important answers (privacy) trigger Confetti celebration
  6. Highlighter emphasizes critical information
  7. Track which questions get scratched first (analytics)

Implementation Notes

  • Scratch surfaces need good contrast for question text
  • Answer text should be easily readable when revealed
  • Confetti fires only for "important" questions (privacy, security)
  • Consider adding a "Reveal All" button for accessibility
  • Scratch works on touch and mouse
  • Mobile: Single column layout
  • Ensure keyboard navigation alternative to scratching
  • Consider fade-in animation for revealed cards

BONUS: Testimonials Section

Concept: "Social Proof Marquee"

Layout

┌─────────────────────────────────────────────────────┐
│         What Developers Say                          │
│                                                      │
│  [Marquee - 3D Mode - Continuous Scroll]             │
│  ┌────────────────────────────────────────────────┐ │
│  │                                                 │ │
│  │  [Magic Card 1]  [Magic Card 2]  [Magic Card 3]│ │
│  │  "I used to     "It's like      "The search is │ │
│  │   spend 10min   having a        incredible."   │ │
│  │   every morning teammate..."                    │ │
│  │   explaining"                                   │ │
│  │                                                 │ │
│  │  [Shine Border on featured testimonial]        │ │
│  └────────────────────────────────────────────────┘ │
│                                                      │
│  [Avatar Circles - Total Developers]                 │
│  +5,000                                              │
│                                                      │
│  [Highlighter on impactful quotes]                   │
└─────────────────────────────────────────────────────┘

Implementation

<Marquee
  pauseOnHover={true}
  vertical={false}
  repeat={3}
  className="py-8"
>
  {testimonials.map((testimonial, index) => (
    <MagicCard
      key={index}
      className="w-80 p-6 mx-4"
      gradientFrom="#3b82f6"
      gradientTo="#8b5cf6"
    >
      {testimonial.featured && (
        <ShineBorder
          color={["#10b981", "#3b82f6"]}
          borderWidth={2}
        />
      )}

      <p className="text-lg italic mb-4">
        "<Highlighter color="#3b82f6" action="underline">
          {testimonial.highlight}
        </Highlighter> {testimonial.rest}"
      </p>

      <div className="flex items-center gap-3">
        <Avatar src={testimonial.avatar} />
        <div>
          <p className="font-semibold">{testimonial.name}</p>
          <p className="text-sm text-gray-400">{testimonial.role}</p>
        </div>
      </div>
    </MagicCard>
  ))}
</Marquee>

<AvatarCircles
  numPeople={5000}
  className="mx-auto mt-8"
/>

Global Design System

Color Palette

const colors = {
  primary: {
    blue: '#3b82f6',
    purple: '#8b5cf6',
    indigo: '#6366f1'
  },
  success: {
    green: '#10b981',
    emerald: '#059669'
  },
  warning: {
    orange: '#f59e0b',
    amber: '#f59e0b'
  },
  error: {
    red: '#ef4444',
    rose: '#f43f5e'
  },
  neutral: {
    gray900: '#0a0f1e',
    gray800: '#1a1a2e',
    gray700: '#2a2a3e',
    gray600: '#3a3a4e',
    gray400: '#8a8a9e',
    gray200: '#cacade'
  }
};

Typography

const typography = {
  hero: 'text-6xl font-bold',
  h1: 'text-5xl font-bold',
  h2: 'text-4xl font-bold',
  h3: 'text-3xl font-bold',
  h4: 'text-2xl font-semibold',
  body: 'text-base leading-relaxed',
  small: 'text-sm',
  code: 'font-mono text-sm bg-gray-900 px-2 py-1 rounded'
};

Spacing

const spacing = {
  sectionPadding: 'py-20 px-6',
  cardPadding: 'p-6',
  cardGap: 'gap-6',
  stackSpacing: 'space-y-12'
};

Animation Timings

const animations = {
  fast: '200ms',
  normal: '300ms',
  slow: '500ms',
  stagger: '150ms',
  typing: '30-50ms per character',
  morphDuration: '2500-3000ms'
};

Performance Optimization

Lazy Loading Strategy

  1. Above the fold (Hero): Load immediately
  2. Near viewport: Preload when within 200px
  3. Below fold: Lazy load on scroll
  4. Interactive elements: Load on user interaction

Component Loading Priority

Priority 1 (Immediate):
- Grid Beams (Hero background)
- Morphing Text (Hero headline)
- Orbiting Circles (Hero visualization)

Priority 2 (Fast):
- Safari mockups (Before/After)
- Text Animate (Typing effects)
- Border Beam (Highlights)

Priority 3 (Lazy):
- Scratch To Reveal (Load on viewport)
- Confetti (Load on demand)
- Particles (Load when section visible)

Optimization Techniques

  1. Code splitting: Load Magic UI components on demand
  2. Image optimization: Use WebP, lazy load images
  3. Animation throttling: Reduce motion for prefers-reduced-motion
  4. Intersection Observer: Trigger animations on scroll
  5. Debounce: Scratch events, hover effects

Accessibility Guidelines

WCAG 2.1 AA Compliance

Keyboard Navigation

  • All interactive elements focusable
  • Tab order logical
  • Skip links for section navigation
  • Escape key dismisses modals/overlays

Screen Readers

// Scratch To Reveal alternative
<ScratchToReveal ariaLabel="Scratch to reveal answer">
  <div role="region" aria-live="polite">
    {answer}
  </div>
</ScratchToReveal>

// Animation alternatives
<MorphingText aria-label="Claude Never Forgets - permanent memory for Claude Code">
  {/* Visual morphing text */}
</MorphingText>

Color Contrast

  • Minimum 4.5:1 for normal text
  • Minimum 3:1 for large text
  • Test with tools like axe, Lighthouse

Motion Preferences

@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }

  /* Disable confetti, particles */
  .confetti, .particles {
    display: none;
  }
}

Focus Indicators

:focus-visible {
  outline: 2px solid #3b82f6;
  outline-offset: 2px;
}

Responsive Design Breakpoints

Mobile First Approach

Breakpoints

const breakpoints = {
  mobile: '0px',      // 0-640px
  tablet: '640px',    // 640-1024px
  desktop: '1024px',  // 1024-1536px
  wide: '1536px'      // 1536px+
};

Section Adaptations

Hero

  • Mobile: Stack vertically, reduce orbiting circles
  • Tablet: Maintain layout, smaller circles
  • Desktop: Full experience

Before/After

  • Mobile: Stack vertically (Before on top, After below)
  • Tablet: Side by side with smaller Safari mockups
  • Desktop: Full side-by-side

Real Examples (Timeline)

  • Mobile: Vertical timeline, tap to expand
  • Tablet: Horizontal timeline, smaller orbits
  • Desktop: Full arc timeline with orbits

Installation

  • Mobile: Full-width terminal, stack steps
  • Tablet: Maintain layout, smaller terminal
  • Desktop: Full experience

Use Cases (Dock)

  • Mobile: 2x2 grid instead of dock
  • Tablet: Horizontal dock, smaller icons
  • Desktop: Full dock with magnification

Analytics & Tracking

Key Metrics to Track

Engagement

  • Section scroll depth
  • Time spent per section
  • Interactive element usage (scratch cards, dock clicks)
  • Confetti trigger count

Conversion

  • Installation section CTR
  • Copy button clicks
  • GitHub link clicks
  • "Get Started" button clicks

User Behavior

  • Which use case selected most
  • Which FAQ questions scratched first
  • Which examples viewed longest
  • Search demo interaction rate

Implementation

// Example event tracking
const trackEvent = (category, action, label) => {
  if (typeof gtag !== 'undefined') {
    gtag('event', action, {
      event_category: category,
      event_label: label
    });
  }
};

// Usage
<PulsatingButton
  onClick={() => {
    trackEvent('CTA', 'click', 'Get Started Hero');
    // ... navigation
  }}
>
  Get Started
</PulsatingButton>

Technical Implementation Notes

Dependencies

{
  "dependencies": {
    "react": "^18.0.0",
    "next": "^14.0.0",
    "magic-ui": "latest",
    "tailwindcss": "^3.4.0",
    "framer-motion": "^10.0.0"
  }
}

Installation

# Install Magic UI
npm install magic-ui

# Install required components
npx shadcn-ui@latest add morphing-text
npx shadcn-ui@latest add orbiting-circles
npx shadcn-ui@latest add scratch-to-reveal
npx shadcn-ui@latest add safari
npx shadcn-ui@latest add arc-timeline
npx shadcn-ui@latest add grid-beams
npx shadcn-ui@latest add magic-card
npx shadcn-ui@latest add border-beam
npx shadcn-ui@latest add shine-border
npx shadcn-ui@latest add dock
npx shadcn-ui@latest add confetti
npx shadcn-ui@latest add pulsating-button
npx shadcn-ui@latest add aurora-text
npx shadcn-ui@latest add highlighter
npx shadcn-ui@latest add animated-list
npx shadcn-ui@latest add text-animate
npx shadcn-ui@latest add marquee
npx shadcn-ui@latest add avatar-circles

File Structure

landing-page/
├── components/
│   ├── sections/
│   │   ├── Hero.tsx
│   │   ├── BeforeAfter.tsx
│   │   ├── RealExamples.tsx
│   │   ├── HowItWorks.tsx
│   │   ├── WhatGetsRemembered.tsx
│   │   ├── PowerfulSearch.tsx
│   │   ├── TheNumbers.tsx
│   │   ├── Installation.tsx
│   │   ├── UnderTheHood.tsx
│   │   ├── UseCases.tsx
│   │   └── FAQ.tsx
│   ├── ui/
│   │   └── [Magic UI components]
│   └── shared/
│       ├── SectionWrapper.tsx
│       └── Container.tsx
├── lib/
│   ├── constants.ts
│   ├── data.ts
│   └── utils.ts
├── public/
│   ├── images/
│   └── icons/
└── pages/
    └── index.tsx

Testing Checklist

Browser Testing

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • Mobile Safari (iOS)
  • Chrome Mobile (Android)

Device Testing

  • iPhone (Safari)
  • iPad (Safari)
  • Android phone (Chrome)
  • Android tablet (Chrome)
  • Desktop (1920x1080)
  • Desktop (2560x1440)

Functionality Testing

  • All animations trigger correctly
  • Scratch-to-reveal works on touch and mouse
  • Confetti fires on correct events
  • Copy buttons work
  • Dock magnification works
  • Timeline navigation works
  • All links functional
  • Performance acceptable (<3s LCP)

Accessibility Testing

  • Keyboard navigation works
  • Screen reader friendly
  • Color contrast passes WCAG AA
  • Focus indicators visible
  • Reduced motion respected
  • Alt text on all images

Launch Checklist

Pre-Launch

  • Content finalized and proofread
  • All components tested in isolation
  • Full page tested on all browsers
  • Performance optimized (Lighthouse score >90)
  • SEO meta tags added
  • Open Graph images created
  • Analytics tracking implemented
  • A/B testing variants prepared

Launch Day

  • Deploy to production
  • Verify all links work
  • Test on real devices
  • Monitor analytics
  • Check for console errors
  • Social media announcements ready

Post-Launch

  • Monitor conversion rates
  • Gather user feedback
  • Iterate based on data
  • Create marketing assets (screenshots, videos)
  • Document learnings

Summary: Why This Design Works

Storytelling Through Interaction

Every section uses components to demonstrate rather than describe:

  • Hero: Orbiting circles show what gets remembered
  • Before/After: Fading vs persisting shows the difference
  • Examples: Timeline shows progression across sessions
  • Pipeline: Layered stack shows architecture hierarchy
  • Features: Scratch-to-reveal makes discovery engaging
  • Search: Live demo shows actual capability
  • Metrics: Progress bars visualize transformation
  • Installation: Typing effect shows realistic process
  • Architecture: Depth shows layered system
  • Use Cases: Dock lets users find themselves
  • FAQ: Scratching makes learning fun

Delight at Every Turn

  • Confetti celebrates milestones (installation complete, finding your use case, revealing important answers)
  • Pulsating buttons draw attention to actions
  • Magic cards with spotlights make content feel premium
  • Border beams guide attention
  • Morphing text keeps content dynamic

Intuitive Understanding

  • Familiar patterns (Safari browser, dock, terminal)
  • Visual metaphors (orbits for data flow, layers for architecture)
  • Progressive disclosure (scratch to reveal, animated lists)
  • Clear hierarchy (section headings, consistent spacing)

Conversion Optimized

  • Low friction (copy buttons, clear steps)
  • Social proof (avatar circles, testimonials)
  • Value demonstration (metrics, examples, search)
  • Multiple CTAs (hero, installation, bottom)

Total Component Count: 17 unique Magic UI components Average Section Score: 43.5/50 (87%) Highest Scoring Sections:

  1. Use Cases (46/50) - Highest delight
  2. The Numbers (45/50) - Best storytelling
  3. Before/After, Real Examples, Search, Installation, Under The Hood (all 44/50)

Implementation Timeline: 2-3 weeks for full build with polish Estimated Performance: Lighthouse score 85-95 with optimizations Predicted Conversion Lift: 30-50% vs plain text landing page