Back to journal
Design

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.

PMML Engineering · Studio 12 June 2026 8 min read 0 views
From Figma to Production in 4 Hours: Our Design-to-Code Workflow

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

Design team collaboration

The traditional workflow:

  1. Designer creates Figma mockup (2 days)
  2. Developer "interprets" the design (3 days)
  3. Designer says "that's not what I designed" (1 day of back-and-forth)
  4. Developer fixes pixel issues (2 days)
  5. QA finds responsive breakpoint bugs (1 day)
  6. Total: 9 days of waste

Our workflow:

  1. Designer creates Figma mockup with our component library (2 days)
  2. Developer converts to code using design tokens (4 hours)
  3. 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" />

Component library in code

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

  1. Shared language — designer and developer use the same token names
  2. Component parity — every Figma component has a code equivalent
  3. No interpretation — the developer copies, not interprets
  4. Preview URLs — designer reviews real code, not screenshots

Modern development workflow

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

  1. Create a shared token file (colors, spacing, radii, shadows)
  2. Name your Figma components to match your React components
  3. Use Tailwind's config to consume your tokens
  4. 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.

#figma#design#react#workflow#tailwind

Keep reading

You might also like