Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-mode-arcade/llms.txt

Use this file to discover all available pages before exploring further.

The Case Studies page reframes a deep project breakdown as a boss fight replay screen. A single case study is shown at a time, walked through three dramatic phases: introducing the problem as a boss with a full HP bar, revealing the strategy and combat moves that addressed it, and finally declaring victory with a depleted HP bar and a STAGE CLEARED banner. The animated HealthBar component drives the visual tension — its width transitions from 100% down to 0% across the three phases. Case study data is sourced from the caseStudies array in data/mockData.js, and the page always displays the first item in that array.

Route

PropertyValue
Path/case-studies
File (compiled)assets/main.jsCaseStudiesPage component
Data exportcaseStudies (exported as c from mockData.js)
Theme colorsarcade-magenta · arcade-lime · arcade-purple
Screen titleBOSS FIGHT REPLAY

What It Displays

The page is divided into three sequential phase blocks displayed vertically. Each phase has its own heading, HP bar state, and content block.

Phase 1 — THE BOSS

Introduces the problem or legacy system being tackled. The boss name renders with a magenta neon glow and the HP bar shows 100% — the problem is at full strength.
ElementDescription
Boss nameLarge VT323 heading with arcade-magenta glow
Problem descriptionProse block describing the nature of the challenge
HP barHealthBar component at 100% width, red fill

Phase 2 — STRATEGY

Presents the approach taken to solve the problem. The HP bar drops to 45%, indicating the boss is wounded. A strategy summary paragraph is shown alongside a list of “combos” — the specific technical decisions or actions taken.
ElementDescription
HP barHealthBar at 45% width
Strategy textProse paragraph describing the approach
Combos listBulleted list of key technical moves

Phase 3 — VICTORY

Declares the outcome. The HP bar reaches 0%, the boss is defeated, and a STAGE CLEARED banner appears in lime green. A bonus stat line is listed below the banner.
ElementDescription
HP barHealthBar at 0% width
Victory textShort declaration of the outcome
STAGE CLEARED bannerLarge lime pixel-font banner
BonusNext-step or bonus outcome string

Current Case Study

The default dataset contains one case study: Project: Overhaul.
FieldValue
TitleProject: Overhaul
BossThe Legacy Monolith
ProblemA 5-year-old jQuery application that took 12 seconds to load and was impossible to maintain.
StrategyStrangler fig pattern. Slowly replacing jQuery widgets with React components mounted via portals.
CombosWebpack to Vite migration · Redux Toolkit adoption · Custom design system implementation
VictoryLoad time reduced to 1.2s. Developer onboarding time cut in half. Zero downtime during migration.
BonusNext step: migrating the remaining REST endpoints to GraphQL.

HealthBar Component

The HealthBar (internal component) animates its fill width from 0 to its target value using Framer Motion’s whileInView trigger. This means each HP bar animates in as the user scrolls down to its phase, creating a staged reveal effect.
// Approximate HealthBar usage in CaseStudiesPage
<HealthBar
  value={100}   // Phase 1
  color="red"
/>

<HealthBar
  value={45}    // Phase 2
  color="yellow"
/>

<HealthBar
  value={0}     // Phase 3
  color="green"
/>
The page always renders caseStudies[0] — the first item in the array. There is no pagination or carousel for multiple case studies. To feature a different case study, either reorder the array so your preferred entry is first, or update the component to accept an index prop.

Animations

The HealthBar width animates via Framer Motion whileInView as each phase scrolls into the viewport:
// Approximate HealthBar animation
const barVariants = {
  hidden: { width: "0%" },
  visible: {
    width: `${value}%`,
    transition: { duration: 1.2, ease: "easeOut" },
  },
};
The STAGE CLEARED banner uses a neon-flicker CSS animation identical to the Home page headline, giving it an authentic attract-screen feel.

Data Schema

Each entry in the caseStudies array must conform to the following shape:
// data/mockData.js — case study object shape
{
  id: string,       // Unique identifier, used as React key
  title: string,    // Project title shown at the top of the replay
  boss: string,     // The "villain" — e.g. "The Legacy Monolith"
  problem: string,  // Prose description of the challenge (Phase 1)
  strategy: string, // Prose paragraph describing the approach (Phase 2)
  combos: string[], // Bulleted list of technical moves (Phase 2)
  victory: string,  // Short outcome declaration (Phase 3)
  bonus: string,    // Next-step or bonus result shown after STAGE CLEARED
}

Field Reference

FieldTypePhaseDescription
idstringReact key, not displayed
titlestringHeaderReplay title shown above Phase 1
bossstringPhase 1Large glowing boss name heading
problemstringPhase 1Prose description of the challenge
strategystringPhase 2One-paragraph strategy summary
combosstring[]Phase 2Bulleted list of technical actions
victorystringPhase 3Brief victory declaration
bonusstringPhase 3Bonus outcome or next-step note

Customization

Replacing the featured case study Update the first (or only) entry in data/mockData.js:
// data/mockData.js (export c)
[
  {
    id: "cs-1",
    title: "Project: Overhaul",
    boss: "The Legacy Monolith",
    problem:
      "A 5-year-old jQuery application that took 12 seconds to load and was impossible to maintain.",
    strategy:
      "Strangler fig pattern. Slowly replacing jQuery widgets with React components mounted via portals.",
    combos: [
      "Webpack to Vite migration",
      "Redux Toolkit adoption",
      "Custom design system implementation",
    ],
    victory:
      "Load time reduced to 1.2s. Developer onboarding time cut in half. Zero downtime during migration.",
    bonus: "Next step: migrating the remaining REST endpoints to GraphQL.",
  },
]
Adding multiple case studies Add additional objects to the caseStudies array. To display them, you’ll need to add navigation controls to the CaseStudiesPage component (e.g. PREV / NEXT arcade buttons) and track the active index in useState.
Keep boss short — it renders at large pixel-font size with a magenta glow. Names longer than about 25 characters may overflow on mobile viewports. Use a punchy label like "The Legacy Monolith" or "The Spaghetti API" rather than a full project name.

Sample Data

// data/mockData.js (export c)
[
  {
    id: "cs-1",
    title: "Project: Overhaul",
    boss: "The Legacy Monolith",
    problem:
      "A 5-year-old jQuery application that took 12 seconds to load and was impossible to maintain.",
    strategy:
      "Strangler fig pattern. Slowly replacing jQuery widgets with React components mounted via portals.",
    combos: [
      "Webpack to Vite migration",
      "Redux Toolkit adoption",
      "Custom design system implementation",
    ],
    victory:
      "Load time reduced to 1.2s. Developer onboarding time cut in half. Zero downtime during migration.",
    bonus: "Next step: migrating the remaining REST endpoints to GraphQL.",
  },
]

Projects

The full project gallery where this case study also appears as a cartridge card.

Writing

Long-form articles and blog posts in the instruction manual format.

Mock Data Reference

Full schema for the caseStudies export and all other mockData.js arrays.

Animations

HealthBar whileInView animation and neon-flicker CSS keyframe reference.

Build docs developers (and LLMs) love