Built because: “reusable email templates and content components” and “establishing quality standards”
Taxi for Email is a template builder. I write one master template that declares the modules and their fields. Marketers build each send by dropping modules into zones and filling the fields, then export to Braze. They never touch the HTML.
At Dentsu I helped expand, build and maintain the SkyShowtime master template in Taxi for Email from early 2025 to mid 2026. The Braze layer sits inside the template: content blocks, catalogs, custom attributes and the Liquid abort checks that stop a send when a rail comes back blank. The result was a system non-technical marketers could assemble on-brand and could not break.
One Taxi for Email master template. Every send is built by dropping modules into three zones, filling their fields and exporting to Braze. Thirteen modules read a content-source dropdown; the API-driven sources inject a rail engine block and abort the send when a rail comes back blank. Plan details and social links come from Braze catalogs keyed by country.
Counted from the source, 2026-09-20. Field types: number 389 · color 300 · href 299 · checkbox 296 · rich 258 · dropdown 213 · text 201 · src 197 · align 71 · code 54 · hidden 9. Zones: Header, content, footer. Translation tags: 258. Page background #000000, email background #1D123C: the formatting module’s two colour fields.
One module, HeroTitleCTA, shows how the whole template thinks. A marketer picks where the content comes from. The module then keeps only the markup for that choice, pulls the titles and images in at send time, and refuses to send if something essential is missing.
The stage above is its CUSTOM_CONTENT branch, the one where the marketer types everything in. The other six branches use the same table markup and fetch their content from Braze.
- The marketer’s controlsEvery colour, padding, size and alignment is a Taxi field. On export each one becomes an attribute on the HTML, so nobody edits code.
- Show or hideCheckboxes such as
SubCHK(subheader) andshowStreamNowremove a whole row when unticked. - Where the content comes fromOne dropdown,
contentSource, with seven options: from a live content rail to fully custom copy. A rail is a named list of titles curated in Atom, SkyShowtime’s content platform, the same list that fills a row on the app’s home screen; the email stores only the rail’s name and Braze fetches the current titles at send time. - Only one branch survivesEach source has its own block of markup. A rule on the wrapper deletes every block except the chosen one.
- Picking the railA second dropdown lists the rails the email can use, or a code field takes a custom rail name.
- Pulling the content inThe rail name is handed to a Braze content block, which returns the titles and images when the email is sent.
- Refuse to send when it’s wrongIf the first image is blank, or a single-title send gets more than one title, the send is aborted with a message instead of going out broken.
- Different people, different buttonsThe My list button only renders for people outside the win-back segment.
- Two button styles from one fieldThe
borderChkcheckbox switches the second button between a filled button and a one-pixel outline.
Real source, lines 8680 to 10012 of the master template, the whole module. Rail names replaced with RAIL_A, RAIL_B; URLs, imagery and prices removed.
All 53 modules in source order. Sources is the number of options in the module’s content-source dropdown; uses lists the Braze constructs found inside the module.
| # | Module | Label | Fields | Sources | Uses | What it does |
|---|---|---|---|---|---|---|
| 1 | formatting | Design formatting | 2 | – | – | Page and email background colours for the whole template. |
| 2 | prHdr | Preheader | 11 | – | translation | Hidden preheader line, translation-tagged, with colour and padding controls. |
| 3 | hdrLogo | Header logo | 11 | – | content_blocks | Header logo image and link; pulls the winback My list CTA logic block. |
| 4 | 2ColCTASeeMore | 2 Column with CTAs + See More | 49 | 6 | content_blocks, translation, abort_message, cta_cohort | Two columns of image, title, synopsis, See more and two CTAs. |
| 5 | SingleColHero | Single Column Hero with CTAs | 21 | 6 | content_blocks, translation, abort_message, cta_cohort | Full-width hero image with Stream now and My list CTAs. |
| 6 | 2ColumnsImageCopyCTA | 2 Columns Image Copy CTA | 26 | 6 | content_blocks, translation, abort_message, cta_cohort | Two image columns with copy and CTAs from a rail or custom input. |
| 7 | 4ColumnsImageCopyCTA | 4 Columns Image Copy CTA | 46 | 6 | content_blocks, translation, abort_message, cta_cohort | Four titles in a two-by-two grid with copy and CTAs. |
| 8 | 6ColumnsImageCopyCTA | 6 Columns Image Copy CTA | 66 | 6 | content_blocks, translation, abort_message, cta_cohort | Six titles in a three-by-two grid with copy and CTAs. |
| 9 | 3ColumnsImageCopyCTA | 3 Columns Image Copy CTA | 56 | 6 | content_blocks, translation, abort_message, cta_cohort | Three titles in a row with synopsis, See more and CTAs. |
| 10 | SingleColHeroSynopsis | Single Column Hero Synopsis | 24 | 6 | content_blocks, translation, abort_message, cta_cohort | Hero image, synopsis copy and two CTAs for one title. |
| 11 | 5ImageGrid | 5 Image Grid | 35 | 6 | content_blocks, translation, abort_message | One hero image over a two-by-two grid: five titles, five images. |
| 12 | HeroTitleCTA | Hero + Title + CTA | 95 | 7 | content_blocks, translation, abort_message, cta_cohort | 16:9 hero, title block, subheader toggle, two CTAs; seven content sources. |
| 13 | 2ColumnArticleImage | 2 Columns Image with CTAs | 54 | 6 | content_blocks, translation, abort_message, cta_cohort | Two rows of 3:4 image beside title, synopsis, See more and CTAs. |
| 14 | Atom_1ColumnArticleImageLEFT_SingleTitleATOM | 1 Column Article / Image Left / CTA | 32 | 6 | content_blocks, translation, abort_message, cta_cohort | Image left, title, synopsis, See more and CTAs on the right. |
| 15 | Atom_1ColumnArticleImageRIGHT_SingleTitleATOM | 1 Column Article / Image Right / CTA | 32 | 6 | content_blocks, translation, abort_message, cta_cohort | Image right, title, synopsis, See more and CTAs on the left. |
| 16 | FeatureModule_ATOMSingleTitle_universal | Feature Module | 36 | 6 | content_blocks, translation, abort_message | Single-title feature: full-width image, keyline and synopsis; API or custom. |
| 17 | ModSP | Module Spacer | 2 | – | – | Vertical spacer with height and background colour. |
| 18 | keyline | Gradient Keyline | 6 | – | – | Gradient keyline image row with padding and background colour. |
| 19 | keylineCurved | Curved Gradient Keyline | 5 | – | – | Curved gradient keyline image row. |
| 20 | fwImgMod | Full-width Image | 13 | – | translation | Full-width image with link, alt and mobile alternate; translation-tagged. |
| 21 | headlineMod | Headline | 13 | – | translation | Standalone headline with colour, size, mobile size and optional link. |
| 22 | textCTAMod | Text Article and CTA | 48 | – | translation | Text article: headline, copy and CTA, with My list and translation toggles. |
| 23 | 2colimgL | 2 Column Article Image | 54 | – | translation | Two-column article, image beside copy, image alignment and padding fields. |
| 24 | 2colimgSqr | 2 Column Article Square Image | 42 | – | – | Two-column article with a square image beside title and info copy. |
| 25 | Mod06 | Module 06 – Image & CTA | 21 | – | – | Image with copy and an Add to calendar CTA per mail client. |
| 26 | Mod7E | 2 Columns Img / copy / CTA | 52 | – | – | Two columns of image, copy and CTA with alternate mobile images. |
| 27 | ModPlanPckr_v3 | Plan Picker Content Block | 0 | – | content_blocks | Injects the plan picker content block; no local fields. |
| 28 | featureMod | Feature Module | 54 | – | content_blocks, translation, abort_message | Headline, copy, full-width image, second copy and CTA; optional rail title. |
| 29 | imgCTA | Headline Image with Padding + CTA | 66 | – | content_blocks, translation, abort_message | Headline over a padded image with CTA; rail and recommendations toggles. |
| 30 | 2imgColCTA | Image Columns with CTAs | 154 | – | catalog_items, content_blocks, translation, abort_message | Two image columns with headline, copy and CTAs; rail, catalog and See more toggles. |
| 31 | ModPlValST_R | Module Plan Value Standard | 76 | – | catalog_items | Standard plan value grid, rebrand catalog; four icons with captions per country. |
| 32 | ModPlValSTAds_R | Module Plan Value Standard with Ads | 70 | – | catalog_items | Standard with ads plan value grid, rebrand catalog per country. |
| 33 | ModPlValPrem_R | Module Plan Value Premium | 76 | – | catalog_items | Premium plan value grid, rebrand catalog per country. |
| 34 | ModPlValST | Module Plan Value Standard | 60 | – | catalog_items | Standard plan: headline, copy, four icon captions, terms; catalog per country. |
| 35 | ModPlValSTAds | Module Plan Value Standard with Ads | 54 | – | catalog_items | Standard with ads plan grid; catalog copy per country. |
| 36 | ModPlValPrem | Module Plan Value Premium | 60 | – | catalog_items | Premium plan grid; catalog copy per country. |
| 37 | TitleArtCent | Title & Articles Centered | 61 | – | – | Centred title over numbered article rows. |
| 38 | ChPls | Change Plans Module | 51 | – | – | Change plans: headline, numbered steps and a CTA. |
| 39 | titlArtCTA | Title & Articles & CTA | 89 | – | – | Title, numbered article rows with divider lines and a CTA. |
| 40 | ComThMon | Coming this month | 223 | – | – | Coming this month: up to eight dated rows, each with its own CTA type. |
| 41 | highlightMod | Highlighted Title & Copy | 17 | – | – | Highlighted title and copy on a coloured panel. |
| 42 | faqMod | FAQ | 76 | – | – | FAQ rows with question, answer, arrow icons and divider lines. |
| 43 | socialsBig | Socials - Image / Title / Copy + Icons Big | 61 | – | catalog_items | Image, title, copy and large social icons from a translations catalog. |
| 44 | socialsThin | Socials - Copy / Icons Thin | 65 | – | catalog_items | Copy and small social icons from a translations catalog. |
| 45 | quote | Quote | 26 | – | – | Quotation with header, attribution and location. |
| 46 | appMod | SST App Module | 45 | – | catalog_items | App promotion: headline, image, copy and store icons from the app catalog. |
| 47 | appstoresMod | SST App Store Icons | 14 | – | catalog_items | App store and Play store badges with links from the app catalog. |
| 48 | studiosMod | Studios Module | 12 | – | – | Headline over a row of studio logos. |
| 49 | C_HTML | C_HTML : CUSTOM HTML CODE | 1 | – | – | Raw custom HTML code field. |
| 50 | C_LIQUID | C_LIQUID: CUSTOM LIQUID SCRIPT | 1 | – | – | Raw custom Liquid script field; %20 fixed by hand after export. |
| 51 | CBlocks | C_BLOCK: Content Block Liquid Tags | 5 | – | – | Content block Liquid tag picker: rail name and block number. |
| 52 | footerCblock | Footer Content Blocks | 2 | – | content_blocks | Footer content block dropdown: marketing or service footer. |
| 53 | disclaimer | Disclaimer Text | 9 | – | – | Disclaimer text with colour, size, mobile size and padding. |
Module names and labels are the author’s own naming and are shown as written. Descriptions are derived from each module’s fields and markup.
Braze layer
Content blocks (12)
2ColumnArticleImage_AtomRails_titleHeader_Snippet2ImageColumnswithCTAs_SeeMore_ATOM_SnippetComingSoon_engine_multi_email_universalFORYOU_engine_multi_email_universalMarketing_Footer_RebrandModule_Translations_CC_v1PlanPicker_Rebrand_LogicRAILS_engine_multi_emailRAILS_engine_multi_email_universalService_Footer_RebrandSingleTitleATOM_Engine_multi_email_universalWinback_MyList_CTA_Logic
Catalogs (5)
Movie_Night_MasterPlanValue_Modules_CatalogPlan_Modules_ST_W_Ads_ST_PREM_V2SST_App_Module_Catalogsocial_translations
Custom attributes (3)
{{${email_address}}}19 uses{{${country}}}11 usescustom_attribute.${optOutId}6 uses
Liquid guards
abort_message· 31 checks across 16 modulestranslationtags · 258, one per translatable field, in 21 modulescta_cohort != 'winback_prospect'· 76 branches hiding the My list CTAcatalog_items· 11 lookups, keyed on the country attributecontent_blocks· 79 references to the 12 blocks