# figma → wordpress
Figma to WordPress, block patterns and FSE.
Send a Figma. Ship as a custom Full Site Editing theme or a set of Gutenberg block patterns dropped into your existing theme. Custom post types, ACF where needed, Rank Math or Yoast SEO stubs, WCAG 2.2 AA baseline.
What you get.
- Custom FSE theme (WP 6.5+) with
theme.jsontokens matching your Figma variables, or a set of block patterns dropped into an existing theme. - Reusable Gutenberg blocks per Figma component. Rich text where content changes, static where it doesn't.
- Custom post types + taxonomies scaffolded (portfolio, case studies, services).
- ACF or CMB2 for structured field groups. Left out if the design doesn't need them.
- Builder.io Visual Copilot on the first pass where the Figma is auto-layout clean. Rewritten to native block syntax before ship.
- Deploys via Pressable, WP Engine, or your own host. Handover is a git repo + wp-content export.
components/Button.tsx
import { forwardRef, type ButtonHTMLAttributes } from 'react';
type Variant = 'primary' | 'secondary';
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
label: string;
variant?: Variant;
}
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ label, variant = 'primary', ...rest }, ref) => {
const base = 'inline-flex items-center rounded-md px-5 py-3 font-medium';
const skin = variant === 'primary'
? 'bg-wire text-ink hover:bg-wire/80'
: 'border border-steel text-chalk hover:border-wire hover:text-wire';
return (
<button ref={ref} className={`${base} ${skin}`} {...rest}>
{label}
</button>
);
}
);
Button.displayName = 'Button';
Tool used: hand-coded from Figma dev-mode. TypeScript strict, forwardRef, no external deps.
Turnaround and price.
- Single WordPress page (block pattern set): from $349, 5d.
- Custom FSE theme, 5 pages: from $2,490, 14d.
- Custom FSE theme, 10 pages + WooCommerce: from $4,990, 21d.
# get a quote
Send a Figma. We'll quote in 24 hours.
Paste a share link. Add a line about the output stack (React, HTML, WordPress). We'll reply with an indicative price and a start date.