mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Align prod schema and deploy tooling
This commit is contained in:
1 parent
d2db86ec7f
commit
7e2e723880
105 files changed
+19014
-131
No files matched your search
@@ -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"
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -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"> </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;"> </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;">
|
||||
💌
|
||||
</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;"> </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"> </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"> </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;"> </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;">
|
||||
✉
|
||||
</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;">
|
||||
📩 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;"> </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"> </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"> </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;"> </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;">
|
||||
💕
|
||||
</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;">
|
||||
🔥 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;">
|
||||
💌 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;">
|
||||
💬 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;"> </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"> </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"> </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;"> </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;">
|
||||
✨
|
||||
</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;">
|
||||
🔒 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;"> </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"> </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"> </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;"> </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;">
|
||||
🔐
|
||||
</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;">
|
||||
⏰ 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;"> </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"> </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!--[if mso]>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<![endif]-->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
|
||||
required_providers {
|
||||
supabase = {
|
||||
source = "supabase/supabase"
|
||||
version = "~> 1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user