Roku Marketing Email Design System

Scaling campaign production through a modular design framework

 

Timeline

Development: ~1.5 years
Production Use: 2023–Present

Impact

Used by 20+ team members to reduce active production time from days to hours while enabling a 2.5x increase in campaign volume.

Tools

Figma & Braze

Role

Senior Creative Developer


SummarY

When I joined Roku, marketing emails were produced through an informal, manual workflow. Designers built campaign layouts in Adobe XD, exported static JPG mockups, and handed them off to the operations team, who then reproduced each layout inside Braze. Because the two teams worked from different tools with no shared structure, layouts were interpreted rather than replicated, introducing rendering errors and brand inconsistencies that compounded over time. The process was inherently slow, with campaigns taking two weeks or more from concept to deployment.

To eliminate the disconnect between design and production, I built a modular email design system where every Figma module had a 1:1 equivalent in Braze, removing interpretation entirely. The result was a system where design decisions made in Figma could be executed consistently in Braze, eliminating interpretation and enabling the team to more than double campaign output without increasing the burden on either team.

I led the system end-to-end: auditing historical campaigns, defining the module architecture, and building the Figma library. I partnered with a marketing operations specialist on the Braze content block library, providing a structured module specification and reviewing all outputs against the Figma components.


Challenge

Without a standardized design-to-production process, the workflow had several persistent inefficiencies:

  • Inconsistent Design: Design decisions varied by designer, leading to inconsistent typography, spacing, and overall brand expression across campaigns.

  • Error-Prone Handoff: Reproducing static JPG mockups by eye led to spacing, typography, and positioning deviations, and building desktop and mobile layouts separately introduced additional rendering risks.

  • Production Bottlenecks: Active build time ranged from several hours to a full day per campaign. Late-stage stakeholder edits could restart the build process entirely, compressing an already tight production window.

  • Limited Scale: The manual, time-intensive workflow made it impossible to meaningfully increase campaign output without adding headcount.


Goal

The primary objective was to replace a fragmented, manual workflow with a shared production framework that could scale without sacrificing design quality. This required solving for three constraints: speed, accessibility, and compatibility.

  • Production speed: The existing production cycle left little room for iteration, increased output, or last-minute changes. Reducing active build time was the most direct lever for increasing campaign capacity without adding headcount.

  • Creative accessibility: The majority of the design team were not email specialists, so the system needed to handle technical complexities like grid sizes and mobile responsiveness, allowing designers to focus on visual storytelling without worrying about technical production constraints.

  • Skillset compatibility: While the operations team had some HTML knowledge, requiring it for day-to-day production would have created a dependency on a small subset of the team and limited throughput. The framework needed to work entirely within Braze's drag-and-drop editor, with no manual coding required during campaign assembly.


Solution: A Dual-Library Framework

Looking at historical campaigns revealed a clear opportunity: most emails shared similar layouts but lacked a standardized system to reuse them consistently. I formalized these patterns into a modular framework, giving both designers and operations matching libraries to work from — one in Figma, and one in Braze — under a single principle: eliminate ambiguity between design and production.

The system was built around ~24 core module layouts, each with variants for different content needs. All variants shared predefined typography, spacing, calls-to-action, and image sizing rules. These modules covered the majority of campaign structures, allowing designers to assemble emails instead of designing from scratch.

For campaigns that fell outside the primary library, designers could compose layouts using structural modules like headings, text blocks, and spacing components, all part of the same 1:1 system between Figma and Braze.

 

To bridge the two libraries, I developed a module ID system that served as a shared reference across both platforms. In Figma, layouts were organized into a library of folders based on their contents, giving designers a visual way to browse and select modules. In Braze, operations could search a module ID to insert the corresponding content block instantly. Because module IDs also served as Figma layer names, every campaign’s Figma layer list effectively became a step-by-step assembly guide for operations.

The result was a system where design decisions made in Figma were directly and quickly executable in Braze.