~/ligma.digital
▸Home▸Services▸Portfolio▸About▸Contact▸Tools▸Billing
Start a project▸
~/.colophon

Ligma Digital LLC

Software, automation, and hosting. Tempe, Arizona.

ryan@ligma.digital
LinkedInFacebook
Resources
  • ▸Journal
  • ▸Tools
  • ▸Site index
  • ▸Contact
Legal
  • ▸Terms
  • ▸Privacy
  • ▸Documents
© 2026 ligma digital llc·tempe, az·build 0000000made by hand▚
~/blog/figma-to-reality
◂Back to journal

Figma to Production: How I Turn Designs into Working Software

April 28, 2025·Ryan·Development · Figma · Process
Figma to Production: How I Turn Designs into Working Software

Most projects lose 30 percent of their timeline and a chunk of their design fidelity at the handoff. Somebody designs a beautiful Figma file. Somebody else translates it into code. The translation is lossy, the communication is patchy, and two weeks in, the developer has rebuilt a component three times and the designer is angry about spacing.

I don't have that problem because I'm the designer and the developer. The handoff is a thirty-second walk from one window to another. But the process matters even solo, because without a process, the design drifts and the code grows weeds.

Here's what I do.

Design and build the system first, pages second

Before I write any real code, I build the design system inside the Figma file:

  • Typography scale with real line heights
  • Color palette with actual contrast ratios checked
  • Spacing scale (I use a 4-point grid)
  • Component set with every state and variant defined (hover, focus, disabled, loading, error)
  • Motion primitives (easing curves, durations)

Then I translate that system into a matching set of CSS variables and Tailwind config. Every Figma token has a code token. Nothing gets hand-coded twice.

This is the step most projects skip and the one that saves the most time later.

Component-based, not page-based

I don't build pages. I build components in isolation and then assemble them into pages.

A button exists once. It has five variants and four states. When the design changes, I update the component, and every page that uses it updates automatically. When a state is missing (what happens to this button while the form is submitting?), I notice it at the component level, not two weeks later in QA.

Storybook or an equivalent helps here, but for small projects I usually just build a /design-system route in the app itself and render every component on it.

The stack

For most projects:

  • Next.js for the app framework
  • Tailwind CSS with a custom config matching the design system
  • TypeScript everywhere
  • Vercel for hosting
  • Postgres + Drizzle or Prisma if there's a database

It's boring. That's the point. Boring stacks ship.

Pixel parity, within reason

I check the live implementation against the Figma at the end of every feature. Side-by-side browser window, Figma open on the other monitor. Spacing, type, color, and interaction all match.

I don't chase sub-pixel perfection. I do chase consistency. If the button padding is 14 in the design and 16 in the code, that's a real inconsistency. If it's 14 versus 13.5 at a fractional devicePixelRatio, I move on.

Accessibility in the loop, not at the end

Every component gets:

  • Semantic HTML (real headings, real buttons, real labels)
  • Keyboard navigation (tab order, focus rings, escape-to-close)
  • Screen reader labels where visuals alone don't communicate
  • Color contrast meeting WCAG AA minimum

Retrofitting accessibility after shipping is miserable and expensive. Building it in costs nothing extra.

Performance, also in the loop

  • Images go through Next's image pipeline with proper sizing
  • Fonts are self-hosted and subsetted
  • No render-blocking scripts unless genuinely required
  • Lighthouse scores audited before launch

A client's site should load in under two seconds on a cold 4G connection. If it doesn't, something's wrong.

What "done" means

Before I ship, a project has to clear:

  • Design matches across all breakpoints (mobile, tablet, desktop)
  • Works in Chrome, Safari, Firefox, Edge
  • Lighthouse performance and accessibility both 90+
  • All forms submit, all links go where they're supposed to, all states exist
  • Error and empty states designed and implemented, not left as todos
  • Readable code committed with sensible commit messages
  • Deployment pipeline set up and verified

That's the bar. Short of it, it's not done.

The honest caveat

This process works because I'm one person making every decision. On a team, the same process needs heavier tooling (Storybook, Chromatic, design tokens sync, proper handoff documentation). The principle is the same: build the system first, assemble pages from it, check everything against the design at every step.

If you want a site or app built this way, tell me what you need.

—Ryan·April 28, 2025
§· Related

More from the journal.

May 8, 2025

The Small-Business Automation Cases That Actually Pay Off

Not every process needs automation. The ones that do tend to share three traits. Here's how to find yours and what to build first.

Read▸
May 15, 2025

Web Design Trends for 2025 That Actually Matter

Most design-trend lists are vibes-based. Here are the ones backed by real conversion data, and the ones to skip.

Read▸

Working on something like this? Tell me what you need — I'll write back within a day.

Start a project▸