Prefer this done for you, design review included? That is Email Love Enterprise onboarding. Email hello@emaillove.com.
The two phases
The audit report is required input to the converter. It carries the list of modules and what happens to each one, the brand foundations, how much of your file’s geometry is a specification worth preserving, the scale your file is drawn at where that applies, and the flags, so the conversion does not re-decide anything that was already settled. If you run the converter without an audit, it will ask you to do the audit first.
Your source file is read-only, throughout
Both phases treat your existing file as a source to read, never a place to work. The audit only inspects. The conversion screenshots, downloads assets, and builds everything in a separate target file, either one your team designates or a new one named for the customer. Nothing in your current library gets renamed, restructured, or deleted. If a migration goes sideways, your originals are exactly where they were.Phase 1: the audit
The audit walks your file and produces one markdown report you can share internally. It surveys the file. Pages and what each holds, your local text styles (the type ramp with families, weights, and sizes), local paint styles and their naming, variable collections, spacing components, and a census of every candidate design with its width and height. Desktop and mobile twins of the same design get merged into one count, because in Email Love they become one frame with Mobile Styles overrides rather than two frames. It works out what your library actually reduces to. A finished email is not the unit that gets converted. The reusable blocks inside it are, and Email Love calls those modules: a hero, a copy block, a product row, a footer, the same handful turning up again in a different order each time. So the audit splits each design into modules, merges the repeats into one entry, names each one the way it should be named in your library, and reports that list. What the module is, which of your designs it appears in, and what happens to it in email. On a library where the pieces recur, that list is much shorter than the pile of designs you started with. In one migration we ran, six finished emails came out as nine distinct modules, so the work was building nine things once rather than rebuilding six emails. You still get a per-design view, for the times you want to ask what happens to one specific email, but it reads off the module list rather than competing with it. It says what happens to each module, in one of four verdicts:- (A) Live-text convertible. Auto-layout stacks of text, images, and buttons that map cleanly onto email structure. Text stays selectable in the sent email, which is best for deliverability and accessibility. Most modules should land here.
- (B) Editable-image candidate. Design-rich compositions where text and imagery genuinely interleave. Email Love handles these deliberately: the design frame sits in a column with no MJML type name, and the exporter flattens it to a single hosted image at export while it stays fully editable in Figma. No rebuild needed. The cost is that the text inside is not live in the inbox, so it wants alt text and critical copy kept outside the image.
- (C) Hybrid. Split the module: headline and body as live text, the rich visual region as an editable image. Reserved for blocks where copy and picture are one composited whole with no boundary to cut on, such as type set over a photographic collage where the lettering is part of the artwork. A photo that simply overlaps or bleeds past its block is not this, and is verdict A with a concession instead (see below). The test: if you can name the rectangle the image belongs in and the rectangle the text belongs in, it is an A. If you cannot, it is a C.
- (D) Not emailable. Hover states, carousels, viewport-relative layouts, app UI. The report lists what would replace them.
- Your geometry is the spec. The file is already drawn at email widths, with real text styles, components, and margins that repeat because somebody chose them. We preserve your widths, margins, type sizes, and spacing, and any deviation gets a reason written next to it.
- Some of it is deliberate and some is not. The normal shape of a real library. We keep what the file proves (the same measurement in at least three places, identical rather than similar) and standardise the rest, flagging each call so you can see which numbers came from your file and which came from us.
- The file is a reference, not a spec. No particular width, no styles, margins that were eyeballed one at a time. Then we take your brand, your copy, and your module structure, and build the geometry to email standards: 600 wide, body copy at 16, spacing in multiples of 8, one content width for every module. Your emails still look like your brand. They just get margins somebody chose.
Phase 2 and 3: the conversion
Conversion runs in two phases, foundations once and then modules in batches. Foundations builds the scaffold every batch depends on: your type ramp recreated as text styles on the email-safe fallbacks, your buttons rebuilt as proper email components rather than app-style nested instances, your spacing scale, your logo and recurring imagery round-tripped into the target file, and one root email frame so batch 1 has somewhere to be seen in context. It also lays the file out the same way every time. The page structure is fixed rather than invented per project, because the real test of a design system file is whether someone who did not build it can open it and get to work. What you get:- A cover with the brand name, the version, and the width the system is built at, so nobody has to ask which email width these modules assume.
- A getting started page: how to use a module, how to change its copy and images, and where to look when an export does not come out the way you expected.
- Foundations as a real token sheet. Your colours and spacing become Figma variables, with plain named values underneath and the semantic names your components actually point at on top, so changing a brand colour is one edit instead of forty.
- A type page as a specimen sheet. Every style shown as a line of real text with its family, weight, and size printed beside it, so you can check the whole ramp by eye.
- One page per module category, heroes, footers, product rows, taken from the audit’s module list in the order the audit put them in, with divider pages grouping the foundations, the components, and the templates.
How long this takes
There are really two questions here, and they have very different answers. How long until you see something is minutes. How long for your whole library is a project measured in sessions. The audit is quick. It reads and creates nothing, so it finishes in minutes, scaling with the size of your library rather than its complexity. A hundred designs takes longer to walk than twenty, but it is still something you kick off and wait on rather than something you schedule around. That is the other reason to always start here. It costs almost nothing to find out what you are in for. Foundations is a single pass, in the same range as one batch of modules. It happens once, and everything after it is faster for having it. A first batch of about five modules takes tens of minutes. That is the number worth planning around, because it is the first time you see your own designs rebuilt as real email structure and can judge whether the result is right. On an unstructured source file, expect noticeably longer. A full library of a hundred modules or more takes multiple sessions. Not an afternoon. This is exactly why the work is batched with a design review in between: spreading it out is the design, not a limitation. In practice your team’s review time between batches, not the conversion itself, is what sets the calendar. Treat all of this as what we have seen rather than a promise. Your file, your library size, and how much judgment each module needs all move the number.What actually drives the time
Not the AI. The conversion engine that turns a design into email structure takes seconds to about half a minute per design, and it is never the bottleneck. Almost all of the time is round trips to Figma. Every node the agent creates or reads is a separate call, and a module is made of nodes. So the node count predicts the time better than how complicated a module looks: a forty-node module takes many times longer than a six-node one, even when the two look about equally busy on the canvas. The other big factor is the shape of your source. A file that is already email-native, frames at 600 or 640 with auto layout in place, converts far faster than an unstructured one built from groups, absolute positioning, or a scaled-up mockup. On a real unstructured file we saw roughly three times the time per module, because before the agent can rebuild anything it has to work out where each module begins and ends. The audit tells you which kind of file you have, which is one more reason to run it first.What a module actually is
Worth knowing before you review a batch, because it is the thing that most often needs fixing. A module is one reusable block, so its shape is anmj-wrapper component: the wrapper itself is the component, its layer name is the module name, and it carries no email-template marker anywhere in its tree. An email template is the other shape, a root frame with wrapper components stacked inside it. Foundations builds exactly one of those, for context, and it is not a starting point for a module.
The distinction is not stylistic. The plugin decides which one you uploaded by looking at the top node of your selection, and only a wrapper gets stored as a reusable block with the machine-readable component data behind it. A module built as a small email uploads without complaining and then behaves like an email, which is the kind of thing nobody notices until months later.
Modules also carry no theme color keys. Those live on the email that contains them.
When a batch is approved, the components go into the plugin the same way any component does: pick the design system, open the section, select the wrapper components on the canvas, and click Upload. A multi-selection of wrappers uploads as one batch, which is how you get a whole approved batch in without clicking through it one at a time. See Creating and Managing Design Systems.
Running it yourself
Choose your agent below. Claude installs separate audit and converter skills. Codex installs one Email Love plugin that contains the complete migration workflow.- Claude Code (recommended)
- Claude.ai
- OpenAI Codex
claude session, the same commands work as /plugin slash commands.What to expect
- Start with the audit, always. It is read-only and it answers the question everyone actually has, which is what this costs.
- Your library is probably smaller than it looks. The report sizes the job by distinct modules rather than by finished designs, and where the same pieces recur that number lands well below the count of designs you walked in with.
- The audit is shareable. It is written for both your team and ours, so it works as the scoping document for an Enterprise onboarding conversation.
- Numbers in the report come from real reads. Where the audit sampled instead of walking everything, it says so.
- Verdicts can change on contact. A module classified A that turns out to be layered art becomes C during conversion, with the reason recorded in the batch report.
- Two things want a yes before conversion starts. The scale the system gets built at, and each named concession. Both change every module built from them, so agreeing on them up front is cheaper than redoing a batch.
- A messy file is not a blocker. The audit decides whether your geometry is a specification we carry across or a reference we rebuild from at email standards, and it says which, so you can overrule it if you disagree.
- Don’t skip the design review between batches. It exists because batch 1 always surfaces something.
- Plan a migration as a project, not an afternoon. The audit is minutes and a first batch is tens of minutes, but a full library runs across several sessions with review in between.
- Saving modules into a design system needs a paid plan. The audit and the conversion both work on any plan, but the Upload control in the plugin’s Assets panel only appears for subscribers, so that final step is where a free account stops.
Related Articles
- Build with the Figma MCP: Once your design system exists, agents build emails from it.
- Creating and Managing Design Systems: Where converted modules land, and how to upload them.
- Import Existing Designs with AI Import: The same conversion engine, run by hand in the plugin, one design at a time.
- Element Reference: Section, Column & Wrapper: The structure a conversion produces.

