Align prod schema and deploy tooling

This commit is contained in:
jjbrunton committed 2026-01-24 20:16:01 +00:00
1 parent d2db86ec7f
commit 7e2e723880
105 files changed
+19014 -131

No files matched your search

+264
View File
@@ -0,0 +1,264 @@
# Supabase Project Configuration Module
#
# This module manages Supabase project settings including API, Auth, Network, and Storage.
# Environment-specific settings (SMTP, rate limits) are controlled via input variables.
resource "supabase_settings" "main" {
project_ref = var.project_ref
# API Settings
api = jsonencode({
db_schema = "public,graphql_public"
db_extra_search_path = "public, extensions"
max_rows = 1000
})
# Auth Settings
auth = jsonencode({
# Site URL and redirects
site_url = "https://sauci.app"
uri_allow_list = "app.sauci://**,app.sauci://(auth)/login"
# Signup and auth settings
disable_signup = false
external_anonymous_users_enabled = true
external_email_enabled = true
external_phone_enabled = false
# OAuth providers
external_google_enabled = true
external_google_client_id = "764866133492-57iilbc72t1urtmurgioci9tne5l6j67.apps.googleusercontent.com,764866133492-4g566mrb8tm5uti4ejub6oogcvnln7kc.apps.googleusercontent.com,764866133492-e78o2rh3rdjc4rfj2j6r2j77b065kggm.apps.googleusercontent.com"
external_google_email_optional = false
external_google_skip_nonce_check = false
external_apple_enabled = true
external_apple_client_id = "com.sauci.app"
external_apple_email_optional = false
# Disabled OAuth providers (with email_optional settings)
external_azure_enabled = false
external_azure_email_optional = false
external_bitbucket_enabled = false
external_bitbucket_email_optional = false
external_discord_enabled = false
external_discord_email_optional = false
external_facebook_enabled = false
external_facebook_email_optional = false
external_figma_enabled = false
external_figma_email_optional = false
external_github_enabled = false
external_github_email_optional = false
external_gitlab_enabled = false
external_gitlab_email_optional = false
external_kakao_enabled = false
external_kakao_email_optional = false
external_keycloak_enabled = false
external_keycloak_email_optional = false
external_linkedin_oidc_enabled = false
external_linkedin_oidc_email_optional = false
external_notion_enabled = false
external_notion_email_optional = false
external_slack_enabled = false
external_slack_email_optional = false
external_slack_oidc_enabled = false
external_slack_oidc_email_optional = false
external_spotify_enabled = false
external_spotify_email_optional = false
external_twitch_enabled = false
external_twitch_email_optional = false
external_twitter_enabled = false
external_twitter_email_optional = false
external_workos_enabled = false
external_zoom_enabled = false
external_zoom_email_optional = false
external_web3_ethereum_enabled = false
external_web3_solana_enabled = false
# JWT settings
jwt_exp = 3600
refresh_token_rotation_enabled = true
security_refresh_token_reuse_interval = 10
# Session settings
sessions_inactivity_timeout = 0
sessions_single_per_user = false
sessions_timebox = 0
# API settings
api_max_request_duration = 10
db_max_pool_size = 10
db_max_pool_size_unit = "connections"
# Password settings
password_min_length = 6
password_hibp_enabled = false
# Rate limits (rate_limit_email_sent requires custom SMTP in production)
rate_limit_anonymous_users = 30
rate_limit_email_sent = var.is_production ? 25 : 3
rate_limit_otp = 30
rate_limit_sms_sent = 30
rate_limit_token_refresh = 150
rate_limit_verify = 30
rate_limit_web3 = 30
# MFA settings
mfa_max_enrolled_factors = 10
mfa_totp_enroll_enabled = true
mfa_totp_verify_enabled = true
mfa_phone_enroll_enabled = false
mfa_phone_verify_enabled = false
mfa_phone_max_frequency = 5
mfa_phone_otp_length = 6
mfa_phone_template = "Your code is {{ .Code }}"
mfa_web_authn_enroll_enabled = false
mfa_web_authn_verify_enabled = false
# SAML
saml_enabled = false
# Security settings
security_captcha_enabled = false
security_captcha_provider = "hcaptcha"
security_manual_linking_enabled = true
security_update_password_require_reauthentication = false
# Email/mailer settings
mailer_autoconfirm = false
mailer_allow_unverified_email_sign_ins = false
mailer_secure_email_change_enabled = true
mailer_otp_exp = 3600
mailer_otp_length = 8
# Mailer notifications
mailer_notifications_email_changed_enabled = false
mailer_notifications_identity_linked_enabled = false
mailer_notifications_identity_unlinked_enabled = false
mailer_notifications_mfa_factor_enrolled_enabled = false
mailer_notifications_mfa_factor_unenrolled_enabled = false
mailer_notifications_password_changed_enabled = false
mailer_notifications_phone_changed_enabled = false
# Email subjects
mailer_subjects_confirmation = "Confirm Your Signup"
mailer_subjects_email_change = "sauci@jbrunton.co.uk"
mailer_subjects_email_changed_notification = "Your email address has been changed"
mailer_subjects_identity_linked_notification = "A new identity has been linked"
mailer_subjects_identity_unlinked_notification = "An identity has been unlinked"
mailer_subjects_invite = "You have been invited"
mailer_subjects_magic_link = "Your Magic Link"
mailer_subjects_mfa_factor_enrolled_notification = "A new MFA factor has been enrolled"
mailer_subjects_mfa_factor_unenrolled_notification = "An MFA factor has been unenrolled"
mailer_subjects_password_changed_notification = "Your password has been changed"
mailer_subjects_phone_changed_notification = "Your phone number has been changed"
mailer_subjects_reauthentication = "Confirm Reauthentication"
mailer_subjects_recovery = "Reset Your Password"
# Email templates (loaded from templates directory)
mailer_templates_confirmation_content = file("${path.module}/templates/confirmation.html")
mailer_templates_email_change_content = file("${path.module}/templates/email_change.html")
mailer_templates_invite_content = file("${path.module}/templates/invite.html")
mailer_templates_magic_link_content = file("${path.module}/templates/magic_link.html")
mailer_templates_recovery_content = file("${path.module}/templates/recovery.html")
mailer_templates_reauthentication_content = "Enter the code: {{ .Token }}"
# Notification templates (simple HTML)
mailer_templates_email_changed_notification_content = <<-EOT
<h2>Your email address has been changed</h2>
<p>The email address for your account has been changed from {{ .OldEmail }} to {{ .Email }}.</p>
<p>If you did not make this change, please contact support.</p>
EOT
mailer_templates_identity_linked_notification_content = <<-EOT
<h2>A new identity has been linked</h2>
<p>A new identity ({{ .Provider }}) has been linked to your account {{ .Email }}.</p>
<p>If you did not make this change, please contact support immediately.</p>
EOT
mailer_templates_identity_unlinked_notification_content = <<-EOT
<h2>An identity has been unlinked</h2>
<p>An identity ({{ .Provider }}) has been unlinked from your account {{ .Email }}.</p>
<p>If you did not make this change, please contact support immediately.</p>
EOT
mailer_templates_mfa_factor_enrolled_notification_content = <<-EOT
<h2>A new MFA factor has been enrolled</h2>
<p>A new factor ({{ .FactorType }}) has been enrolled for your account {{ .Email }}.</p>
<p>If you did not make this change, please contact support immediately.</p>
EOT
mailer_templates_mfa_factor_unenrolled_notification_content = <<-EOT
<h2>An MFA factor has been unenrolled</h2>
<p>A factor ({{ .FactorType }}) has been unenrolled for your account {{ .Email }}.</p>
<p>If you did not make this change, please contact support immediately.</p>
EOT
mailer_templates_password_changed_notification_content = <<-EOT
<h2>Your password has been changed</h2>
<p>This is a confirmation that the password for your account {{ .Email }} has just been changed.</p>
<p>If you did not make this change, please contact support.</p>
EOT
mailer_templates_phone_changed_notification_content = <<-EOT
<h2>Your phone number has been changed</h2>
<p>The phone number for your account {{ .Email }} has been changed from {{ .OldPhone }} to {{ .Phone }}.</p>
<p>If you did not make this change, please contact support immediately.</p>
EOT
# SMS settings
sms_autoconfirm = false
sms_max_frequency = 5
sms_otp_exp = 60
sms_otp_length = 6
sms_provider = "twilio"
sms_template = "Your code is {{ .Code }}"
# SMTP settings (only for production - requires custom SMTP configured)
smtp_admin_email = var.is_production ? "team@send.sauci.app" : null
smtp_host = var.is_production ? "smtp.resend.com" : null
smtp_max_frequency = var.is_production ? 1 : null
smtp_port = var.is_production ? "465" : null
smtp_sender_name = var.is_production ? "Sauci App" : null
smtp_user = var.is_production ? "resend" : null
# Hook settings (only include hooks available on current plan)
hook_after_user_created_enabled = false
hook_before_user_created_enabled = false
hook_custom_access_token_enabled = false
hook_send_email_enabled = false
hook_send_sms_enabled = false
# Note: hook_mfa_verification_attempt and hook_password_verification_attempt
# require Team plan or higher - omitted to avoid 402 errors
})
# Database Settings (empty - managed via migrations)
database = jsonencode({})
# Network Settings
network = jsonencode({
restrictions = ["0.0.0.0/0", "::/0"]
})
# Storage Settings
storage = jsonencode({
fileSizeLimit = 52428800 # 50MB
databasePoolMode = "recycled"
migrationVersion = "buckets-objects-grants-postgres"
capabilities = {
iceberg_catalog = true
list_v2 = true
}
features = {
imageTransformation = { enabled = true }
s3Protocol = { enabled = true }
icebergCatalog = {
enabled = true
maxCatalogs = 2
maxNamespaces = 10
maxTables = 10
}
vectorBuckets = {
enabled = false
maxBuckets = 10
maxIndexes = 5
}
}
external = {
upstreamTarget = "canary"
}
})
}
+9
View File
@@ -0,0 +1,9 @@
output "project_ref" {
description = "Supabase project reference"
value = var.project_ref
}
output "project_url" {
description = "Supabase project URL"
value = "https://${var.project_ref}.supabase.co"
}
@@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
<title>Confirm Your Email - Sauci</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<style>
table { border-collapse: collapse; }
td { font-family: Arial, sans-serif; }
</style>
<![endif]-->
<style>
body { margin: 0 !important; padding: 0 !important; }
table { border-spacing: 0 !important; border-collapse: collapse !important; }
td { padding: 0; }
img { border: 0; line-height: 100%; outline: none; text-decoration: none; }
a { text-decoration: none; }
@media only screen and (max-width: 600px) {
.email-container { width: 100% !important; }
.content-padding { padding-left: 20px !important; padding-right: 20px !important; }
}
</style>
</head>
<body style="margin: 0; padding: 0; word-spacing: normal; background-color: #0d0d1a;">
<div role="article" aria-roledescription="email" lang="en" style="text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #0d0d1a;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#0d0d1a">
<tr>
<td align="center">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 0 auto;" bgcolor="#0d0d1a">
<tr>
<td align="center" valign="top" bgcolor="#0d0d1a" style="background-color: #0d0d1a;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="520" class="email-container" style="margin: 0 auto;">
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
<!-- Logo Section -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 0 20px 24px 20px;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#e94560">
<tr>
<td align="center" style="padding: 16px 40px; background-color: #e94560;">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
<tr>
<td align="center" bgcolor="#e94560" style="background-color: #e94560; padding: 16px 60px; border-radius: 8px;">
<span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 32px; font-weight: 700; color: #ffffff; letter-spacing: -0.5px;">Sauci</span>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- Main Card -->
<tr>
<td class="content-padding" style="padding: 0 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#1a1a2e" style="background-color: #1a1a2e; border-radius: 16px;">
<!-- Top Accent Bar -->
<tr>
<td height="4" bgcolor="#e94560" style="background-color: #e94560; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
<!-- Card Content -->
<tr>
<td style="padding: 40px 32px;" bgcolor="#1a1a2e">
<!-- Icon -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="center" valign="middle" width="56" height="56" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 28px; font-size: 24px;">
&#128140;
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Heading -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 16px;">
<h1 style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 24px; font-weight: 600; color: #ffffff; line-height: 1.3;">
Welcome to Sauci
</h1>
</td>
</tr>
</table>
<!-- Subtext -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; color: #9999aa; text-align: center; line-height: 1.6;">
You're one step away from deepening your connection. Confirm your email to start your journey together.
</p>
</td>
</tr>
</table>
<!-- CTA Button -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ .ConfirmationURL }}" style="height:48px;v-text-anchor:middle;width:180px;" arcsize="25%" strokecolor="#e94560" fillcolor="#e94560">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;">Confirm Email</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="{{ .ConfirmationURL }}" target="_blank" style="display: inline-block; padding: 14px 40px; background-color: #e94560; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; font-weight: 600; border-radius: 12px; text-decoration: none;">
Confirm Email
</a>
<!--<![endif]-->
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td height="1" bgcolor="#333344" style="background-color: #333344; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Alternative Link -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center; line-height: 1.6;">
If the button doesn't work, copy and paste this link into your browser:
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; text-align: center; word-break: break-all; line-height: 1.5;">
<a href="{{ .ConfirmationURL }}" style="color: #e94560; text-decoration: underline;">{{ .ConfirmationURL }}</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 32px 20px;">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center;">
This link will expire in 24 hours.
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; color: #555566; text-align: center;">
If you didn't create an account, you can safely ignore this email.
</p>
</td>
</tr>
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
@@ -0,0 +1,207 @@
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
<title>Confirm Email Change - Sauci</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<style>
table { border-collapse: collapse; }
td { font-family: Arial, sans-serif; }
</style>
<![endif]-->
<style>
body { margin: 0 !important; padding: 0 !important; }
table { border-spacing: 0 !important; border-collapse: collapse !important; }
td { padding: 0; }
img { border: 0; line-height: 100%; outline: none; text-decoration: none; }
a { text-decoration: none; }
@media only screen and (max-width: 600px) {
.email-container { width: 100% !important; }
.content-padding { padding-left: 20px !important; padding-right: 20px !important; }
}
</style>
</head>
<body style="margin: 0; padding: 0; word-spacing: normal; background-color: #0d0d1a;">
<div role="article" aria-roledescription="email" lang="en" style="text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #0d0d1a;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#0d0d1a">
<tr>
<td align="center">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 0 auto;" bgcolor="#0d0d1a">
<tr>
<td align="center" valign="top" bgcolor="#0d0d1a" style="background-color: #0d0d1a;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="520" class="email-container" style="margin: 0 auto;">
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
<!-- Logo Section -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 0 20px 24px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
<tr>
<td align="center" bgcolor="#e94560" style="background-color: #e94560; padding: 16px 60px; border-radius: 8px;">
<span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 32px; font-weight: 700; color: #ffffff; letter-spacing: -0.5px;">Sauci</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- Main Card -->
<tr>
<td class="content-padding" style="padding: 0 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#1a1a2e" style="background-color: #1a1a2e; border-radius: 16px;">
<!-- Top Accent Bar -->
<tr>
<td height="4" bgcolor="#e94560" style="background-color: #e94560; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
<!-- Card Content -->
<tr>
<td style="padding: 40px 32px;" bgcolor="#1a1a2e">
<!-- Icon -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="center" valign="middle" width="56" height="56" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 28px; font-size: 24px;">
&#9993;
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Heading -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 16px;">
<h1 style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 24px; font-weight: 600; color: #ffffff; line-height: 1.3;">
Confirm Email Change
</h1>
</td>
</tr>
</table>
<!-- Subtext -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; color: #9999aa; text-align: center; line-height: 1.6;">
You requested to change your email address. Click the button below to confirm this change.
</p>
</td>
</tr>
</table>
<!-- CTA Button -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ .ConfirmationURL }}" style="height:48px;v-text-anchor:middle;width:200px;" arcsize="25%" strokecolor="#e94560" fillcolor="#e94560">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;">Confirm New Email</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="{{ .ConfirmationURL }}" target="_blank" style="display: inline-block; padding: 14px 40px; background-color: #e94560; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; font-weight: 600; border-radius: 12px; text-decoration: none;">
Confirm New Email
</a>
<!--<![endif]-->
</td>
</tr>
</table>
<!-- Info Notice -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 8px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #8888aa; text-align: center; line-height: 1.5;">
&#128233; After confirming, you'll use your new email address to sign in to Sauci.
</p>
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 24px 0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td height="1" bgcolor="#333344" style="background-color: #333344; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Alternative Link -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center; line-height: 1.6;">
If the button doesn't work, copy and paste this link into your browser:
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; text-align: center; word-break: break-all; line-height: 1.5;">
<a href="{{ .ConfirmationURL }}" style="color: #e94560; text-decoration: underline;">{{ .ConfirmationURL }}</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 32px 20px;">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center;">
Didn't request this change?
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; color: #555566; text-align: center;">
If you didn't request an email change, please secure your account by resetting your password immediately.
</p>
</td>
</tr>
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
@@ -0,0 +1,227 @@
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
<title>You're Invited to Sauci</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<style>
table { border-collapse: collapse; }
td { font-family: Arial, sans-serif; }
</style>
<![endif]-->
<style>
body { margin: 0 !important; padding: 0 !important; }
table { border-spacing: 0 !important; border-collapse: collapse !important; }
td { padding: 0; }
img { border: 0; line-height: 100%; outline: none; text-decoration: none; }
a { text-decoration: none; }
@media only screen and (max-width: 600px) {
.email-container { width: 100% !important; }
.content-padding { padding-left: 20px !important; padding-right: 20px !important; }
}
</style>
</head>
<body style="margin: 0; padding: 0; word-spacing: normal; background-color: #0d0d1a;">
<div role="article" aria-roledescription="email" lang="en" style="text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #0d0d1a;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#0d0d1a">
<tr>
<td align="center">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 0 auto;" bgcolor="#0d0d1a">
<tr>
<td align="center" valign="top" bgcolor="#0d0d1a" style="background-color: #0d0d1a;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="520" class="email-container" style="margin: 0 auto;">
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
<!-- Logo Section -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 0 20px 24px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
<tr>
<td align="center" bgcolor="#e94560" style="background-color: #e94560; padding: 16px 60px; border-radius: 8px;">
<span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 32px; font-weight: 700; color: #ffffff; letter-spacing: -0.5px;">Sauci</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- Main Card -->
<tr>
<td class="content-padding" style="padding: 0 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#1a1a2e" style="background-color: #1a1a2e; border-radius: 16px;">
<!-- Top Accent Bar -->
<tr>
<td height="4" bgcolor="#e94560" style="background-color: #e94560; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
<!-- Card Content -->
<tr>
<td style="padding: 40px 32px;" bgcolor="#1a1a2e">
<!-- Icon -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="center" valign="middle" width="56" height="56" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 28px; font-size: 24px;">
&#128149;
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Heading -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 16px;">
<h1 style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 24px; font-weight: 600; color: #ffffff; line-height: 1.3;">
You've Been Invited
</h1>
</td>
</tr>
</table>
<!-- Subtext -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; color: #9999aa; text-align: center; line-height: 1.6;">
Someone special has invited you to join Sauci, the app designed to help couples deepen their connection and discover new things about each other.
</p>
</td>
</tr>
</table>
<!-- CTA Button -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ .ConfirmationURL }}" style="height:48px;v-text-anchor:middle;width:200px;" arcsize="25%" strokecolor="#e94560" fillcolor="#e94560">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;">Accept Invitation</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="{{ .ConfirmationURL }}" target="_blank" style="display: inline-block; padding: 14px 40px; background-color: #e94560; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; font-weight: 600; border-radius: 12px; text-decoration: none;">
Accept Invitation
</a>
<!--<![endif]-->
</td>
</tr>
</table>
<!-- Features Section -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#222240" style="background-color: #222240; border-radius: 12px;">
<tr>
<td style="padding: 20px;">
<p style="margin: 0 0 12px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; font-weight: 600; color: #9999aa; text-align: center; text-transform: uppercase; letter-spacing: 1px;">
What awaits you
</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 8px 0;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 14px; color: #8888aa; text-align: center;">
&#128293; Thoughtful questions to spark conversations
</p>
</td>
</tr>
<tr>
<td style="padding: 8px 0;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 14px; color: #8888aa; text-align: center;">
&#128140; Discover mutual interests with your partner
</p>
</td>
</tr>
<tr>
<td style="padding: 8px 0;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 14px; color: #8888aa; text-align: center;">
&#128172; Private chats when you both match
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 24px 0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td height="1" bgcolor="#333344" style="background-color: #333344; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Alternative Link -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center; line-height: 1.6;">
If the button doesn't work, copy and paste this link into your browser:
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; text-align: center; word-break: break-all; line-height: 1.5;">
<a href="{{ .ConfirmationURL }}" style="color: #e94560; text-decoration: underline;">{{ .ConfirmationURL }}</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 32px 20px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; color: #555566; text-align: center;">
This invitation link will expire in 7 days. If you didn't expect this invitation, you can safely ignore this email.
</p>
</td>
</tr>
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
@@ -0,0 +1,204 @@
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
<title>Sign In to Sauci</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<style>
table { border-collapse: collapse; }
td { font-family: Arial, sans-serif; }
</style>
<![endif]-->
<style>
body { margin: 0 !important; padding: 0 !important; }
table { border-spacing: 0 !important; border-collapse: collapse !important; }
td { padding: 0; }
img { border: 0; line-height: 100%; outline: none; text-decoration: none; }
a { text-decoration: none; }
@media only screen and (max-width: 600px) {
.email-container { width: 100% !important; }
.content-padding { padding-left: 20px !important; padding-right: 20px !important; }
}
</style>
</head>
<body style="margin: 0; padding: 0; word-spacing: normal; background-color: #0d0d1a;">
<div role="article" aria-roledescription="email" lang="en" style="text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #0d0d1a;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#0d0d1a">
<tr>
<td align="center">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 0 auto;" bgcolor="#0d0d1a">
<tr>
<td align="center" valign="top" bgcolor="#0d0d1a" style="background-color: #0d0d1a;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="520" class="email-container" style="margin: 0 auto;">
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
<!-- Logo Section -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 0 20px 24px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
<tr>
<td align="center" bgcolor="#e94560" style="background-color: #e94560; padding: 16px 60px; border-radius: 8px;">
<span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 32px; font-weight: 700; color: #ffffff; letter-spacing: -0.5px;">Sauci</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- Main Card -->
<tr>
<td class="content-padding" style="padding: 0 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#1a1a2e" style="background-color: #1a1a2e; border-radius: 16px;">
<!-- Top Accent Bar -->
<tr>
<td height="4" bgcolor="#e94560" style="background-color: #e94560; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
<!-- Card Content -->
<tr>
<td style="padding: 40px 32px;" bgcolor="#1a1a2e">
<!-- Icon -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="center" valign="middle" width="56" height="56" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 28px; font-size: 24px;">
&#10024;
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Heading -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 16px;">
<h1 style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 24px; font-weight: 600; color: #ffffff; line-height: 1.3;">
Your Magic Link
</h1>
</td>
</tr>
</table>
<!-- Subtext -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; color: #9999aa; text-align: center; line-height: 1.6;">
Click the button below to securely sign in to your Sauci account. No password needed.
</p>
</td>
</tr>
</table>
<!-- CTA Button -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ .ConfirmationURL }}" style="height:48px;v-text-anchor:middle;width:180px;" arcsize="25%" strokecolor="#e94560" fillcolor="#e94560">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;">Sign In to Sauci</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="{{ .ConfirmationURL }}" target="_blank" style="display: inline-block; padding: 14px 40px; background-color: #e94560; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; font-weight: 600; border-radius: 12px; text-decoration: none;">
Sign In to Sauci
</a>
<!--<![endif]-->
</td>
</tr>
</table>
<!-- Security Notice -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 8px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #8888aa; text-align: center; line-height: 1.5;">
&#128274; This link is unique to you and expires in 1 hour for your security.
</p>
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 24px 0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td height="1" bgcolor="#333344" style="background-color: #333344; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Alternative Link -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center; line-height: 1.6;">
If the button doesn't work, copy and paste this link into your browser:
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; text-align: center; word-break: break-all; line-height: 1.5;">
<a href="{{ .ConfirmationURL }}" style="color: #e94560; text-decoration: underline;">{{ .ConfirmationURL }}</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 32px 20px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; color: #555566; text-align: center;">
If you didn't request this sign in link, you can safely ignore this email.
</p>
</td>
</tr>
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
@@ -0,0 +1,207 @@
<!DOCTYPE html>
<html lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
<title>Reset Your Password - Sauci</title>
<!--[if mso]>
<noscript>
<xml>
<o:OfficeDocumentSettings>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</noscript>
<style>
table { border-collapse: collapse; }
td { font-family: Arial, sans-serif; }
</style>
<![endif]-->
<style>
body { margin: 0 !important; padding: 0 !important; }
table { border-spacing: 0 !important; border-collapse: collapse !important; }
td { padding: 0; }
img { border: 0; line-height: 100%; outline: none; text-decoration: none; }
a { text-decoration: none; }
@media only screen and (max-width: 600px) {
.email-container { width: 100% !important; }
.content-padding { padding-left: 20px !important; padding-right: 20px !important; }
}
</style>
</head>
<body style="margin: 0; padding: 0; word-spacing: normal; background-color: #0d0d1a;">
<div role="article" aria-roledescription="email" lang="en" style="text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #0d0d1a;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#0d0d1a">
<tr>
<td align="center">
<![endif]-->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 0 auto;" bgcolor="#0d0d1a">
<tr>
<td align="center" valign="top" bgcolor="#0d0d1a" style="background-color: #0d0d1a;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="520" class="email-container" style="margin: 0 auto;">
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
<!-- Logo Section -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 0 20px 24px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
<tr>
<td align="center" bgcolor="#e94560" style="background-color: #e94560; padding: 16px 60px; border-radius: 8px;">
<span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 32px; font-weight: 700; color: #ffffff; letter-spacing: -0.5px;">Sauci</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- Main Card -->
<tr>
<td class="content-padding" style="padding: 0 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#1a1a2e" style="background-color: #1a1a2e; border-radius: 16px;">
<!-- Top Accent Bar -->
<tr>
<td height="4" bgcolor="#e94560" style="background-color: #e94560; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
<!-- Card Content -->
<tr>
<td style="padding: 40px 32px;" bgcolor="#1a1a2e">
<!-- Icon -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td align="center" valign="middle" width="56" height="56" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 28px; font-size: 24px;">
&#128272;
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Heading -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 16px;">
<h1 style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 24px; font-weight: 600; color: #ffffff; line-height: 1.3;">
Reset Your Password
</h1>
</td>
</tr>
</table>
<!-- Subtext -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; color: #9999aa; text-align: center; line-height: 1.6;">
We received a request to reset your password. Click the button below to choose a new one.
</p>
</td>
</tr>
</table>
<!-- CTA Button -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" style="padding-bottom: 32px;">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ .ConfirmationURL }}" style="height:48px;v-text-anchor:middle;width:180px;" arcsize="25%" strokecolor="#e94560" fillcolor="#e94560">
<w:anchorlock/>
<center style="color:#ffffff;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;">Reset Password</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-->
<a href="{{ .ConfirmationURL }}" target="_blank" style="display: inline-block; padding: 14px 40px; background-color: #e94560; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 15px; font-weight: 600; border-radius: 12px; text-decoration: none;">
Reset Password
</a>
<!--<![endif]-->
</td>
</tr>
</table>
<!-- Security Notice -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#2a2a3e" style="background-color: #2a2a3e; border-radius: 8px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #8888aa; text-align: center; line-height: 1.5;">
&#9200; This link expires in 1 hour. After resetting, you'll need to sign in again on all devices.
</p>
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 24px 0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td height="1" bgcolor="#333344" style="background-color: #333344; font-size: 0; line-height: 0;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Alternative Link -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center; line-height: 1.6;">
If the button doesn't work, copy and paste this link into your browser:
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; text-align: center; word-break: break-all; line-height: 1.5;">
<a href="{{ .ConfirmationURL }}" style="color: #e94560; text-decoration: underline;">{{ .ConfirmationURL }}</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td align="center" bgcolor="#0d0d1a" style="background-color: #0d0d1a; padding: 32px 20px;">
<p style="margin: 0 0 8px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 13px; color: #666677; text-align: center;">
Didn't request this?
</p>
<p style="margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; font-size: 12px; color: #555566; text-align: center;">
If you didn't request a password reset, you can safely ignore this email. Your password won't change until you click the link above.
</p>
</td>
</tr>
<!-- Spacer -->
<tr>
<td height="40" style="font-size: 0; line-height: 0;" bgcolor="#0d0d1a">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
variable "project_ref" {
description = "Supabase project reference ID"
type = string
}
variable "is_production" {
description = "Whether this is the production environment (enables SMTP, higher rate limits)"
type = bool
default = false
}
+10
View File
@@ -0,0 +1,10 @@
terraform {
required_version = ">= 1.0"
required_providers {
supabase = {
source = "supabase/supabase"
version = "~> 1.0"
}
}
}