Figma → Template
First wireframe extended into a full template via the Figma MCP. Named every text and paint style for a universal style guide, then ported it to project-jackpot-replica.html as a 1:1 HTML mirror.
This case study walks through how I built the portfolio you're reading right now, starting with two Jackpot case studies and scaling the same workflow into a full site. I began with a single wireframe in Figma. Eight stages and numerous iterations later, Jackpot 0-to-1 and Jackpot · Growth were both running on the same design system, verified 1:1 against the Figma source. A V2 iteration pass then introduced a dozen reusable patterns across the site, and gave me a build process I can repeat for every future project.
Designed and built a portfolio site of two case studies (Jackpot 0-to-1 and Jackpot · Growth) with Claude and the Figma MCP server. Started in Figma, drafted in React, killed the framework when it stopped earning its keep, rebuilt in vanilla HTML/CSS/JS, layered fourteen interactions, audited every section against the Figma source, then split the two case studies along a funnel arc when the audit caught one pre-spoiling the other.
The AI didn't replace the design decisions, it compressed the time between deciding and seeing, and shortened the overall build cycle.
Each stage produced an artifact that fed the next: Figma → 1:1 mirror → React draft → vanilla rewrite → interactive layer → 1:1 audit → cross-case refactor. The full version of this story lives in the long-form build guide.
First wireframe extended into a full template via the Figma MCP. Named every text and paint style for a universal style guide, then ported it to project-jackpot-replica.html as a 1:1 HTML mirror.
~7,000 lines · React + Framer Motion + Tailwind CDN, all in a single HTML file. Feature-rich, but editing one piece of copy meant scrolling through ~6,000 lines of component code to find it.
// CDN libs, in-browser Babel — heavy. <script src="react@18..."></script> <script src="framer-motion@10..."></script> <script src="cdn.tailwindcss.com"></script> // Five React roots, one per section. <div id="loyalty-ecosystem-root"></div> <div id="golden-path-root"></div> // ~300 lines of state per component. function LoyaltyStrategicMap() { const [platform, setPlatform] = useState('native'); // ...AnimatePresence, scroll handlers... }
Stripped the framework. Rewrote everything as plain HTML/CSS ~1,100 lines vs. 7,000+. The point: get the foundation honest before adding interactivity back.
:root { --text: #151515; --paleblue: #EDF5FE; --blue-vivid: #3b82f6; --green-vivid: #58CE70; --purple-vivid:#7856FE; --font: 'Helvetica Neue', ...; } /* Hybrid card — same look as the OG React, now plain CSS. */ .phase--hybrid { background: var(--paleblue); border-radius: 28px; }
Fourteen interactions layered on top, each a self-contained IIFE — scroll-reveal, hotspot carousel, hover-driven iPhone push, lightbox, count-up, custom cursor. ~700 lines of vanilla JS.
Re-pulled the Figma file via MCP, extracted a full text inventory of all 26 sections, and audited the HTML line by line. Locked the typography. Rebuilt Building for Scale with real component PNGs.
Two case studies online, and an audit caught the 0-to-1 case pre-spoiling Growth's headline metric. Migrated ~1,500 lines along a funnel arc using a sub-agent. Result: two case studies that read cleanly back-to-back.
Iteration pass on the Growth file after the split settled. Grouped the four pillars into The Funnel and The Ecosystem. Added a per-view tab strip inside the lightbox so users can jump between rationales without closing it. Traded the 3-card methodology grid for a stat strip. Twelve new patterns shipped: phase-group wrapper, lightbox tab strip, three-layer scroll lock, vh-aware mockup clamp, screen-pill pulse sync, each one earned by a friction a reader would hit on read-through.
Template, style guide, and interaction library all locked in from Stages 01–04. The next case study starts at the audit, not the wireframe. Documentation time drops, build time stays, which means more energy for the work that actually moves the portfolio forward.
Catches narrative spoilers across case studies before they ship. Triggers on every read-through.
Skip the wireframe stage when the template, style guide, and interaction library already exist. Cuts setup cost by half.
"After eight builds, the loop became the muscle. Documentation time drops, build time stays, energy compounds."
Two case studies, one audit, one spoiler. The funnel-split refactor is the moment the project stopped being two pages and started being a series.
Both case studies felt complete on their own. Read back-to-back, they broke the second one's payoff, a hotspot tooltip in 0-to-1 already explained the +40% APV insight that was supposed to be Growth's headline.
Series-thinking caught what page-thinking missed.
// One brief, one sub-agent, ~1500 lines moved in one pass. Source · Jackpot-0to1.html Target · Jackpot-Growth.html // HTML to migrate Lines 2697–2706 · "Outcome — The Ecosystem" Lines 2708–2862 · RAF Flow Map + iPhone hover Lines 2863–2933 · Loyalty 4-phase migration Lines 2934–3101 · Strategic Map + 9 beats Restructure target - 4-pillar grid (Alpha · Beta · Gamma · Delta) - Ecosystem transition between Beta and Gamma - New Project Delta · RAF ecosystem // Verification - Tag balance · class presence · JS hooks resolve - 6-pattern orphan check after strip
The whole engineering memoir lives in the long-form guide. These four are doing the most work in my head right now, the fourth landed during Stage 07's V2 iteration, after I thought the project was finished.
The original case study took 5× longer per change than the static port. The interactive layer landed cleanly because the foundation never moved. Use a framework when it earns its keep, kill it when it stops.
Stage 06 surfaced a spoiler the eye missed: 0-to-1's hotspot tooltip pre-explained Growth's headline metric. The audit caught it; the migration fixed it. Series-thinking matters as much as page-thinking.
"V1+V2 hybrid," "pill label," "beat × platform," "Body/Big 18px," "Label/Card H1." Once a pattern has a name, AI uses it consistently, and you can iterate on it by name. The vocabulary is the leverage.
Stage 06 felt like the end, two case studies, coherent series, no spoilers. Stage 07 said no. Every iteration that audited the work for friction surfaced a new pattern worth inventing: the phase-group wrapper, the lightbox tab strip, the three-layer scroll lock. None of those would have shipped if I'd called the project done. Design isn't a destination, it's a practice.
A small stack, on purpose. The AI co-pilot and the design-to-code bridge are the load-bearing pieces.
claude
Every stage as a deep-dive project card, every interaction explained, code panels, methodology, the 12-lesson reflection list. ~15 minute read.