# 🎯 DanakMail Template Builder MVP - Implementation Plan ## 📋 Executive Summary This MVP combines the best features of Waypoint's template builder with your current Persian email template system to create a powerful, RTL-compatible email template builder. ## 🎨 Key Features to Implement ### Phase 1: Core Block System (Week 1-2) - ✅ **Text Block**: Rich text editing with Persian support - ✅ **Button Block**: Customizable CTAs with styling - ✅ **Image Block**: Upload/URL with responsive options - ✅ **Container Block**: Layout wrapper with styling - ✅ **Spacer Block**: Vertical spacing control ### Phase 2: Drag & Drop Interface (Week 3-4) - 🔄 **Block Library**: Sidebar with draggable blocks - 🔄 **Canvas Area**: Drop zone for template building - 🔄 **Block Management**: Add, remove, reorder blocks - 🔄 **Properties Panel**: Context-sensitive editing ### Phase 3: Template Variables (Week 5-6) - 📝 **Variable System**: Dynamic content placeholders - 📝 **Test Data**: Preview with sample data - 📝 **Conditional Logic**: Show/hide based on data - 📝 **Loop Support**: Repeat blocks with arrays ### Phase 4: Export & Preview (Week 7-8) - 📤 **HTML Export**: Email-compatible HTML - 📤 **Live Preview**: Real-time template preview - 📤 **Mobile Preview**: Responsive design testing - 📤 **Email Client Testing**: Gmail, Outlook compatibility ## 🏗️ Architecture Overview ``` src/ ├── pages/ │ └── email-builder/ │ ├── EmailBuilder.tsx # Main builder interface │ ├── components/ │ │ ├── blocks/ # Block components │ │ │ ├── TextBlock.tsx │ │ │ ├── ButtonBlock.tsx │ │ │ ├── ImageBlock.tsx │ │ │ ├── ContainerBlock.tsx │ │ │ └── SpacerBlock.tsx │ │ ├── panels/ # Side panels │ │ │ ├── BlockLibrary.tsx │ │ │ ├── PropertiesPanel.tsx │ │ │ └── VariablesPanel.tsx │ │ ├── canvas/ # Canvas area │ │ │ ├── Canvas.tsx │ │ │ ├── DropZone.tsx │ │ │ └── BlockRenderer.tsx │ │ └── preview/ # Preview system │ │ ├── LivePreview.tsx │ │ ├── MobilePreview.tsx │ │ └── EmailPreview.tsx │ ├── hooks/ │ │ ├── useEmailBuilder.ts │ │ ├── useDragDrop.ts │ │ └── useTemplateExport.ts │ ├── store/ │ │ ├── builderStore.ts │ │ └── templatesStore.ts │ ├── types/ │ │ ├── blocks.ts │ │ ├── template.ts │ │ └── export.ts │ └── utils/ │ ├── blockRenderers.ts │ ├── htmlExporter.ts │ └── templateValidator.ts ``` ## 🔧 Technical Implementation ### 1. Block Interface Definition ```typescript // src/pages/email-builder/types/blocks.ts interface BaseBlock { id: string type: BlockType data: BlockData style: BlockStyle responsive?: ResponsiveSettings } interface TextBlock extends BaseBlock { type: 'text' data: { content: string variables?: string[] } style: { fontSize: number fontWeight: string color: string textAlign: 'left' | 'center' | 'right' lineHeight: number } } interface ButtonBlock extends BaseBlock { type: 'button' data: { text: string url: string variables?: string[] } style: { backgroundColor: string textColor: string borderRadius: number padding: Spacing fontSize: number } } ``` ### 2. Drag & Drop Implementation ```typescript // src/pages/email-builder/hooks/useDragDrop.ts import { useDragDropManager } from '@dnd-kit/core' export const useDragDrop = () => { const { addBlock, moveBlock, removeBlock } = useEmailBuilderStore() const handleDragEnd = (event: DragEndEvent) => { const { active, over } = event if (active.data.current?.type === 'library-block') { // Add new block from library addBlock(active.data.current.blockType, over?.id) } else if (active.data.current?.type === 'canvas-block') { // Reorder existing blocks moveBlock(active.id, over?.id) } } return { handleDragEnd } } ``` ### 3. Template Variable System ```typescript // src/pages/email-builder/utils/templateProcessor.ts export const processTemplate = (template: Template, variables: Record) => { return template.blocks.map(block => { switch (block.type) { case 'text': return { ...block, data: { ...block.data, content: replaceVariables(block.data.content, variables) } } case 'button': return { ...block, data: { ...block.data, text: replaceVariables(block.data.text, variables), url: replaceVariables(block.data.url, variables) } } default: return block } }) } const replaceVariables = (content: string, variables: Record) => { return content.replace(/\{\{(\w+)\}\}/g, (match, key) => { return variables[key] || match }) } ``` ### 4. HTML Export System ```typescript // src/pages/email-builder/utils/htmlExporter.ts export const exportToHTML = (template: Template, options: ExportOptions) => { const styles = generateEmailStyles(template, options) const bodyHTML = renderBlocks(template.blocks, options) return ` ${template.name} ${styles}
${bodyHTML}
` } ``` ## 📊 Comparison Matrix | Feature | Current System | Waypoint | MVP Target | |---------|---------------|----------|------------| | RTL Support | ✅ Full | ❌ None | ✅ Full | | Drag & Drop | ❌ None | ✅ Full | ✅ Full | | Block System | ⚠️ Limited | ✅ Rich | ✅ Rich | | Variables | ❌ None | ✅ LiquidJS | ✅ Simple | | Email Client Support | ⚠️ Basic | ✅ Full | ✅ Full | | Persian UI | ✅ Full | ❌ None | ✅ Full | | Template Library | ✅ Basic | ✅ Rich | ✅ Rich | | Live Preview | ⚠️ Basic | ✅ Advanced | ✅ Advanced | ## 🚀 Development Timeline ### Week 1-2: Foundation - [ ] Setup new email builder structure - [ ] Implement basic block types - [ ] Create block components - [ ] Setup Zustand store ### Week 3-4: Drag & Drop - [ ] Install @dnd-kit/core - [ ] Implement block library sidebar - [ ] Create canvas drop zone - [ ] Add block management ### Week 5-6: Advanced Features - [ ] Template variables system - [ ] Properties panel - [ ] Test data scenarios - [ ] Conditional rendering ### Week 7-8: Export & Polish - [ ] HTML export optimization - [ ] Email client testing - [ ] Mobile responsive preview - [ ] Performance optimization ## 💻 Getting Started 1. **Install Dependencies**: ```bash npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities npm install react-beautiful-dnd @types/react-beautiful-dnd ``` 2. **Update Store Structure**: ```typescript // Extend existing personality store interface EmailBuilderStore extends PersonalityStore { blocks: Block[] template: Template variables: TemplateVariable[] addBlock: (type: BlockType, position?: number) => void updateBlock: (id: string, updates: Partial) => void removeBlock: (id: string) => void } ``` 3. **Migration Path**: - Keep existing personality system - Add new email builder alongside - Gradually migrate users to new system - Maintain backward compatibility ## 🎯 Success Metrics - **User Adoption**: 80% of users try new builder within first month - **Template Creation Time**: 50% reduction compared to current system - **Email Compatibility**: 99% rendering across major clients - **Mobile Responsiveness**: Perfect rendering on all devices - **Persian RTL Support**: Flawless right-to-left layout ## 🔮 Future Enhancements (Post-MVP) 1. **AI-Powered Templates**: Generate templates from text descriptions 2. **Collaboration**: Real-time editing with team members 3. **Analytics**: Template performance tracking 4. **A/B Testing**: Compare template variants 5. **Animation Support**: CSS animations for email elements 6. **Component Library**: Reusable design system components --- *This MVP plan provides a clear roadmap to build a world-class email template builder that combines Waypoint's advanced features with your system's Persian/RTL strengths.*