9.1 KiB
Enhanced Email Sending Features
Overview
The beenvoice application now includes a comprehensive email sending system with preview, rich text editing, and confirmation features. This enhancement provides a professional email experience for sending invoices to clients.
Features
🎨 Rich Text Email Composer
- Tiptap Editor Integration: Professional rich text editing with formatting options
- Text Formatting: Bold, italic, strikethrough, and color options
- Text Alignment: Left, center, and right alignment
- Lists: Bullet points and numbered lists
- Color Picker: Choose from a variety of text colors
- Real-time Preview: See changes as you type
👁️ Email Preview
- Visual Preview: See exactly how your email will appear to recipients
- Invoice Summary: Displays key invoice details (number, date, amount)
- Attachment Notice: Shows PDF attachment information
- Professional Styling: Clean, branded email template
- Responsive Design: Optimized for all screen sizes with proper text wrapping
- Mobile-First: Touch-friendly interface with proper spacing
✅ Send Confirmation
- Two-Step Process: Compose ↔ Preview with Send Action
- Action-Based Sending: Send button available from sidebar and floating action bar
- Status Updates: Automatic status change from draft to sent
- Error Handling: Clear error messages with specific guidance
- SSR Compatible: Proper hydration handling for server-side rendering
📄 Smart Templates
- Auto-Generated Content: Professional email templates with proper paragraph spacing
- Time-Based Greetings: Morning, afternoon, or evening greetings
- Invoice Details: Automatically includes invoice number, date, and amount
- Business Branding: Uses your business name and contact information
- Immediate Loading: Content appears instantly in the editor without requiring tab switching
Components
EmailComposer
Location: src/components/forms/email-composer.tsx
A rich text editor component for composing emails with formatting options.
Props:
subject: Email subject lineonSubjectChange: Callback for subject changescontent: Email content (HTML)onContentChange: Callback for content changesfromEmail: Sender email addresstoEmail: Recipient email address
EmailPreview
Location: src/components/forms/email-preview.tsx
Displays a visual preview of how the email will appear to recipients.
Props:
subject: Email subject linefromEmail: Sender email addresstoEmail: Recipient email addresscontent: Email content (HTML)invoice: Invoice data for summary display
SendEmailDialog
Location: src/components/forms/send-email-dialog.tsx
Main dialog component that combines composition, preview, and confirmation.
Props:
invoiceId: ID of the invoice to sendtrigger: React element that opens the dialoginvoice: Invoice dataonEmailSent: Callback when email is successfully sent
EnhancedSendInvoiceButton
Location: src/components/forms/enhanced-send-invoice-button.tsx
Enhanced button component that opens the email dialog.
Props:
invoiceId: ID of the invoice to sendvariant: Button style variantclassName: Additional CSS classesshowResend: Whether to show "Resend" textsize: Button size
API Enhancements
Enhanced Email Router
Location: src/server/api/routers/email.ts
The email API has been enhanced to support custom content and HTML emails.
New Parameters:
customSubject: Optional custom email subjectcustomContent: Optional custom email content (HTML)useHtml: Boolean flag to send HTML email
Features:
- HTML email support with plain text fallback
- Custom subject lines
- Rich HTML content
- Automatic PDF attachment
- BCC to business email
- Comprehensive error handling
Usage Examples
Basic Usage
import { EnhancedSendInvoiceButton } from "~/components/forms/enhanced-send-invoice-button";
// Replace existing send buttons
<EnhancedSendInvoiceButton
invoiceId={invoice.id}
className="w-full"
showResend={invoice.status === "sent"}
/>
Custom Dialog
import { SendEmailDialog } from "~/components/forms/send-email-dialog";
<SendEmailDialog
invoiceId={invoice.id}
invoice={invoiceData}
trigger={<Button>Send Custom Email</Button>}
onEmailSent={() => console.log("Email sent!")}
/>
Standalone Components
import { EmailComposer } from "~/components/forms/email-composer";
import { EmailPreview } from "~/components/forms/email-preview";
// Use individual components for custom implementations
<EmailComposer
subject={subject}
onSubjectChange={setSubject}
content={content}
onContentChange={setContent}
fromEmail="you@business.com"
toEmail="client@company.com"
/>
<EmailPreview
subject={subject}
content={content}
fromEmail="you@business.com"
toEmail="client@company.com"
invoice={invoiceData}
/>
Technical Details
Dependencies
- @tiptap/react: Rich text editor framework
- @tiptap/starter-kit: Basic editor functionality
- @tiptap/extension-text-style: Text styling support
- @tiptap/extension-color: Color picker support
- @tiptap/extension-text-align: Text alignment options
Email Templates
The system generates professional HTML email templates with:
- Responsive design
- Brand colors (green theme)
- Invoice summary cards
- Proper typography
- Attachment indicators
- Footer branding
Error Handling
Comprehensive error handling for:
- Invalid email addresses
- Missing client information
- Resend API issues
- Network connectivity problems
- Domain verification issues
- Rate limiting
Usage in Application
The enhanced email functionality is integrated throughout the application:
- Invoice view pages with enhanced send buttons
- Full-page email composition interface
- Professional email templates with invoice integration
- Comprehensive preview and confirmation workflow
Migration Guide
From Basic Send Button
Replace existing SendInvoiceButton components with EnhancedSendInvoiceButton:
// Before
import { SendInvoiceButton } from "../_components/send-invoice-button";
<SendInvoiceButton invoiceId={invoice.id} />
// After
import { EnhancedSendInvoiceButton } from "~/components/forms/enhanced-send-invoice-button";
<EnhancedSendInvoiceButton invoiceId={invoice.id} />
API Compatibility
The enhanced email API is backward compatible with existing implementations. New features are opt-in through additional parameters.
Security Considerations
- Input Sanitization: All user input is validated and sanitized
- Email Validation: Comprehensive email format validation
- Rate Limiting: Built-in protection against spam
- Domain Verification: Resend domain verification required
- Authentication: All email operations require valid authentication
Performance
- SSR Optimization: Proper server-side rendering with hydration safeguards
- Efficient Loading: Content initializes immediately without requiring user interaction
- Optimized Rendering: Efficient React component updates with proper state management
- Caching: Proper query caching for invoice data
- Error Boundaries: Graceful error handling without crashes
- Responsive Design: Optimized layouts for all screen sizes with text overflow prevention
Navigation
Send Email Page
Access the email interface by clicking "Send Invoice" on any invoice:
/dashboard/invoices/[id]/send- Full-page email composition- Two-tab interface: Compose ↔ Preview
- Send action available from sidebar and floating action bar
- Fully responsive design with proper text wrapping and overflow handling
- Professional layout with sidebar containing:
- Invoice summary (number, client, date, status)
- Email details (from, to, subject, attachment info)
- Context-aware action buttons
- Auto-filled message with proper HTML formatting and paragraph spacing
- Immediate content loading without requiring tab navigation
Fixes and Improvements
Recent fixes and enhancements:
- SSR Compatibility: Fixed Tiptap hydration issues for reliable server-side rendering
- Content Loading: Improved email content initialization for immediate display
- Responsive Design: Enhanced text wrapping and overflow handling for all screen sizes
- UI/UX: Removed confirmation tab in favor of action-based sending approach
- Performance: Optimized state management for faster content loading
Future Enhancements
Planned improvements include:
- Email templates library
- Scheduling email delivery
- Email tracking and read receipts
- Bulk email sending
- Custom email signatures
- Integration with email marketing tools
Support
For issues or questions related to the email system:
- Check the console for error messages
- Verify Resend API configuration
- Ensure client email addresses are valid
- Review domain verification status
- Check network connectivity
Changelog
Version 1.0.0
- Initial release of enhanced email system
- Rich text editor integration
- Email preview functionality
- Send confirmation workflow
- HTML email support
- Professional templates
- Demo page implementation