package email import ( "fmt" ) // Bookra Design System - Warm editorial aesthetic // Canvas: warm cream backgrounds (#fbf9f6) // Ink: warm dark brown (#2a221e) // Accent: terracotta (#a65c3e) // Logo bg: #24201d, Logo text: #f7f2e8 const ( canvas = "#fbf9f6" // Warm cream background canvasSubtle = "#f5f2ed" // Slightly darker cream ink = "#2a221e" // Warm dark brown inkMuted = "#5c514a" // Muted brown inkSubtle = "#8b7f76" // Light muted brown accent = "#a65c3e" // Terracotta accentHover = "#8f4d33" // Darker terracotta accentSubtle = "#f5ebe7" // Light terracotta tint logoBg = "#24201d" // Logo dark brown logoText = "#f7f2e8" // Logo cream border = "#e8e2da" // Warm border white = "#ffffff" ) type EmailTemplate struct { Subject string HTML string Text string } func MagicLinkEmail(toName, magicURL string, locale string) EmailTemplate { if locale == "cs" { return magicLinkEmailCS(toName, magicURL) } return magicLinkEmailEN(toName, magicURL) } func WelcomeEmail(name string, locale string) EmailTemplate { if locale == "cs" { return welcomeEmailCS(name) } return welcomeEmailEN(name) } func BookingConfirmationEmail(customerName, businessName, serviceName, dateTime, location string, locale string) EmailTemplate { if locale == "cs" { return bookingConfirmationCS(customerName, businessName, serviceName, dateTime, location) } return bookingConfirmationEN(customerName, businessName, serviceName, dateTime, location) } func PasswordResetEmail(name, resetURL string, locale string) EmailTemplate { if locale == "cs" { return passwordResetCS(name, resetURL) } return passwordResetEN(name, resetURL) } func magicLinkEmailEN(toName, magicURL string) EmailTemplate { subject := "Your sign-in link for Bookra" if toName == "" { toName = "there" } html := fmt.Sprintf(` %s
Bookra
Calm booking software
Hi %s,
You requested a sign-in link for your Bookra account. Click below to access your account securely — no password needed.
This link expires in 15 minutes for security.
Didn't request this? You can safely ignore it — someone may have entered your email by mistake.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, inkSubtle, ink, inkMuted, accent, white, accentHover, canvasSubtle, border, inkSubtle, inkMuted, accentSubtle, accent, accent, inkSubtle, border, canvas, border, inkMuted, inkMuted, toName, magicURL, magicURL) text := fmt.Sprintf(`Bookra — Sign-in Link Hi %s, Sign in to Bookra (link expires in 15 minutes): %s Didn't request this? You can safely ignore this email. © 2024 Bookra`, toName, magicURL) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func magicLinkEmailCS(toName, magicURL string) EmailTemplate { subject := "Váš přihlašovací odkaz do Bookra" if toName == "" { toName = "vás" } html := fmt.Sprintf(` %s
Bookra
Klidný rezervační software
Dobrý den %s,
Požádali jste o přihlašovací odkaz k účtu Bookra. Klikněte níže pro bezpečný přístup — heslo není potřeba.
Tento odkaz vyprší za 15 minut z bezpečnostních důvodů.
Nepožádali jste o tento email? Můžete ho bezpečně ignorovat.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, inkSubtle, ink, inkMuted, accent, white, accentHover, canvasSubtle, border, inkSubtle, inkMuted, accentSubtle, accent, accent, inkSubtle, border, canvas, border, inkMuted, inkMuted, toName, magicURL, magicURL) text := fmt.Sprintf(`Bookra — Přihlašovací odkaz Dobrý den %s, Přihlaste se do Bookra (odkaz vyprší za 15 minut): %s Nepožádali jste o tento email? Můžete ho ignorovat. © 2024 Bookra`, toName, magicURL) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func welcomeEmailEN(name string) EmailTemplate { subject := "Welcome to Bookra" html := fmt.Sprintf(` %s
Bookra
Welcome, %s
Thanks for joining Bookra. We're here to help you manage bookings with calm and clarity.
Smart scheduling — Automatic conflict detection and buffer times
Customer insights — History and preferences at your fingertips
Reminders — Reduce no-shows with gentle notifications
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, ink, inkMuted, canvasSubtle, accent, white, inkMuted, accent, white, canvas, border, inkMuted, name) text := fmt.Sprintf(`Welcome to Bookra, %s Thanks for joining. We're here to help you manage bookings with calm and clarity. Get started: https://bookra.tdvorak.dev/dashboard © 2024 Bookra`, name) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func welcomeEmailCS(name string) EmailTemplate { subject := "Vítejte v Bookra" html := fmt.Sprintf(` %s
Bookra
Vítejte, %s
Děkujeme za registraci. Pomůžeme vám spravovat rezervace s klidem a přehledem.
Chytré plánování — Automatická detekce konfliktů
Přehled o zákaznících — Historie a preference
Připomenutí — Méně zapomenutých termínů
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, ink, inkMuted, canvasSubtle, accent, white, inkMuted, accent, white, canvas, border, inkMuted, name) text := fmt.Sprintf(`Vítejte v Bookra, %s Děkujeme za registraci. Pomůžeme vám spravovat rezervace s klidem. Otevřít aplikaci: https://bookra.tdvorak.dev/dashboard © 2024 Bookra`, name) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func bookingConfirmationEN(customerName, businessName, serviceName, dateTime, location string) EmailTemplate { subject := fmt.Sprintf("Confirmed: %s with %s", serviceName, businessName) html := fmt.Sprintf(` %s
Bookra
Confirmed
Hello %s,
Your booking with %s is confirmed.
Service
%s
When
%s
Where
%s
Need to reschedule? Contact %s directly.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, accentSubtle, accent, ink, inkMuted, canvasSubtle, border, inkSubtle, ink, inkSubtle, border, canvas, border, inkMuted, customerName, businessName, serviceName, dateTime, location, businessName) text := fmt.Sprintf(`Booking Confirmed Hello %s, Your booking with %s is confirmed. Service: %s When: %s Where: %s Need to reschedule? Contact %s. © 2024 Bookra`, customerName, businessName, serviceName, dateTime, location, businessName) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func bookingConfirmationCS(customerName, businessName, serviceName, dateTime, location string) EmailTemplate { subject := fmt.Sprintf("Potvrzeno: %s v %s", serviceName, businessName) html := fmt.Sprintf(` %s
Bookra
Potvrzeno
Dobrý den %s,
Vaše rezervace v %s je potvrzena.
Služba
%s
Termín
%s
Místo
%s
Potřebujete přeobjednat? Kontaktujte přímo %s.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, accentSubtle, accent, ink, inkMuted, canvasSubtle, border, inkSubtle, ink, inkSubtle, border, canvas, border, inkMuted, customerName, businessName, serviceName, dateTime, location, businessName) text := fmt.Sprintf(`Rezervace potvrzena Dobrý den %s, Vaše rezervace v %s je potvrzena. Služba: %s Termín: %s Místo: %s Potřebujete přeobjednat? Kontaktujte %s. © 2024 Bookra`, customerName, businessName, serviceName, dateTime, location, businessName) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func passwordResetEN(name, resetURL string) EmailTemplate { subject := "Reset your Bookra password" html := fmt.Sprintf(` %s
Bookra
Hi %s,
We received a request to reset your password. Click below to choose a new one.
This link expires in 1 hour.
Didn't request this? You can safely ignore it.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, ink, inkMuted, accent, white, accentSubtle, accent, accent, inkSubtle, border, canvas, border, inkMuted, name, resetURL) text := fmt.Sprintf(`Reset Password — Bookra Hi %s, Reset your password (expires in 1 hour): %s Didn't request this? You can safely ignore it. © 2024 Bookra`, name, resetURL) return EmailTemplate{Subject: subject, HTML: html, Text: text} } func passwordResetCS(name, resetURL string) EmailTemplate { subject := "Reset hesla pro Bookra" html := fmt.Sprintf(` %s
Bookra
Dobrý den %s,
Obdrželi jsme žádost o reset hesla. Klikněte níže pro nastavení nového.
Tento odkaz vyprší za 1 hodinu.
Nepožádali jste o tento email? Můžete ho bezpečně ignorovat.
`, subject, canvas, white, canvas, border, logoBg, logoText, ink, ink, inkMuted, accent, white, accentSubtle, accent, accent, inkSubtle, border, canvas, border, inkMuted, name, resetURL) text := fmt.Sprintf(`Reset hesla — Bookra Dobrý den %s, Reset hesla (vyprší za 1 hodinu): %s Nepožádali jste o tento email? Můžete ho ignorovat. © 2024 Bookra`, name, resetURL) return EmailTemplate{Subject: subject, HTML: html, Text: text} }