From Figma to Production in 4 Hours: Our Design-to-Code Workflow
How PMML converts pixel-perfect Figma designs into production React code in a single afternoon. Our exact workflow, tools, and component library strategy.
Most teams take 2-3 weeks to go from approved designs to deployed code. We do it in an afternoon. Here's our exact workflow.
The Problem: Design-Dev Handoff Is Broken
The traditional workflow:
- Designer creates Figma mockup (2 days)
- Developer "interprets" the design (3 days)
- Designer says "that's not what I designed" (1 day of back-and-forth)
- Developer fixes pixel issues (2 days)
- QA finds responsive breakpoint bugs (1 day)
- Total: 9 days of waste
Our workflow:
- Designer creates Figma mockup with our component library (2 days)
- Developer converts to code using design tokens (4 hours)
- Done. Ship it.
Step 1: Design Tokens — The Single Source of Truth
Everything in our Figma and codebase uses the same token system:
// tokens.ts — auto-generated from Figma
export const tokens = {
colors: {
accent: "oklch(0.55 0.15 45)",
background: "oklch(0.14 0.01 260)",
foreground: "oklch(0.95 0.01 260)",
muted: "oklch(0.25 0.02 260)",
card: "oklch(0.18 0.015 260)",
border: "oklch(0.28 0.02 260)",
},
spacing: {
xs: "0.25rem",
sm: "0.5rem",
md: "1rem",
lg: "1.5rem",
xl: "2rem",
"2xl": "3rem",
},
radius: {
sm: "0.375rem",
md: "0.5rem",
lg: "0.75rem",
xl: "1rem",
full: "9999px",
},
shadows: {
subtle: "0 1px 3px rgb(0 0 0 / 0.08)",
elevated: "0 4px 12px rgb(0 0 0 / 0.15)",
dramatic: "0 12px 40px rgb(0 0 0 / 0.25)",
},
} as const;
Step 2: Component Library Mapping
Every Figma component maps 1:1 to a React component:
// Figma: "Button/Primary/Large"
// React: <Button variant="primary" size="lg">
// Figma: "Card/Elevated"
// React: <Card variant="elevated">
// Figma: "Input/With Label"
// React: <Input label="Email" />
The naming convention is identical. When a developer sees a Figma component, they immediately know which React component to use.
Step 3: The Conversion Process
Here's what the actual 4-hour session looks like:
Hour 1: Layout Structure
// Start with the page shell — sections and grid
export default function PricingPage() {
return (
<main className="pb-24">
{/* Hero */}
<section className="mx-auto max-w-5xl px-6 pt-16">
<h1 className="font-display text-5xl tracking-tight md:text-7xl">
Simple pricing
</h1>
<p className="mt-4 text-lg text-muted-foreground">
No hidden fees. No surprises.
</p>
</section>
{/* Pricing Cards */}
<section className="mx-auto mt-16 max-w-5xl px-6">
<div className="grid gap-6 md:grid-cols-3">
{plans.map(plan => (
<PricingCard key={plan.name} {...plan} />
))}
</div>
</section>
{/* FAQ */}
<section className="mx-auto mt-24 max-w-3xl px-6">
<FAQ items={faqItems} />
</section>
</main>
);
}
Hour 2: Components
Build any net-new components the design requires. Most pages reuse 80% existing components.
Hour 3: Responsive + Interactions
/* Mobile-first responsive pattern */
.pricing-grid {
display: grid;
gap: 1.5rem;
grid-template-columns: 1fr;
}
@media (min-width: 768px) {
.pricing-grid {
grid-template-columns: repeat(3, 1fr);
}
}
Hour 4: Polish + Deploy
- Hover states, focus rings, transitions
- Image optimization (next/image)
- SEO metadata
- Deploy to preview URL → share with designer for sign-off
The Tools That Make It Possible
| Tool | Purpose | |------|---------| | Figma | Design source of truth | | Tailwind CSS | Utility-first styling matches Figma spacing | | shadcn/ui | Headless component primitives | | next/image | Automatic image optimization | | Vercel | Preview deployments on every push |
Why This Works
- Shared language — designer and developer use the same token names
- Component parity — every Figma component has a code equivalent
- No interpretation — the developer copies, not interprets
- Preview URLs — designer reviews real code, not screenshots
The Numbers
Since adopting this workflow:
- Design-to-code time: 9 days → 4 hours (95% reduction)
- Design revision rounds: 3-4 → 0-1
- Pixel-accuracy complaints: Eliminated
- Developer happiness: Significantly improved (no more "make it match the mockup" tickets)
Try It Yourself
- Create a shared token file (colors, spacing, radii, shadows)
- Name your Figma components to match your React components
- Use Tailwind's config to consume your tokens
- Deploy previews on every commit
The first project takes a day to set up. Every project after that saves weeks.
Want PMML to build your design system? Start a conversation — we'll have a component library shipping in under a week.