The Email Template Editor is a comprehensive drag-and-drop email template creation system that allows users to design, edit, and manage email templates for review requests. Built around the Stripo email editor API, this feature provides a WYSIWYG interface where users can create personalized email templates with merge tags, validate content structure, import designs from other stores, and support multilingual content. The editor integrates with Yotpo's review request system, enabling users to craft engaging emails that drive customer engagement and review collection across different email types including reminders, targeted product requests, and site review requests.
Feature | Tiptap | Quill |
---|---|---|
Core Library | Built on top of ProseMirror | Custom-built editor engine |
Language | TypeScript-first | JavaScript |
Customizability | Highly customizable (nodes, marks, extensions) | Moderate (themes, modules, formats) |
Framework Support | Vue, React, plain JS, etc. | Plain JS, React (via wrappers), Vue |
Collaborative Editing | Supported via extensions (e.g. Yjs) | Not natively supported |
Goal: Transform EmailEditor into a well-tested, easily maintainable library, enabling other teams to integrate it with minimal support overhead.
- Current Pain Points:
- Inconsistent testing approaches
- Frequent support requests from other teams
- Lack of standardized E2E testing and documentation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"pagination":{ | |
"total":15000, | |
"size":20 | |
}, | |
"products":[ | |
{ | |
"id":"152428860", | |
"created_at":"2019-12-18T22:37:48.000Z", | |
"product_name":"Branded Shirt 16853", |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import '@yotpo-common/ui-components/components/list'; | |
import '@yotpo-common/ui-components/components/list-item'; | |
import '@yotpo-common/ui-components/components/list-label'; | |
import { LitElement, html } from 'lit'; | |
import { customElement, state } from 'lit/decorators.js'; | |
@customElement('test-dropdown') | |
export class TestDropdown extends LitElement { | |
@state() | |
private checked: boolean = false; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import '@yotpo-common/ui-components/components/list'; | |
import '@yotpo-common/ui-components/components/list-item'; | |
import '@yotpo-common/ui-components/components/list-label'; | |
import { LitElement, html } from 'lit'; | |
import { customElement, state } from 'lit/decorators.js'; | |
@customElement('test-dropdown') | |
export class TestDropdown extends LitElement { | |
@state() | |
private checked: boolean = false; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@font-face { | |
font-family: 'monospace, monospace'; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pre { | |
font-family: Times New Roman; | |
} |