C-XX ID or is filed as a /v.label variant of one. The win condition: a marketer completes the full creative workflow — from blank brief to send-ready, brand-perfect, hyper-personalized campaign — without leaving Mailchimp for Canva.C-97 image manipulation popover · variant class of C-95)/v.label suffix · stay under parent C-ID)| Is | Isn't |
|---|---|
| A baseline-compliant design that ships 10 named Phase 1 features into the existing Freddie surface | A from-scratch redesign · baseline IA + state model + tokens are preserved |
| An annotated screen spec — ASCII wireframes for 7 features, full HTML+CSS mockups for the 3 load-bearing surfaces (Plan composer / Design editor / Brand Kit) | A pixel-perfect Figma file — mockups are baseline-faithful but expect refinement |
A component-traceable spec — every affordance points to a C-XX baseline ID or a registered /v.label variant |
A vague "AI surface" sketch — if a component doesn't map back to the baseline, it doesn't ship |
| A channel-honest matrix — explicit Email / SMS / WhatsApp coverage with N/A cells for physics constraints | Aspirational omnichannel marketing copy · "no images in SMS" is a hard constraint, not a roadmap item |
Cross-references: Baseline component inventory at Tab 18 Design Audit Lens 3 (96 components, C-01 to C-96) · Baseline task flows at Lens 2 · Strategy alignment at Strategy Memo Pillar 4 (AI) and Pillar 5 (Unified Canvas + Collab) · Revised Goals at Tab 11 · The 10 Phase 1 features sourced from deepakp1308.github.io/canva-campaign-analysis/ Phase 1 roadmap.
#017E89, yellow #FFE01B (brand cue only), text/bg neutrals, Graphik Web + Means Web fonts, radii lv0–lv6, elevation L0–L4. New affordances must compose from these.C-XX ID with rationale documented in this spec./v.label suffix (e.g. C-25/v.memory). The inventory stays at 96 baseline IDs. Only genuinely new shapes get new C-IDs (C-97+).#FFE01B appears only as the Home top-stripe (baseline C-02). It is never used for AI affordances, CTAs, alerts, or new feature surfaces. That stripe is the only sanctioned yellow in the entire surface.#017E89 is the color of every Generate, Create, Confirm, and Send CTA — matching the existing baseline. New AI-feature CTAs inherit this color, not yellow, not amber, not red.Reproduced verbatim from ai-email-generator-decomp/docs/03-design-tokens.md. Every wireframe mockup in this spec uses these tokens; new affordances inherit them.
| Token category | Names | Locked values |
|---|---|---|
| Surfaces | --color-bg-primary / -secondary / -tertiary / -user-bubble / -hover | #FFFFFF · #F8FAFB · #F0F4F6 · #F0F4F6 · #F0F4F6 |
| Text | --color-text-primary / -secondary / -tertiary / -on-dark | #21262A · #4C555B · #727E85 · #FFFFFF |
| Accent (AI) | --color-accent-blue / -hover / -light | #017E89 · #006771 · #E0EDFF |
| Brand cue | --color-action-special-use | #FFE01B (Mailchimp yellow · brand cue only per R5) |
| Destructive | --color-ui-negative | #DB334D |
| Borders | --color-border-default / -selection | #E2E9ED · #017E89 (focus ring) |
| Typography | --font-display-* (Means) · --font-heading-* + --font-text-* (Graphik) | Means Web 400 for AI H1s · Graphik Web 400/500 for everything else |
| Radii | lv0 / lv1 / lv2 / lv3 / lv4 / lv5 / lv6 | 0 · 2 · 4 · 8 · 12 · 38 (composer shell) · 9999px (pills) |
| Elevation | L0–L4 | none / 0 2px 2px / 0 2px 8px / 0 4px 16px / 0 6px 24px all on rgba(76,85,91,.2) |
| Motion | --duration-fade-* · --animation-curve | 150ms / 200ms · cubic-bezier(.35, 0, .25, 1) |
This spec uses two design systems simultaneously — intentionally, and visibly separated:
Inherited from mailchimp-editor.html. Amber #C28A00, cream chips #FFF6D9, Inter + Source Serif 4. Used for the spec page itself: sections, headings, KPI cells, chips, tables, callouts.
Scoped under .fdpx-mcds-frame. Teal #017E89, Mailchimp yellow #FFE01B, neutral #F8FAFB bg, Graphik fallback to Inter, Means fallback to Source Serif. Used inside wireframe boxes so a reader sees "yes this is Freddie, not a generic brief."
Why two systems? Because the spec is a document about the prototype, not the prototype itself. The page chrome must read as part of the brief (consistent with Tabs 1–18). The wireframes inside the page must read as Freddie (consistent with what's shipping). Mixing them would either make the spec look like a generic Word doc, or make the wireframes look like brief-tab content. Two scoped CSS contexts solve this.
Each per-feature card in Sections 4 + 5 uses these chips to communicate compliance with R2 + R3:
C-XX/v.label (inventory stays at 96)
C-97+ ID with rationale. Currently only C-97 exists.
Source manifest: Token table from ai-email-generator-decomp/docs/03-design-tokens.md. Component primitive families from ai-email-generator-decomp/docs/04-components.md. Variant policy decided via design-spec planning round (see plan file). Poster chrome CSS copied verbatim from mailchimp-editor.html root :root block.
| Phase 1 feature | Layer | Plan composer (Email/SMS/WA tabs) | Strategy panel (right pane) | Design editor (canvas + chat) | Brand Kit modal | Sidebar + Settings |
|---|---|---|---|---|---|---|
| 01 · AI Image Manipulation Suite | AI | C-61, C-70, C-44 + new C-97 | ||||
| 02 · Dream Lab (AI image gen) | AI | C-71/v.image-tab, C-19, C-58/v.aspect | ||||
| 03 · Conversational Design Editing | AI 2.0 | C-54, C-43/v.preview-diff, C-70/v.refine-chips | ||||
| 04 · Magic Layers | AI 2.0 | C-20, C-23/v.ingestion-progress | C-53/v.open-as-editable, C-72 | |||
| 05 · Brand Voice 2.0 + Brand Intelligence | AI / AI 2.0 | C-23/v.brand-update-broadcast | C-89/v.profile-picker, C-87 | |||
| 06 · Mailchimp Memory | AI 2.0 | C-25/v.memory | C-45 (recall chip) | C-9, C-11/v.memory-entry, C-82/v.memory-drawer | ||
| 07 · Live-Context Connectors | AI 2.0 | C-23/v.live-context-banner | C-43 prose response | C-91/v.connector-section, C-92/v.connector-toggle | ||
| 08 · AI Sticker / GIF / Animation | AI | C-71/v.stickers-tab, C-72, C-25/v.sticker-prompts | ||||
| 09 · Web Research Integration | AI 2.0 | C-46/v.research-depth, C-43 prose | ||||
| 10 · ChatGPT & Claude MCP Bridge | AI 2.0 | C-91/v.mcp-section, C-92, C-90/v.mcp-token-row |
C-46/v.* variants.C-97 image manipulation popover, for feature #1). Every other feature decomposes into existing primitives.Heatmap method: Each cell shows the primary C-XX reuse + any /v.label variants introduced. Bold + heavy-fill cells = primary surface. Light-fill cells = secondary touchpoint. Empty cells = feature does not touch that surface. Full per-feature decomposition in Sections 4 (Plan-step) + 5 (Design-step).
What it does. Persists named brand-voice profiles (Default, Holiday, Launch, ...) inside the Brand Kit so AI generations can be tuned per-campaign without losing the master brand. "Brand Intelligence" auto-extracts tone, voice, do's-and-don'ts from a URL into editable fields. A broadcast banner appears on the Email tab when Brand Kit changed since last visit, with a one-click "Update all old templates" CTA.
Save and switch between brand-voice profiles. AI generations will use the active profile by default.
Auto-detected from your URL last week: Tone warm + confident · Voice first-person plural · Avoid jargon, em-dashes · Sentence length 8–18 words avg
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| Profile picker (radio group) | C-89/v.profile-picker | Variant · radio-group molecule rendered inside C-89 brand voice composite |
| Brand Intelligence auto-detected card | C-89 (existing field) | Reuse · rendered as a new row inside the existing composite (no new shape) |
| "Re-scan website" link | C-83 URL importer | Reuse · same URL importer modal, re-entered from this surface |
| "12 drafts" broadcast banner on Email tab | C-23/v.brand-update-broadcast | Variant · brand-context banner with broadcast state (count + CTA) |
| "Update all 12" primary CTA | C-53 Create email CTA | Reuse · same teal pill button |
brandVersion field; banner shows when current Brand Kit > draft's version| SMS | ||
|---|---|---|
| Full | Full | Full |
All three channels generate copy via AI, so brand voice profiles + broadcast applies uniformly. SMS / WhatsApp use the same profile via the channel-specific composer.
What it does. AI learns the team's style and preferences across recurring campaigns and stores them as durable "memories." A new sidebar entry "Things I remember" opens a memory drawer (reusing the Brand Kit modal's left-nav pattern). Memory recall surfaces as a chip in the composer ("π§ Use last week's launch tone") and as a chip inside the strategy panel header ("Drawing on 12 memories").
Turn ideas into ready-to-send campaigns.
ββββ Sidebar (expanded, 240px) ββββ [C-9] βββββ
β π΅ Freddie Β· home [Γ] β
β β
β [+ New] β
β β
β TODAY β
β Welcome email for SS '26 β
β Flash sale draft v3 β
β β
β YESTERDAY β
β Welcome-series experiment β
β β
β THINGS I REMEMBER [12 facts] β [NEW] βββ C-11/v.memory-entry
β β
β β Prototype settings β
β π¨ Brand & business context β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β clicking opens memory drawer
ββββ Things I remember (modal) [C-82/v.memory-drawer] βββββ
β Brand voice β Recently saved memories β
β Audience β β
β Style βactive β Β· Hero CTAs work best in active voice β
β Cadence β Β· Tuesday 10am AEST highest engagementβ
β Performance β Β· Customers respond to social proof β
β Inventory β Β· "Spring Refresh" is the launch tag β
β β β
β + Add a memory β [Edit] [Forget this] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| Memory recall chip in composer | C-25/v.memory | Variant · quick-prompt chip with π§ glyph instead of β³; same shape, same hover, same lv6 radius |
| "Things I remember" sidebar entry | C-11/v.memory-entry | Variant · conversation-list item with count badge + "NEW" tag |
| Memory drawer (modal) | C-82/v.memory-drawer | Variant · Brand Kit modal left-nav reused with 6 memory categories |
| "Drawing on N memories" chip in strategy panel header | C-45 header + C-25/v.memory | Reuse · status chip rendered inside existing header bar |
| "+ Add a memory" affordance | C-10 + New button | Reuse · same primary CTA pattern from sidebar |
| SMS | ||
|---|---|---|
| Full | Full | Full |
Memory is channel-agnostic by design. Some memories may be channel-tagged ("Tuesday 10am works best for SMS"), but the recall chip surfaces apply universally.
What it does. Enable Slack, Drive, Notion, Zoom, Calendar connectors in Prototype settings; once enabled, AI pulls live context (latest launch brief in Notion, this week's marketing standup notes in Slack) directly into the campaign prompt. The composer's existing brand banner extends to show which sources are feeding the AI right now with a "Manage sources" link.
ββββ Prototype settings popover [C-91] ββββββββββββββββββββββββββ β EXPERIENCES β β SMS AI [ββ] on β β WhatsApp AI [ββ] on β β Campaign AI [ββ] on β β β β LIVE-CONTEXT CONNECTORS [NEW] βββ C-91/v.connector-section β β β£ Slack last sync 2m ago [ββ] on [C-92/v.connector-toggle] β β£ Google Drive last sync 11m ago [ββ] on β β β£ Notion last sync 3m ago [ββ] on β β β£ Zoom not connected [ββ] off [Connect] β β β£ Calendar not connected [ββ] off [Connect] β β β β DISPLAY β β Dark mode [ββ] off β β β β EXPOSE MAILCHIMP AS MCP SERVER [NEW] βββ C-91/v.mcp-section β β (see feature 10) β β β β βββββββββββββββββββββββββββββ β β [Reset brand kit] β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[connector OFF] ββ click Connect βββ [browser OAuth] βββ [granted]
β
β
[granted] ββ auto-sync starts βββ [syncing] βββ [sync complete Β· last sync = now]
β
β (next composer visit)
C-23/v.live-context-banner
"Pulling from Slack #marketing-launches"
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| "Live-Context Connectors" section in settings | C-91/v.connector-section | Variant · new labeled section inside settings popover; same internal layout as Experiences section |
| Per-connector toggle row | C-92/v.connector-toggle | Variant · experience-toggle molecule with service-logo (vendor SVG) + last-sync timestamp |
| "Connect" button for OAuth-required connector | C-66 Send a test email button pattern | Reuse · same secondary button style |
| Live-context banner on composer ("Pulling from Slack ...") | C-23/v.live-context-banner | Variant · brand-context banner extended to list source list + "Manage sources" link |
| Sync-in-progress indicator | C-42 Building spinner | Reuse · snowflake spinner from chat thread, recolored to grey for non-AI use? No — keep teal per R6 to mark AI-related sync |
| SMS | ||
|---|---|---|
| Full | Full | Full |
Connectors are workspace-level, channel-agnostic. The live-context banner renders identically on Email / SMS / WhatsApp composer surfaces.
What it does. Before generating an email, AI searches the web and brings back structured competitive / seasonal / trend insights. A new "Research depth" field in the strategy panel lets the user pick None / Quick (under 10s) / Deep (under 60s). The chat thread shows research findings as a prose response with citations rendered using the existing AI disclaimer pattern.
ββββ Strategy panel (right pane) ββ Ready ββ Γ ββββββββββ
β [C-45 header] β
β Email strategy β
β Welcome to the community β
β β
β Goal βΎ Retention: Customer loyalty [C-46]
β Date _________________ π
[C-47]
β Recipients βΎ New email subscribers (2,150)[C-48]
β β
β Featured promo βΎ Welcome guide + bonus [C-49]
β Focus metric βΎ Revenue [C-50]
β β
β Research depth βΎ Quick (under 10s) βββ NEW β
β [None] [C-46/v.research-depth]
β [Quick Β· under 10s] β
β [Deep Β· under 60s Β· best] β
β β
β Featured products [Product 1] [Product 2] [+] [C-51]
β Visual style β£ β£ β£ β£ [C-52]
β β
β βββββββββββββββββββββββββββββ β
β [β¦ Create email β] [C-53]
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
after Create email click (chat thread):
ββββ Assistant message [C-43] βββββββββββββββββββββββββββββ
β β¦ Email strategy: Version 1 [Ready] β
β Welcome to the Community β
β β
β I scanned 12 sources on welcome-email best practices β
β this week. Three highest-signal findings I'm using: β
β β
β 1. Q3 2025 industry-avg open rate for first welcome β
β email = 47% (your benchmark target). β
β 2. Top-performing welcome emails reference user's β
β signup source within the first 3 lines. β
β 3. Including a single CTA (vs 2+) lifts CTR ~15%. β
β β
β Sources: 12 indexed pages Β· see citations β β
β β Intuit Intelligence can make mistakes... [C-55] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| "Research depth" select field | C-46/v.research-depth | Variant · same select pattern as Goal/Focus-metric, new label + 3 options |
| Research findings prose in chat | C-43 assistant message body | Reuse · same prose pattern, citations rendered as inline numbered superscripts |
| "see citations β" link | C-65 Edit Brand Kit link pattern | Reuse · same footer-link style; opens citations modal |
| Research-pending state on Create email CTA | C-53 with C-42 spinner | Reuse · CTA disabled during research, building spinner replaces the arrow |
| SMS | ||
|---|---|---|
| Full | Full | Full |
Web research is content-agnostic. SMS and WhatsApp strategies benefit equally from competitive / seasonal context.
What it does. Expose Mailchimp campaign creation as an MCP server so a marketer working in ChatGPT, Claude, or Cursor can hand off "draft a welcome email for my MC audience X" to Mailchimp and pull back the rendered draft. Enable via a new section in Prototype settings, generate a bearer token, copy to clipboard. No new end-user surface in the campaign builder — it's an operator/admin affordance.
ββββ Prototype settings popover [C-91] ββββββββββββββββββββββββββ β (Experiences + Connectors sections above) β β β β EXPOSE MAILCHIMP AS MCP SERVER [NEW] βββ C-91/v.mcp-section β β Let ChatGPT, Claude, or Cursor call Mailchimp directly. β β β β MCP server [ββ] enabled β β [C-92] β β β β Bearer token β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β mc_live_a8f3b9c2e7d6f1... π π β β β β [C-90/v.mcp-token-row: monospace + eye + copy] β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β β [Regenerate token] [Revoke all] β β Last used 4m ago by Claude 4.5 (Cursor) β β β β π Connection guide β (deep-link to Help Center) β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| "Expose Mailchimp as MCP server" section | C-91/v.mcp-section | Variant · new labeled section in settings popover, same layout as Experiences/Connectors |
| MCP server enable/disable toggle | C-92 experience toggle | Reuse · identical toggle molecule |
| Bearer token reveal row (monospace + eye + copy) | C-90/v.mcp-token-row | Variant · social-link input row with monospace font + eye/copy buttons |
| "Regenerate token" / "Revoke all" buttons | C-94 Reset brand kit | Reuse · same secondary button style as the Reset button below |
| "Connection guide β" link | C-55 AI disclaimer link | Reuse · same external link style |
| SMS | ||
|---|---|---|
| Full | Full | Full |
MCP exposure is workspace-level — once enabled, all three channels are addressable via the external client. No per-channel toggle needed.
Section 4 source: Features 05, 06, 07, 09, 10 from Canva-gap Phase 1 roadmap. Baseline components from Lens 3 Component × JTBD Matrix (96 IDs). Variant naming follows policy R3 from Section 2. Wireframe W1 (composer) rendered as HTML+CSS in the .fdpx-mcds-frame scope; W3 (Brand Kit Brand Voice 2.0) rendered the same way; remaining wireframes are ASCII per the user-approved Phase 1 depth.
What it does. Right-click (or selection-tap) on any <img> block inside the email canvas reveals 4 in-context AI actions: brush-replace (paint over a region, regenerate that region), subject-extract (cut subject from background), frame-extend (extend canvas in any direction with generated content), themed text/shape effects (apply Brand-Kit-aware overlays). The popover is anchored to the selected element; the result replaces the original image in-place after Accept.
Built a warm welcome with social-proof hero. Click any section to refine, or describe changes here.
Mode radio C-57 (β¦ AI / β manual) and viewport radio C-58 omitted from this crop for clarity; they remain in the editor top bar as in the baseline.
| Affordance | Maps to | Reuse / Variant / New |
|---|---|---|
| Element-selection state on canvas | C-61 iframe canvas | Reuse · selection now becomes a first-class state (today the canvas has no select state) |
| Image manipulation popover | C-97 (NEW) | New C-ID · variant class of C-95 theme popover but anchored to in-canvas elements instead of the floating Aa button. The only genuinely new shape in the spec. |
| 4 sub-actions (brush, extract, extend, effects) | C-25 quick-prompt chip pattern | Reuse · styled as menu rows in the popover (same hover pattern) |
| "Open in Dream Lab" deep-link | C-65 Edit Brand Kit link | Reuse · same teal footer-link style; routes to feature 02 |
| "Edit this image with AI" chip in C-70 | C-70 follow-up toolbar | Reuse · new chip text using existing chip primitive |
| Image-processing spinner | C-42 building spinner | Reuse · same snowflake-spinner overlay during regenerate |
Every other Phase 1 feature decomposes into existing primitives or variants. Image Manipulation is the exception because no baseline component anchors to an in-canvas element. The closest baseline pattern is C-95 Theme editor popover (floating, anchored to the Aa button below the canvas). C-97 is the same popover primitive (same elevation L2, same lv3 radius, same content style), but its anchor target is an element inside the iframe. This warrants a new C-ID under R2/R3 because the interaction model is materially different (selection-driven, not button-driven), even though the visual primitive is reused.
| SMS | ||
|---|---|---|
| Full | N/A (no images in SMS) | Full (image messages) |
SMS is text-only by RFC; the SMS tab's design editor has no image blocks to manipulate. WhatsApp supports image messages so the full C-97 popover renders identically there.
What it does. High-fidelity AI image generation from a text prompt plus an uploaded brand-style reference image. The user picks aspect ratio (1:1 / 4:5 / 16:9 / 9:16), style strength (slider), and one of 4 style presets (editorial, product, lifestyle, illustration). Result drops into the canvas as a new image block.
ββββ Manual mode left rail [C-71] βββββββββββββ
β π¦ Blocks β
β β¦ Sections β
β π¨ Styles β
β β¨ Image [NEW] βββ C-71/v.image-tab β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β clicking "Image" opens Dream Lab panel
ββββ Dream Lab [C-19 prompt + C-20 attach + C-21 sliders] βββββ
β β
β Describe the image [C-19] β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β A confident professional holding a coffee cup, β β
β β window light, soft focus background β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [+ Style reference image] [C-20 attach] β
β ββ uploaded: brand-shoot-2024-q3.jpg [Γ] β
β β
β Style strength βββββββββββββββββ 72% [C-21 sliders]β
β β
β Aspect ratio β― 1:1 β¦Ώ 4:5 β― 16:9 β― 9:16 β
β [C-58/v.aspect] β
β β
β Style preset β
β [β³ Editorial] [β³ Product] [β³ Lifestyle] [β³ Illustration] β
β [C-25 chips] β
β β
β βββββββββββββββββββββ β
β [β¦ Generate image] [C-53 CTA] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β result preview appears here once Generate completes
[4 result thumbnails appear inline] β pick one to drop in canvas
[π / π / β» Regenerate] [C-44 feedback row]
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| "Image" tab in manual rail | C-71/v.image-tab | Variant · left-rail tab pattern, 4th tab below Blocks/Sections/Styles |
| Prompt textarea | C-19 | Reuse · same composer textarea, relabeled "Describe the image" |
| Style-reference attach | C-20 | Reuse · same + attach button, file-picker only |
| Style-strength slider | C-89 brand voice formality slider | Reuse · same 0–100 slider primitive |
| Aspect ratio segmented control | C-58/v.aspect | Variant · viewport-radio molecule with 4 labels (1:1 / 4:5 / 16:9 / 9:16) instead of desktop/mobile/split |
| Style preset chips | C-25 | Reuse · same quick-prompt chip with β³ glyph |
| Generate CTA | C-53 Create email CTA | Reuse · teal pill, label "β¦ Generate image" |
| Result-thumbnail picker | C-52 visual style picker | Reuse · same 3-4-swatch picker pattern |
| Feedback row on result | C-44 | Reuse · Copy/Like/Dislike/Regenerate |
| SMS | ||
|---|---|---|
| Full | N/A | Full |
What it does. The existing post-generation chat composer (C-54 "Ask anything…") becomes the primary edit channel for the entire builder. Plain-English instructions like "Make the hero more professional," "Swap the hero," "Shorten body 30%," "Add urgency" are parsed and applied as scoped changes. Result is rendered as a before→after preview-diff strip inside the assistant message (using thumbnails of the affected region). User clicks Accept or Regenerate; manual edits are preserved.
User intent (plain English) β Scoped change applied
βββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
"Make the hero more professional" β Theme tweak + copy rewrite (hero only)
"Swap the hero" β Section replace (Hero section, alternative)
"Shorten copy 30%" β Copy compression (body sections)
"Add urgency" β Subject + hero copy rewrite + CTA verbs
"Make it feel like our spring launch" β Style transfer (uses Memory feature 06)
"Use Bold Product Cardstyle layout" β Section swap (manual mode sections)
[reuses C-75 Sections panel content]
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| Chat composer (post-generation) | C-54 | Reuse · verbatim; the entire feature is scope-expansion of what intents it parses |
| Assistant message body | C-43/v.preview-diff | Variant · existing prose with embedded before→after thumbnail strip (uses C-28 thumbnail primitive) |
| Follow-up chips with new text | C-70/v.refine-chips | Variant · existing chip toolbar, new content: "Swap hero" / "Make professional" / "Shorten copy" / "Add urgency" |
| Accept / Regenerate buttons | C-53 + C-44 | Reuse · primary teal pill (Accept) + Regenerate from feedback row |
| Like / Dislike feedback | C-44 | Reuse · existing π/π feedback row, signals to AI which intents land |
| SMS | ||
|---|---|---|
| Full | Full (text-only edits) | Full |
SMS conversational editing scopes to text-only changes ("shorten 30%," "more urgent," "change CTA verb"). Image-related intents are rejected on SMS with a hint ("SMS doesn't support images — try the WhatsApp tab").
What it does. Drop a flat image / PDF / HTML file into the composer's existing + attach button. AI detects sections and reconstructs them as editable layered blocks. A progress banner shows ingestion ("Reading sections… 3 detected: Header, Hero, Footer"). User clicks "Open as editable email" and the result populates as draggable blocks in the manual editor.
ββββ Email tab composer [C-16] ββββββββββββββββββββββββββββββββββββ
β β
β Describe the email… β
β [+] βββ drop a flat file (jpg/pdf/html) β
β [C-20] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β drop detected
ββββ Ingestion banner [C-23/v.ingestion-progress] βββββββββββββββββ
β β¦ Reconstructing layers from "competitor-promo.jpg" β
β βββββββββββββ 72% 3 sections detected β
β β Header β Hero β Body β― Footer (next) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ingestion complete
ββββ Assistant message [C-43] βββββββββββββββββββββββββββββββββββββ
β β¦ Magic Layers Β· 7 editable blocks [Ready] β
β Reconstructed from competitor-promo.jpg β
β β
β I extracted these sections: 1 Header, 1 Hero, 2 Body, 1 Coupon, β
β 1 Product Grid, 1 Footer. Brand Kit applied: your logo replaced β
β theirs, colors normalized to teal/cream palette. β
β β
β [Open as editable email β] [C-53/v.open-as-editable]
β [π / π / Regenerate] [C-44] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β click "Open as editable email"
[Manual mode opens with 7 blocks pre-populated in C-61 canvas]
[User can now drag, edit, or run feature 03 conversational editing]
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| File drop on attach button | C-20 | Reuse · existing + attach button, accepts jpg/pdf/html in addition to existing types |
| Ingestion progress banner | C-23/v.ingestion-progress | Variant · brand-context banner with progress bar + per-section status |
| Ingestion building spinner | C-42 | Reuse · snowflake spinner in banner |
| "Open as editable email" CTA | C-53/v.open-as-editable | Variant · primary CTA with different label; routes to manual mode pre-populated |
| Reconstructed blocks in canvas | C-72 content blocks grid | Reuse · blocks from Sections panel populate the canvas as if user dragged them in |
| Section-detection assistant prose | C-43 | Reuse · standard prose response listing detected sections |
Magic Layers is the cleanest Phase 1 feature — it composes entirely from existing primitives and 2 variants. No new shape needed. The ingestion banner is conceptually new (progress + per-section status) but reuses C-23's shape with state extensions.
| SMS | ||
|---|---|---|
| Full | N/A (no flat artifacts to ingest) | Partial (image attach only, no PDF/HTML) |
What it does. Generate branded sticker packs (mascot, holiday, reaction sets) and one-click animations for hero blocks. Lives as a 5th tab in the manual mode left rail alongside Blocks / Sections / Styles / Image. Generated stickers persist in Brand Kit as a new asset type, addressable from any future campaign.
ββββ Manual mode left rail [C-71] ββββββββββββββββββββββββββββββββ
β π¦ Blocks β
β β¦ Sections β
β π¨ Styles β
β β¨ Image βββ feature 02 β
β π Stickers [NEW] βββ C-71/v.stickers-tab β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β clicking "Stickers" opens generator
ββββ Stickers panel βββββββββββββββββββββββββββββββββββββββββββββββ
β Describe the sticker pack [C-19] β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β A friendly mascot variant for our spring launch β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Style preset β
β [β³ Branded mascot] [β³ Holiday pack] [β³ Reaction set] β
β [β³ Hero animation] β
β [C-25/v.sticker-prompts] β
β β
β [β¦ Generate sticker pack] [C-53 CTA] β
β β
β βββββββββββββββββββββββββββββββ β
β Recent packs β
β [π][π][π][π‘] Spring '26 mascot Β· 8 stickers [Use] β
β [β€οΈ][π₯][β][β¨] Reaction set v2 Β· 4 stickers [Use] β
β [C-72 blocks grid] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Affordance | Maps to | Reuse / Variant |
|---|---|---|
| "Stickers" tab in manual rail | C-71/v.stickers-tab | Variant · 5th tab using the same tab molecule |
| Prompt textarea | C-19 | Reuse · existing composer textarea, relabeled |
| Style preset chips | C-25/v.sticker-prompts | Variant · quick-prompt chip text variants (Branded mascot / Holiday pack / Reaction set / Hero animation) |
| Generate CTA | C-53 | Reuse · teal pill, label "β¦ Generate sticker pack" |
| Sticker pack tile grid | C-72 blocks tile grid | Reuse · same drag-drop tile primitive as Blocks panel |
| "Use" button on saved pack | C-66 Send a test email | Reuse · secondary button style; inserts pack into canvas |
C-82/v.stickers-bk-tab variant if it lands; out of Phase 1 scope, addressable from manual rail only for now)| SMS | ||
|---|---|---|
| Full (animated GIF blocks) | N/A (no media in SMS) | Full (sticker messages native to WhatsApp) |
Section 5 source: Features 01, 02, 03, 04, 08 from Canva-gap Phase 1 roadmap. Wireframe W2 (Design editor with image-selected popover + chat preview-diff) rendered as HTML+CSS in .fdpx-mcds-frame. The only genuinely new C-ID in the entire spec is C-97 Image manipulation popover — rationale: it's a popover anchored to an in-canvas element, which has no baseline analog. Every other feature decomposes into existing primitives or registered variants.
Rule R4 from Section 2: each feature gets an honest cell per channel. Full = ships unchanged Β· Partial = ships with explicit scope-down Β· N/A = physics constraint, not a roadmap item.
| Feature | Layer | SMS | ||
|---|---|---|---|---|
| 01 AI Image Manipulation Suite | AI | Full | N/A · no images in SMS RFC | Full · image messages |
| 02 Dream Lab | AI | Full | N/A · text-only channel | Full |
| 03 Conversational Design Editing | AI 2.0 | Full | Full · text-only edit intents | Full |
| 04 Magic Layers | AI 2.0 | Full | N/A · no flat artifacts to ingest | Partial · image attach only, no PDF/HTML |
| 05 Brand Voice 2.0 + Brand Intelligence | AI / AI 2.0 | Full | Full · tone applies to all copy | Full |
| 06 Mailchimp Memory | AI 2.0 | Full | Full | Full |
| 07 Live-Context Connectors | AI 2.0 | Full | Full | Full |
| 08 AI Sticker / GIF / Animation | AI | Full · animated GIFs | N/A · no media in SMS | Full · sticker messages native |
| 09 Web Research Integration | AI 2.0 | Full | Full | Full |
| 10 ChatGPT & Claude MCP Bridge | AI 2.0 | Full | Full · workspace-level | Full |
Coverage roll-up: 30 total cells · 23 Full · 1 Partial (feature 04 on WhatsApp) · 6 N/A. SMS is the most-constrained channel because of its text-only physics; WhatsApp benefits from media support and lands as Full for 8 of 10 features.
Source: Lens 2 baseline task flows from Design Audit Tab 18.
| Baseline flow | Affected by features | New states / steps introduced |
|---|---|---|
| A · Cold start First-time signup β first send | 05 (Brand Voice broadcast) · 06 (Memory recall) · 09 (Web Research) | Memory-recall-on-first-visit (returning users) · brand-broadcast-banner state · web-research-pending state delays Create CTA |
| B · Power user Recent β resume β refine | 04 (Magic Layers) · 10 (MCP Bridge) | Magic-Layers-ingestion state on composer attach · MCP-server-enabled state on workspace |
| C · Brand Kit loop-back Mid-flow brand setup | 05 (Brand Voice 2.0) · 07 (Connectors) | Brand-profile-versioned state · connector-OAuth state · connector-syncing state |
| D · Refinement Post-generation iteration | 01 (Image) · 02 (Dream Lab) · 03 (Conv. Editing) · 08 (Stickers) | Image-selected canvas state · staged-change preview-diff state (between AI proposal & Accept) · sticker-pack state |
| E · Send Terminal action | (unchanged) | None · Phase 1 does not touch the Send transition. Existing Send-button audience-confirm gap (pre-mortem #4 Critical) remains and should be addressed concurrently per Tab 18 recommendations. |
12 new states introduced across Phase 1, grouped by surface.
| Surface | State name | Triggered by |
|---|---|---|
| Canvas (C-61) | image-selected | Click an image block in canvas β enables C-97 popover anchor (feature 01) |
| Canvas (C-61) | regenerating (per-element) | C-97 popover action confirmed β snowflake overlay during regen (feature 01) |
| Chat thread (C-43) | staged-change | AI proposes a refinement β preview-diff visible, canvas untouched until Accept (feature 03) |
| Composer attach (C-20) | ingestion-pending | Flat file dropped β C-23/v.ingestion-progress banner appears (feature 04) |
| Brand Kit (C-89) | profile-active | Profile picker radio changed β all future AI gens use this profile (feature 05) |
| Email tab | brand-broadcast-pending | Brand Kit changed since last visit β C-23/v.brand-update-broadcast banner shows (feature 05) |
| Drafts | brandVersion mismatch | Draft's brandVersion < current Brand Kit version β counts toward "12 drafts" banner (feature 05) |
| Sidebar (C-9) | memory-drawer-open | Click "Things I remember" entry β C-82/v.memory-drawer modal opens (feature 06) |
| Composer (C-16) | memory-chips-visible | Active brand profile has matching memories β C-25/v.memory chips render below standard chips (feature 06) |
| Settings popover (C-91) | connector-syncing | Connector OAuth granted β snowflake spinner per row until sync complete (feature 07) |
| Strategy panel (C-46) | research-pending | Research depth = Quick/Deep β Create email CTA disabled, spinner inline (feature 09) |
| Settings popover (C-91) | mcp-server-enabled | MCP toggle on β bearer-token row visible, token in hidden state until eye toggled (feature 10) |
Per policy R3 from Section 2: variants stay under the parent C-ID with /v.label suffix. The baseline inventory stays at 96; the spec adds 1 genuinely new C-ID (C-97) and 18 variants.
| ID | Name | Parent / closest analog | Rationale for new C-ID |
|---|---|---|---|
| C-97 | Image manipulation popover | C-95 Theme popover | Same popover primitive (lv3 radius, elevation L2, white bg) but anchored to an in-canvas element via element-selection, not the floating Aa button. The interaction model is materially different (selection-driven, not chrome-driven), so it gets a new C-ID under R2. |
| Variant ID | Parent | Used by feature | Difference from parent |
|---|---|---|---|
| C-23/v.live-context-banner | C-23 banner | 07 Connectors | Extended to list connected sources + "Manage sources" link |
| C-23/v.ingestion-progress | C-23 banner | 04 Magic Layers | Progress bar + per-section detection status |
| C-23/v.brand-update-broadcast | C-23 banner | 05 Brand Voice 2.0 | Count badge ("12 drafts") + primary CTA ("Update all 12") |
| C-25/v.memory | C-25 quick-prompt chip | 06 Memory | π§ glyph instead of β³ · warm yellow chip background instead of grey-blue |
| C-25/v.sticker-prompts | C-25 | 08 Stickers | Text variants: "Branded mascot" / "Holiday pack" / "Reaction set" / "Hero animation" |
| C-43/v.preview-diff | C-43 assistant message body | 03 Conversational Editing | Embedded before→after thumbnail strip (uses C-28 thumbnail primitive) |
| C-46/v.research-depth | C-46 Goal select | 09 Web Research | 3-option select: None / Quick / Deep · inline with other strategy fields |
| C-53/v.open-as-editable | C-53 Create email CTA | 04 Magic Layers | Same teal pill, label "Open as editable email β"; routes to manual mode pre-populated |
| C-58/v.aspect | C-58 Viewport radio | 02 Dream Lab | Labels 1:1 / 4:5 / 16:9 / 9:16 instead of desktop/mobile/split · 4-option vs 3 |
| C-70/v.refine-chips | C-70 follow-up toolbar | 03 Conversational Editing | New chip text: "Swap hero" / "Make professional" / "Shorten copy" / "Add urgency" |
| C-71/v.image-tab | C-71 left rail tabs | 02 Dream Lab | 4th tab "Image" below Blocks/Sections/Styles |
| C-71/v.stickers-tab | C-71 left rail tabs | 08 Stickers | 5th tab "Stickers" alongside Image |
| C-82/v.memory-drawer | C-82 Brand Kit left tab nav | 06 Memory | Same left-nav molecule with 6 memory categories instead of 7 brand sections |
| C-89/v.profile-picker | C-89 brand voice composite | 05 Brand Voice 2.0 | Profile-picker radio group inserted at top of composite (Default / Holiday / Launch / +) |
| C-90/v.mcp-token-row | C-90 social link row | 10 MCP Bridge | Monospace token field + eye toggle + copy button instead of platform URL input |
| C-91/v.connector-section | C-91 settings popover | 07 Connectors | New labeled section "Live-Context Connectors" inside settings popover |
| C-91/v.mcp-section | C-91 settings popover | 10 MCP Bridge | New labeled section "Expose Mailchimp as MCP server" inside settings popover |
| C-92/v.connector-toggle | C-92 experience toggle | 07 Connectors | Toggle row with vendor logo + last-sync timestamp metadata |
| C-11/v.memory-entry | C-11 conversation list item | 06 Memory | Sidebar entry labeled "Things I remember" with count badge + NEW tag |
Every Phase 1 affordance was checked against the rules R1, R5, R6 from Section 2. No new colors, no new fonts, no new radii. Yellow stays as brand cue only. Teal stays as AI primary action.
| Affordance | Color used | Token | R1 / R5 / R6 compliant? |
|---|---|---|---|
| All β¦ Generate / Create / Confirm CTAs (every feature) | Teal | --color-accent-blue #017E89 | β Yes · R6 |
| C-23/v.brand-update-broadcast banner alert | Subtle teal background | --color-accent-blue-light #E0EDFF | β Yes · reuses existing banner token (R1) |
| C-90/v.mcp-token-row monospace field | Neutral bg + system mono font | --color-bg-secondary + ui-monospace | β Yes · system font already in stack; no new font |
| C-25/v.memory chip (warm yellow background) | Soft warm bg #FFFBE6 | Chip primitive bg variant (within mcds neutral surface palette) | β Yes · not the #FFE01B brand stripe; subtle differentiator |
| Connector vendor logos (Slack, Drive, Notion, etc.) | Vendor SVG, no recolor | n/a · vendor assets | β Yes · vendor logos exempt from token rule per industry convention |
| C-97 popover elevation | Shadow L2 | 0 2px 8px 0 rgba(76,85,91,.2) | β Yes · matches C-95 theme popover |
| Yellow #FFE01B usage | Home top-stripe ONLY (existing C-02) | --color-action-special-use | β Yes · explicitly never used for any Phase 1 affordance per R5 |
| Destructive actions (none in Phase 1) | n/a | --color-ui-negative reserved | β Yes · no destructive actions introduced |
Section 6 source: Channel parity rules from R4 (Section 2). Flow definitions from Lens 2 baseline task flows. Variant register reflects R3 policy. Token attestation reflects R1 + R5 + R6. The 12 new states inventory is the authoritative list for engineering scope — each maps to a specific surface and trigger.
Recommended order honors three orchestration moves: (a) ship the lowest-risk Plan-step extensions first to surface the AI's context, (b) ship the chat-side scope expansion before the in-canvas popover, (c) ship the operator-config features (MCP, connectors) before they become end-user-visible.
| # | Step | Features | Why this order |
|---|---|---|---|
| 1 | Connector OAuth + sync infrastructure | 07 | Foundation for live-context retrieval; nothing else depends on it but feature 07's UX requires it backed |
| 2 | Persistent memory store + recall API | 06 | Same: shared infra used by features 06 and partially 09 |
| 3 | Web research backend (search + citation extraction) | 09 | Strategy-panel-side change; reuses C-46 select primitive |
| 4 | Brand Voice 2.0 + Brand Intelligence URL extractor | 05 | Brand Kit extension; ships independent of generation surface |
| 5 | MCP server endpoint + bearer-token issuance | 10 | Operator surface only; no end-user impact until external clients connect |
| 6 | Settings popover restructure (3 sections: Experiences / Connectors / MCP) | 07, 10 | Single shipped layout change consolidates 2 features into the popover |
| 7 | Composer + sidebar surface changes (memory chip, live-context banner, memory drawer) | 06, 07 | End-user-visible Plan-step rollout begins; activates with feature-flag |
| 8 | Conversational Design Editing intent expansion + preview-diff in chat | 03 | Chat-side scope expansion; uses existing C-54 + new C-43/v.preview-diff variant |
| 9 | Dream Lab + Stickers tabs in manual mode rail | 02, 08 | Both are new tabs in C-71; ship together for symmetry |
| 10 | Magic Layers ingestion pipeline + composer integration | 04 | Composer + manual mode integration; cleanest decomposition into existing primitives |
| 11 | AI Image Manipulation Suite + C-97 popover (the only new C-ID) | 01 | Highest-risk: ships last. Requires canvas selection-state work + new popover primitive. Most engineering-heavy. |
| Gate | Check |
|---|---|
| G1 · C-XX inventory check | Every reference in the live UI traces back to a baseline C-XX ID or a registered /v.label variant from Section 6.4. The inventory ceiling stays at 97 (96 baseline + C-97). |
| G2 · Token compliance check | No new hex values introduced; yellow #FFE01B unused outside the existing Home top-stripe; teal #017E89 is the only AI primary action color. |
| G3 · Channel parity honest | Each feature ships with the exact parity declared in Section 6.1. SMS does not get image-related features pretending to work. |
| G4 · Flow A (cold start) end-to-end | New free user signs up → URL imports brand → Brand Voice 2.0 auto-detects → Memory empty (first visit) → AI generates with research-depth Quick → reaches Editor with all states correct. Time-to-first-send target: β€ 2 days (CB1 from Revised Goals). |
| G5 · Flow B (power user) end-to-end | Returning power user opens prior conversation → sees memory chips in composer → refines via Conversational Design Editing → uses Image Manipulation popover → Send. All staged-change states roll back cleanly on regenerate. |
| G6 · Settings popover height fits viewport | 3-section settings popover (Experiences / Connectors / MCP) must fit a 720px-height viewport without scroll. If overflow, collapse to accordion. |
| G7 · Manual rail 5 tabs scroll behavior | C-71 left rail with 5 tabs (Blocks / Sections / Styles / Image / Stickers) renders cleanly at 60-80px width. No tab labels truncated. |
| G8 · Connector OAuth doesn't break flows | OAuth redirect for Slack/Drive/Notion/Zoom/Calendar must return user to composer with state preserved — no draft loss. |
| G9 · Hallucination guardrails (pre-mortem #3 unaddressed by this spec) | External dependency. Phase 1 does not solve the AI-hallucination liability identified in Tab 18 Lens 4 Risk #3 (footer address, promo codes, products). Ship Phase 1 only if pre-send verification is concurrently in roadmap. |
| G10 · Send-flow audience confirm (pre-mortem #4 unaddressed by this spec) | External dependency. Phase 1 does not solve the missing audience-confirm modal at Send. Ship Phase 1 only if Send confirm is concurrently in roadmap. |
| Artifact | Location | Used in this spec for |
|---|---|---|
| Tab 18 · Design Audit (the Builder Lens Stack) | mailchimp-editor.html#designaudit | 96-component inventory (C-01 to C-96) · 5-lens framework · pre-mortem references |
| Tab 17 · Freddie Strategy Assessment | mailchimp-editor.html#freddie | HVC / UR / Revised Goals scoring against the prototype |
| Tab 11 · Revised Goals | mailchimp-editor.html#revised | $21M ARR target · CB1–5 customer benefit metrics |
| Tab 15 · Strategy Memo | mailchimp-editor.html#memo | 5 FY27 Pillars · 6-quarter roadmap · Builder Hierarchy of Needs |
| Lens 1 · Structural IA | freddie-design-assessment/lenses/01-structural-ia.md | Sitemap / route hierarchy / 2-shell decision · reused for IA continuity |
| Lens 2 · Interaction Model | freddie-design-assessment/lenses/02-interaction-model.md | 5 baseline task flows A–E · state contract for chat β editor mutex |
| Lens 3 · Component × JTBD Matrix | freddie-design-assessment/lenses/03-component-jtbd-matrix.md | Canonical 96-component spine · cited by C-XX throughout this spec |
| Lens 4 · Heuristic + a11y Scorecard | freddie-design-assessment/lenses/04-heuristic-accessibility.md | The 9 critical (S4) findings · pre-mortem #3 + #4 cited as external dependencies (G9, G10) |
| Lens 5 · Strategy-Fit Overlay | freddie-design-assessment/lenses/05-strategy-fit.md | Builder Hierarchy heatmap · FY27 Pillar coverage scorecard · top-10 RICE |
| Decomp doc 03 · Design tokens | ai-email-generator-decomp/docs/03-design-tokens.md | Verbatim mcds token table in Section 2.2 |
| Decomp doc 04 · Components | ai-email-generator-decomp/docs/04-components.md | Component-family vocabulary · primitive-class names |
| Canva-gap analysis (the source for Phase 1 features) | deepakp1308.github.io/canva-campaign-analysis/ | The 10 named Phase 1 features · 7-step JTBD workflow · 5 value dimensions · Harvey-ball ratings |
Spec complete. v1.0 · May 2026 · Authored using the planning workflow in ~/.claude/plans/hey-so-you-have-greedy-acorn.md · All wireframes, component decompositions, and validation gates traced to either the Freddie baseline (ai-email-generator-decomp/), the Builder Lens Stack (freddie-design-assessment/lenses/), or the Canva-gap roadmap (canva-campaign-analysis). Iteration history will live in this repo's git log; raise design questions or component-ID disputes via PR comment on klaviyo-flows-competitive-analysis.