feat: Email templates, bulk delete, communication credits, plan features
- Add email template presets for Browse Templates tab (12 templates) - Add bulk selection and deletion for My Templates tab - Add communication credits system with Twilio integration - Add payment views for credit purchases and auto-reload - Add SMS reminder and masked calling plan permissions - Fix appointment status mapping (frontend/backend mismatch) - Clear masquerade stack on login/logout for session hygiene - Update platform settings with credit configuration - Add new migrations for Twilio and Stripe payment fields 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
72
email_templates/confirmation/bold_dark.html
Normal file
72
email_templates/confirmation/bold_dark.html
Normal file
@@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Appointment Confirmed - Bold</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #000000; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 20px;">
|
||||
<table width="600" cellpadding="0" cellspacing="0" role="presentation" style="background-color: #111111; border-radius: 24px; overflow: hidden;">
|
||||
<!-- Header Image -->
|
||||
<tr>
|
||||
<td style="position: relative;">
|
||||
<img src="https://placehold.co/600x300/db2777/ffffff?text=CONFIRMED&font=montserrat" alt="Confirmed" style="width: 100%; height: auto; display: block;">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Content -->
|
||||
<tr>
|
||||
<td style="padding: 48px 40px;">
|
||||
<h1 style="margin: 0 0 16px; color: #ffffff; font-size: 32px; font-weight: 800; letter-spacing: -0.03em;">
|
||||
Ready for you, {{CUSTOMER_NAME}}.
|
||||
</h1>
|
||||
<p style="margin: 0 0 40px; color: #a1a1aa; font-size: 18px; line-height: 1.5;">
|
||||
Your slot is locked in. We've got everything prepared for your upcoming visit.
|
||||
</p>
|
||||
|
||||
<!-- Grid Layout for Details -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td width="48%" style="background-color: #18181b; padding: 24px; border-radius: 16px; vertical-align: top;">
|
||||
<p style="margin: 0 0 8px; color: #db2777; font-size: 12px; font-weight: 700; text-transform: uppercase;">Service</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 16px; font-weight: 600;">{{APPOINTMENT_SERVICE}}</p>
|
||||
</td>
|
||||
<td width="4%"></td>
|
||||
<td width="48%" style="background-color: #18181b; padding: 24px; border-radius: 16px; vertical-align: top;">
|
||||
<p style="margin: 0 0 8px; color: #db2777; font-size: 12px; font-weight: 700; text-transform: uppercase;">When</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 16px; font-weight: 600;">{{APPOINTMENT_DATE}}<br><span style="color: #a1a1aa; font-weight: 400;">{{APPOINTMENT_TIME}}</span></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- QR Code Placeholder -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="margin-top: 40px;">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<div style="background-color: #ffffff; padding: 16px; border-radius: 12px; display: inline-block;">
|
||||
<img src="https://placehold.co/150x150/000000/ffffff?text=QR+Code&font=roboto" alt="Check-in QR" style="display: block;">
|
||||
</div>
|
||||
<p style="margin: 16px 0 0; color: #52525b; font-size: 12px;">Scan at front desk to check in</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="padding: 0 40px 40px; text-align: center;">
|
||||
<p style="margin: 0; color: #52525b; font-size: 14px;">
|
||||
{{BUSINESS_NAME}} • {{BUSINESS_PHONE}}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
82
email_templates/confirmation/classic_serif.html
Normal file
82
email_templates/confirmation/classic_serif.html
Normal file
@@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Appointment Confirmed - Classic</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #faf9f6; font-family: 'Georgia', 'Times New Roman', serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 40px 0;">
|
||||
<table width="600" cellpadding="0" cellspacing="0" role="presentation" style="background-color: #ffffff; border: 1px solid #e7e5e4; border-top: 4px solid #1c1917;">
|
||||
<!-- Header -->
|
||||
<tr>
|
||||
<td style="padding: 40px 40px 20px; text-align: center;">
|
||||
<img src="https://placehold.co/120x60/1c1917/ffffff?text=LOGO&font=playfair-display" alt="Logo" style="height: 60px; width: auto;">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Content -->
|
||||
<tr>
|
||||
<td style="padding: 20px 60px 40px;">
|
||||
<h1 style="margin: 0 0 24px; color: #1c1917; font-size: 28px; font-weight: 400; text-align: center; letter-spacing: -0.02em;">
|
||||
Appointment Confirmation
|
||||
</h1>
|
||||
<p style="margin: 0 0 24px; color: #44403c; font-size: 16px; line-height: 1.8; text-align: center;">
|
||||
Dear {{CUSTOMER_NAME}},<br><br>
|
||||
We are pleased to confirm your appointment with {{BUSINESS_NAME}}. Please review the details below.
|
||||
</p>
|
||||
|
||||
<!-- Divider -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td style="border-bottom: 1px solid #e7e5e4; padding-bottom: 20px; margin-bottom: 20px;"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Details -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="margin-top: 20px;">
|
||||
<tr>
|
||||
<td style="padding: 12px 0; color: #78716c; font-family: 'Arial', sans-serif; font-size: 12px; text-transform: uppercase; letter-spacing: 0.1em;">Service</td>
|
||||
<td style="padding: 12px 0; text-align: right; color: #1c1917; font-size: 16px;">{{APPOINTMENT_SERVICE}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-bottom: 1px solid #f5f5f4; padding: 0;" colspan="2"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px 0; color: #78716c; font-family: 'Arial', sans-serif; font-size: 12px; text-transform: uppercase; letter-spacing: 0.1em;">Date</td>
|
||||
<td style="padding: 12px 0; text-align: right; color: #1c1917; font-size: 16px;">{{APPOINTMENT_DATE}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-bottom: 1px solid #f5f5f4; padding: 0;" colspan="2"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px 0; color: #78716c; font-family: 'Arial', sans-serif; font-size: 12px; text-transform: uppercase; letter-spacing: 0.1em;">Time</td>
|
||||
<td style="padding: 12px 0; text-align: right; color: #1c1917; font-size: 16px;">{{APPOINTMENT_TIME}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Map / Location Image Placeholder -->
|
||||
<div style="margin-top: 30px; border: 1px solid #e7e5e4; padding: 4px;">
|
||||
<img src="https://placehold.co/500x150/f5f5f4/a8a29e?text=Location+Map&font=lora" alt="Location" style="width: 100%; height: auto; display: block;">
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="background-color: #1c1917; padding: 30px; text-align: center;">
|
||||
<p style="margin: 0; color: #d6d3d1; font-family: 'Arial', sans-serif; font-size: 13px; line-height: 1.6;">
|
||||
{{BUSINESS_NAME}}<br>
|
||||
{{BUSINESS_PHONE}} | {{BUSINESS_EMAIL}}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
93
email_templates/confirmation/modern_blue.html
Normal file
93
email_templates/confirmation/modern_blue.html
Normal file
@@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Appointment Confirmed - Modern</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #f3f4f6; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 40px 0;">
|
||||
<table width="600" cellpadding="0" cellspacing="0" role="presentation" style="background-color: #ffffff; border-radius: 16px; overflow: hidden; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);">
|
||||
<!-- Hero Image Section -->
|
||||
<tr>
|
||||
<td style="background-color: #4f46e5; text-align: center;">
|
||||
<!-- Using a placeholder for the hero image -->
|
||||
<img src="https://placehold.co/600x200/4f46e5/ffffff?text=Appointment+Confirmed&font=roboto" alt="Appointment Confirmed" style="width: 100%; height: auto; display: block;">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Content Section -->
|
||||
<tr>
|
||||
<td style="padding: 40px;">
|
||||
<h1 style="margin: 0 0 20px; color: #111827; font-size: 24px; font-weight: 700; line-height: 1.2;">
|
||||
You're All Set, {{CUSTOMER_NAME}}!
|
||||
</h1>
|
||||
<p style="margin: 0 0 24px; color: #4b5563; font-size: 16px; line-height: 1.6;">
|
||||
We are excited to see you at <strong>{{BUSINESS_NAME}}</strong>. Your appointment has been confirmed for the following time:
|
||||
</p>
|
||||
|
||||
<!-- Appointment Card -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background-color: #f9fafb; border-radius: 12px; border: 1px solid #e5e7eb;">
|
||||
<tr>
|
||||
<td style="padding: 24px;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td style="padding-bottom: 16px; border-bottom: 1px solid #e5e7eb;">
|
||||
<p style="margin: 0; color: #6b7280; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600;">Service</p>
|
||||
<p style="margin: 4px 0 0; color: #111827; font-size: 18px; font-weight: 600;">{{APPOINTMENT_SERVICE}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding-top: 16px;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
<p style="margin: 0; color: #6b7280; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600;">Date</p>
|
||||
<p style="margin: 4px 0 0; color: #111827; font-size: 16px;">{{APPOINTMENT_DATE}}</p>
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
<p style="margin: 0; color: #6b7280; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600;">Time</p>
|
||||
<p style="margin: 4px 0 0; color: #111827; font-size: 16px;">{{APPOINTMENT_TIME}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- CTA Button -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="margin-top: 32px;">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="#" style="display: inline-block; background-color: #4f46e5; color: #ffffff; font-size: 16px; font-weight: 600; text-decoration: none; padding: 12px 32px; border-radius: 8px; transition: background-color 0.2s;">
|
||||
Manage Appointment
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="background-color: #1f2937; padding: 32px; text-align: center;">
|
||||
<img src="https://placehold.co/40x40/ffffff/1f2937?text=L" alt="Logo" style="width: 40px; height: 40px; border-radius: 8px; margin-bottom: 16px;">
|
||||
<p style="margin: 0 0 8px; color: #9ca3af; font-size: 14px;">
|
||||
{{BUSINESS_NAME}}
|
||||
</p>
|
||||
<p style="margin: 0; color: #6b7280; font-size: 12px;">
|
||||
{{BUSINESS_PHONE}} • {{BUSINESS_EMAIL}}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user