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:
74
email_templates/reports/monthly_data.html
Normal file
74
email_templates/reports/monthly_data.html
Normal file
@@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Monthly Report - Data Heavy</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #f8fafc; font-family: 'Roboto', 'Helvetica', sans-serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 20px;">
|
||||
<!-- Header -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="max-width: 800px; margin-bottom: 20px;">
|
||||
<tr>
|
||||
<td style="padding: 20px 0;">
|
||||
<h1 style="margin: 0; color: #0f172a; font-size: 20px; font-weight: 500;">
|
||||
<span style="color: #3b82f6; font-weight: 700;">Smooth</span>Schedule Report
|
||||
</h1>
|
||||
</td>
|
||||
<td align="right">
|
||||
<p style="margin: 0; color: #64748b; font-size: 14px;">{{TODAY}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Main Card -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="max-width: 800px; background-color: #ffffff; border: 1px solid #e2e8f0; border-radius: 8px;">
|
||||
<tr>
|
||||
<td style="padding: 30px;">
|
||||
<h2 style="margin: 0 0 20px; color: #0f172a; font-size: 18px;">Performance Summary</h2>
|
||||
|
||||
<!-- Chart Placeholder -->
|
||||
<img src="https://placehold.co/740x200/f1f5f9/94a3b8?text=Interactive+Revenue+Chart&font=roboto" alt="Chart" style="width: 100%; height: auto; border-radius: 4px; margin-bottom: 30px;">
|
||||
|
||||
<!-- Data Grid -->
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse;">
|
||||
<tr style="background-color: #f8fafc;">
|
||||
<th style="text-align: left; padding: 12px; border-bottom: 2px solid #e2e8f0; color: #475569; font-size: 12px; text-transform: uppercase;">Metric</th>
|
||||
<th style="text-align: right; padding: 12px; border-bottom: 2px solid #e2e8f0; color: #475569; font-size: 12px; text-transform: uppercase;">Value</th>
|
||||
<th style="text-align: right; padding: 12px; border-bottom: 2px solid #e2e8f0; color: #475569; font-size: 12px; text-transform: uppercase;">Change</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; color: #1e293b;">Total Revenue</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #1e293b; font-weight: 600;">$12,450</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #10b981;">+12% ▲</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; color: #1e293b;">Appointments</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #1e293b; font-weight: 600;">142</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #10b981;">+5% ▲</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; color: #1e293b;">New Customers</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #1e293b; font-weight: 600;">28</td>
|
||||
<td style="padding: 12px; border-bottom: 1px solid #e2e8f0; text-align: right; color: #ef4444;">-2% ▼</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p style="margin: 20px 0 0; color: #64748b; font-size: 14px;">
|
||||
This report was automatically generated for <strong>{{BUSINESS_NAME}}</strong>.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="background-color: #f1f5f9; padding: 15px 30px; text-align: center; border-top: 1px solid #e2e8f0;">
|
||||
<a href="#" style="color: #3b82f6; font-size: 14px; text-decoration: none; font-weight: 500;">View Full Report in Dashboard →</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
99
email_templates/reports/staff_leaderboard.html
Normal file
99
email_templates/reports/staff_leaderboard.html
Normal file
@@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Report - Staff Leaderboard</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #f3f4f6; font-family: 'Arial', sans-serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 40px 20px;">
|
||||
<table width="600" cellpadding="0" cellspacing="0" role="presentation" style="background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);">
|
||||
<!-- Header -->
|
||||
<tr>
|
||||
<td style="padding: 30px; border-bottom: 1px solid #e5e7eb;">
|
||||
<h1 style="margin: 0; color: #111827; font-size: 20px;">Staff Performance</h1>
|
||||
<p style="margin: 5px 0 0; color: #6b7280; font-size: 14px;">Top performers for {{TODAY}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- List -->
|
||||
<tr>
|
||||
<td style="padding: 0 30px;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<!-- Item 1 -->
|
||||
<tr>
|
||||
<td style="padding: 20px 0; border-bottom: 1px solid #f3f4f6;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td width="50">
|
||||
<img src="https://placehold.co/40x40/10b981/ffffff?text=1" alt="Rank 1" style="border-radius: 50%; display: block;">
|
||||
</td>
|
||||
<td>
|
||||
<p style="margin: 0; font-weight: 600; color: #111827;">Sarah Johnson</p>
|
||||
<p style="margin: 2px 0 0; font-size: 12px; color: #6b7280;">32 Appointments</p>
|
||||
</td>
|
||||
<td align="right" width="100">
|
||||
<p style="margin: 0; font-weight: 700; color: #10b981;">$3,200</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Item 2 -->
|
||||
<tr>
|
||||
<td style="padding: 20px 0; border-bottom: 1px solid #f3f4f6;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td width="50">
|
||||
<img src="https://placehold.co/40x40/3b82f6/ffffff?text=2" alt="Rank 2" style="border-radius: 50%; display: block;">
|
||||
</td>
|
||||
<td>
|
||||
<p style="margin: 0; font-weight: 600; color: #111827;">Mike Chen</p>
|
||||
<p style="margin: 2px 0 0; font-size: 12px; color: #6b7280;">28 Appointments</p>
|
||||
</td>
|
||||
<td align="right" width="100">
|
||||
<p style="margin: 0; font-weight: 700; color: #111827;">$2,850</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Item 3 -->
|
||||
<tr>
|
||||
<td style="padding: 20px 0;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td width="50">
|
||||
<img src="https://placehold.co/40x40/6b7280/ffffff?text=3" alt="Rank 3" style="border-radius: 50%; display: block;">
|
||||
</td>
|
||||
<td>
|
||||
<p style="margin: 0; font-weight: 600; color: #111827;">Jessica Williams</p>
|
||||
<p style="margin: 2px 0 0; font-size: 12px; color: #6b7280;">25 Appointments</p>
|
||||
</td>
|
||||
<td align="right" width="100">
|
||||
<p style="margin: 0; font-weight: 700; color: #111827;">$2,100</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="background-color: #f9fafb; padding: 20px 30px; border-radius: 0 0 12px 12px;">
|
||||
<p style="margin: 0; font-size: 13px; color: #6b7280; text-align: center;">
|
||||
Great work team! 🚀
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
73
email_templates/reports/weekly_cards.html
Normal file
73
email_templates/reports/weekly_cards.html
Normal file
@@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Report - Weekly Snapshot</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; background-color: #1e293b; font-family: 'Roboto', sans-serif;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center" style="padding: 40px 20px;">
|
||||
<table width="600" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<!-- Header -->
|
||||
<tr>
|
||||
<td style="padding-bottom: 30px;">
|
||||
<h1 style="margin: 0; color: #ffffff; font-size: 24px;">Weekly Snapshot</h1>
|
||||
<p style="margin: 5px 0 0; color: #94a3b8;">Week of {{TODAY}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Stats Grid -->
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<!-- Card 1 -->
|
||||
<td width="290" style="background-color: #334155; border-radius: 8px; padding: 25px; vertical-align: top;">
|
||||
<img src="https://placehold.co/40x40/3b82f6/ffffff?text=$" alt="Revenue" style="width: 40px; height: 40px; border-radius: 8px; margin-bottom: 15px;">
|
||||
<p style="margin: 0 0 5px; color: #94a3b8; font-size: 13px; text-transform: uppercase;">Revenue</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">$4,250</p>
|
||||
<p style="margin: 5px 0 0; color: #4ade80; font-size: 12px;">↑ 15% vs last week</p>
|
||||
</td>
|
||||
<td width="20"></td>
|
||||
<!-- Card 2 -->
|
||||
<td width="290" style="background-color: #334155; border-radius: 8px; padding: 25px; vertical-align: top;">
|
||||
<img src="https://placehold.co/40x40/8b5cf6/ffffff?text=#" alt="Bookings" style="width: 40px; height: 40px; border-radius: 8px; margin-bottom: 15px;">
|
||||
<p style="margin: 0 0 5px; color: #94a3b8; font-size: 13px; text-transform: uppercase;">Bookings</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">84</p>
|
||||
<p style="margin: 5px 0 0; color: #94a3b8; font-size: 12px;">→ Stable</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td height="20"></td></tr>
|
||||
<tr>
|
||||
<!-- Card 3 -->
|
||||
<td width="290" style="background-color: #334155; border-radius: 8px; padding: 25px; vertical-align: top;">
|
||||
<img src="https://placehold.co/40x40/f59e0b/ffffff?text=★" alt="Rating" style="width: 40px; height: 40px; border-radius: 8px; margin-bottom: 15px;">
|
||||
<p style="margin: 0 0 5px; color: #94a3b8; font-size: 13px; text-transform: uppercase;">Avg Rating</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">4.9</p>
|
||||
</td>
|
||||
<td width="20"></td>
|
||||
<!-- Card 4 -->
|
||||
<td width="290" style="background-color: #334155; border-radius: 8px; padding: 25px; vertical-align: top;">
|
||||
<img src="https://placehold.co/40x40/ef4444/ffffff?text=!" alt="Cancellations" style="width: 40px; height: 40px; border-radius: 8px; margin-bottom: 15px;">
|
||||
<p style="margin: 0 0 5px; color: #94a3b8; font-size: 13px; text-transform: uppercase;">Cancellations</p>
|
||||
<p style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">3</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="padding-top: 40px; text-align: center;">
|
||||
<a href="#" style="color: #3b82f6; text-decoration: none; font-size: 14px;">View detailed analytics</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user