Tonne of updates

This commit is contained in:
2026-02-18 17:15:31 -07:00
parent 56e262ad8b
commit 1a1f12c45b
176 changed files with 12786 additions and 388 deletions

View File

@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New Response Submitted — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #d97706;
padding-bottom: 20px;
}
.logo {
color: #d97706;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #d97706;
}
.info-section {
background-color: #fffbeb;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #fde68a;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #92400e;
}
.btn {
display: inline-block;
padding: 14px 32px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #d97706, #b45309);
color: white;
}
.btn-container {
text-align: center;
margin: 24px 0;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">New Response Submitted</p>
</div>
<div class="content">
<p>A new response has been submitted to the response wall and is awaiting moderation:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Campaign:</span> {{CAMPAIGN_TITLE}}
</div>
<div class="info-item">
<span class="info-label">Representative:</span> {{REPRESENTATIVE_NAME}}
</div>
<div class="info-item">
<span class="info-label">Response Type:</span> {{RESPONSE_TYPE}}
</div>
<div class="info-item">
<span class="info-label">Submitted By:</span> {{SUBMITTER_NAME}}
</div>
</div>
<div class="btn-container">
<a href="{{ADMIN_URL}}" class="btn">Review Responses</a>
</div>
</div>
<div class="footer">
<p>This is an admin notification from <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,12 @@
{{ORGANIZATION_NAME}} — New Response Submitted
A new response has been submitted to the response wall and is awaiting moderation:
Campaign: {{CAMPAIGN_TITLE}}
Representative: {{REPRESENTATIVE_NAME}}
Response Type: {{RESPONSE_TYPE}}
Submitted By: {{SUBMITTER_NAME}}
Review responses: {{ADMIN_URL}}
— {{ORGANIZATION_NAME}}

View File

@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Shift Cancellation — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #dc3545;
padding-bottom: 20px;
}
.logo {
color: #dc3545;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #dc3545;
}
.info-section {
background-color: #fff5f5;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #fed7d7;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #9b2c2c;
}
.btn {
display: inline-block;
padding: 14px 32px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #dc3545, #b02a37);
color: white;
}
.btn-container {
text-align: center;
margin: 24px 0;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">Shift Cancellation</p>
</div>
<div class="content">
<p>A volunteer has cancelled their shift signup:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Shift:</span> {{SHIFT_TITLE}}
</div>
<div class="info-item">
<span class="info-label">Date:</span> {{SHIFT_DATE}}
</div>
<div class="info-item">
<span class="info-label">Volunteer:</span> {{VOLUNTEER_NAME}}
</div>
<div class="info-item">
<span class="info-label">Email:</span> {{VOLUNTEER_EMAIL}}
</div>
<div class="info-item">
<span class="info-label">Source:</span> {{CANCELLATION_SOURCE}}
</div>
</div>
<div class="btn-container">
<a href="{{ADMIN_URL}}" class="btn">View in Admin</a>
</div>
</div>
<div class="footer">
<p>This is an admin notification from <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,13 @@
{{ORGANIZATION_NAME}} — Shift Cancellation
A volunteer has cancelled their shift signup:
Shift: {{SHIFT_TITLE}}
Date: {{SHIFT_DATE}}
Volunteer: {{VOLUNTEER_NAME}}
Email: {{VOLUNTEER_EMAIL}}
Source: {{CANCELLATION_SOURCE}}
View in admin: {{ADMIN_URL}}
— {{ORGANIZATION_NAME}}

View File

@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New Shift Signup — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #d97706;
padding-bottom: 20px;
}
.logo {
color: #d97706;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #d97706;
}
.info-section {
background-color: #fffbeb;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #fde68a;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #92400e;
}
.btn {
display: inline-block;
padding: 14px 32px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #d97706, #b45309);
color: white;
}
.btn-container {
text-align: center;
margin: 24px 0;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">New Shift Signup</p>
</div>
<div class="content">
<p>A volunteer has signed up for a shift:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Shift:</span> {{SHIFT_TITLE}}
</div>
<div class="info-item">
<span class="info-label">Date:</span> {{SHIFT_DATE}}
</div>
<div class="info-item">
<span class="info-label">Volunteer:</span> {{VOLUNTEER_NAME}}
</div>
<div class="info-item">
<span class="info-label">Email:</span> {{VOLUNTEER_EMAIL}}
</div>
<div class="info-item">
<span class="info-label">Source:</span> {{SIGNUP_SOURCE}}
</div>
</div>
<div class="btn-container">
<a href="{{ADMIN_URL}}" class="btn">View in Admin</a>
</div>
</div>
<div class="footer">
<p>This is an admin notification from <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,13 @@
{{ORGANIZATION_NAME}} — New Shift Signup
A volunteer has signed up for a shift:
Shift: {{SHIFT_TITLE}}
Date: {{SHIFT_DATE}}
Volunteer: {{VOLUNTEER_NAME}}
Email: {{VOLUNTEER_EMAIL}}
Source: {{SIGNUP_SOURCE}}
View in admin: {{ADMIN_URL}}
— {{ORGANIZATION_NAME}}

View File

@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Sign Requested — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #dc2626;
padding-bottom: 20px;
}
.logo {
color: #dc2626;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #dc2626;
}
.info-section {
background-color: #fef2f2;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #fecaca;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #991b1b;
}
.btn {
display: inline-block;
padding: 14px 32px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #dc2626, #b91c1c);
color: white;
}
.btn-container {
text-align: center;
margin: 24px 0;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">Sign Requested</p>
</div>
<div class="content">
<p>A resident has requested a yard sign during canvassing:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Address:</span> {{ADDRESS}}
</div>
<div class="info-item">
<span class="info-label">Sign Size:</span> {{SIGN_SIZE}}
</div>
<div class="info-item">
<span class="info-label">Canvasser:</span> {{VOLUNTEER_NAME}}
</div>
<div class="info-item">
<span class="info-label">Shift:</span> {{SHIFT_TITLE}}
</div>
</div>
<div class="btn-container">
<a href="{{ADMIN_URL}}" class="btn">View in Admin</a>
</div>
</div>
<div class="footer">
<p>This is an admin notification from <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,12 @@
{{ORGANIZATION_NAME}} — Sign Requested
A resident has requested a yard sign during canvassing:
Address: {{ADDRESS}}
Sign Size: {{SIGN_SIZE}}
Canvasser: {{VOLUNTEER_NAME}}
Shift: {{SHIFT_TITLE}}
View in admin: {{ADMIN_URL}}
— {{ORGANIZATION_NAME}}

View File

@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Signup Cancelled — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #6b7280;
padding-bottom: 20px;
}
.logo {
color: #6b7280;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #6b7280;
}
.info-section {
background-color: #f9fafb;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #e5e7eb;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #374151;
}
.btn {
display: inline-block;
padding: 14px 32px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #2563eb, #1d4ed8);
color: white;
}
.btn-container {
text-align: center;
margin: 24px 0;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">Signup Cancelled</p>
</div>
<div class="content">
<p>Hi {{VOLUNTEER_NAME}},</p>
<p>Your shift signup has been cancelled. Here are the details:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Shift:</span> {{SHIFT_TITLE}}
</div>
<div class="info-item">
<span class="info-label">Date:</span> {{SHIFT_DATE}}
</div>
<div class="info-item">
<span class="info-label">Time:</span> {{SHIFT_TIME}}
</div>
</div>
<p>If this was a mistake, you can sign up again:</p>
<div class="btn-container">
<a href="{{SIGNUP_URL}}" class="btn">View Available Shifts</a>
</div>
</div>
<div class="footer">
<p>This email was sent by <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,13 @@
{{ORGANIZATION_NAME}} — Signup Cancelled
Hi {{VOLUNTEER_NAME}},
Your shift signup has been cancelled:
Shift: {{SHIFT_TITLE}}
Date: {{SHIFT_DATE}}
Time: {{SHIFT_TIME}}
If this was a mistake, you can sign up again: {{SIGNUP_URL}}
— {{ORGANIZATION_NAME}}

View File

@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvass Session Summary — {{ORGANIZATION_NAME}}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.container {
background-color: #f9f9f9;
border-radius: 8px;
padding: 30px;
border: 1px solid #e0e0e0;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #2563eb;
padding-bottom: 20px;
}
.logo {
color: #2563eb;
font-size: 24px;
font-weight: bold;
}
.content {
background-color: white;
padding: 25px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid #2563eb;
}
.info-section {
background-color: #eff6ff;
padding: 15px;
border-radius: 4px;
margin: 16px 0;
border: 1px solid #bfdbfe;
}
.info-item {
margin: 6px 0;
}
.info-label {
font-weight: bold;
color: #1e40af;
}
.stats-grid {
display: flex;
gap: 12px;
flex-wrap: wrap;
margin: 16px 0;
}
.stat-box {
flex: 1;
min-width: 100px;
background-color: #f0f9ff;
border: 1px solid #bae6fd;
border-radius: 6px;
padding: 12px;
text-align: center;
}
.stat-number {
font-size: 24px;
font-weight: bold;
color: #2563eb;
}
.stat-label {
font-size: 12px;
color: #64748b;
margin-top: 4px;
}
.outcome-table {
width: 100%;
border-collapse: collapse;
margin: 16px 0;
}
.outcome-table th, .outcome-table td {
padding: 8px 12px;
text-align: left;
border-bottom: 1px solid #e2e8f0;
}
.outcome-table th {
background-color: #f8fafc;
font-weight: bold;
color: #475569;
}
.footer {
text-align: center;
font-size: 12px;
color: #6c757d;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="logo">{{ORGANIZATION_NAME}}</div>
<p style="margin: 10px 0 0 0; color: #6c757d;">Canvass Session Summary</p>
</div>
<div class="content">
<p>Great work, {{VOLUNTEER_NAME}}! Here's a summary of your canvassing session:</p>
<div class="info-section">
<div class="info-item">
<span class="info-label">Area:</span> {{CUT_NAME}}
</div>
<div class="info-item">
<span class="info-label">Date:</span> {{SESSION_DATE}}
</div>
</div>
<div class="stats-grid">
<div class="stat-box">
<div class="stat-number">{{VISIT_COUNT}}</div>
<div class="stat-label">Doors Visited</div>
</div>
<div class="stat-box">
<div class="stat-number">{{DURATION_MINUTES}}</div>
<div class="stat-label">Minutes</div>
</div>
<div class="stat-box">
<div class="stat-number">{{DISTANCE_KM}}</div>
<div class="stat-label">km Walked</div>
</div>
</div>
{{OUTCOME_BREAKDOWN}}
</div>
<div class="footer">
<p>Thank you for volunteering with <strong>{{ORGANIZATION_NAME}}</strong></p>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,13 @@
{{ORGANIZATION_NAME}} — Canvass Session Summary
Great work, {{VOLUNTEER_NAME}}! Here's a summary of your canvassing session:
Area: {{CUT_NAME}}
Date: {{SESSION_DATE}}
Doors Visited: {{VISIT_COUNT}}
Duration: {{DURATION_MINUTES}} minutes
Distance: {{DISTANCE_KM}} km
{{OUTCOME_BREAKDOWN}}
Thank you for volunteering with {{ORGANIZATION_NAME}}!