From 04bca98ef88f81377d70f77a85af4ea37a772c0e Mon Sep 17 00:00:00 2001 From: ponzischeme89 Date: Mon, 4 May 2026 23:47:26 +1200 Subject: [PATCH] instagram cta changes, mail fixes --- deploy.env.template | 4 +- docker-compose.prod.yml | 2 + docker-compose.yml | 6 +- mail-api/main.py | 52 +++++++---- src/lib/components/InstagramSection.svelte | 86 ++++++++----------- static/images/smiling-dogs-instagram-cta.png | Bin 0 -> 320284 bytes 6 files changed, 80 insertions(+), 70 deletions(-) create mode 100644 static/images/smiling-dogs-instagram-cta.png diff --git a/deploy.env.template b/deploy.env.template index eaf9bf9..0b38336 100644 --- a/deploy.env.template +++ b/deploy.env.template @@ -7,7 +7,9 @@ POSTGRES_PASSWORD=gw_Pg_7Jm9!Qx4#Ld2@Vr8 POSTGRES_PASSWORD_URLENCODED=gw_Pg_7Jm9%21Qx4%23Ld2%40Vr8 RESEND_API_KEY=re_hcDByLp8_HEBW93wDirr7o9g16FgCeYNF -OWNER_EMAIL=mattcohen0@gmail.com +OWNER_EMAIL=info@goodwalk.co.nz +OWNER_BCC=mattcohen0@gmail.com +CLIENT_BCC=mattcohen0@gmail.com FROM_EMAIL=GoodWalk REPLY_TO=info@goodwalk.co.nz ENABLE_GENERAL_ENQUIRIES=false diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1bb821c..063b15e 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -31,6 +31,8 @@ services: APP_VERSION: ${APP_VERSION:-4.0.2} RESEND_API_KEY: ${RESEND_API_KEY} OWNER_EMAIL: ${OWNER_EMAIL} + OWNER_BCC: ${OWNER_BCC:-} + CLIENT_BCC: ${CLIENT_BCC:-} FROM_EMAIL: ${FROM_EMAIL:-GoodWalk } REPLY_TO: ${REPLY_TO:-aless@goodwalk.co.nz} ENABLE_GENERAL_ENQUIRIES: ${ENABLE_GENERAL_ENQUIRIES:-false} diff --git a/docker-compose.yml b/docker-compose.yml index 140b075..0b3cd81 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,8 +24,10 @@ services: APP_VERSION: ${APP_VERSION:-4.0.2} RESEND_API_KEY: ${RESEND_API_KEY} OWNER_EMAIL: ${OWNER_EMAIL} - FROM_EMAIL: ${FROM_EMAIL:-GoodWalk } - REPLY_TO: ${REPLY_TO:-aless@goodwalk.co.nz} + OWNER_BCC: ${OWNER_BCC:-} + CLIENT_BCC: ${CLIENT_BCC:-} + FROM_EMAIL: ${FROM_EMAIL:-GoodWalk } + REPLY_TO: ${REPLY_TO:-info@goodwalk.co.nz} ENABLE_GENERAL_ENQUIRIES: ${ENABLE_GENERAL_ENQUIRIES:-false} TZ: ${TZ:-Pacific/Auckland} restart: unless-stopped diff --git a/mail-api/main.py b/mail-api/main.py index 8dee5c5..77ed169 100644 --- a/mail-api/main.py +++ b/mail-api/main.py @@ -89,6 +89,8 @@ def _load_config() -> dict: "owner_email": os.environ["OWNER_EMAIL"], "from_email": os.environ.get("FROM_EMAIL", "GoodWalk "), "reply_to": os.environ.get("REPLY_TO", "aless@goodwalk.co.nz"), + "owner_bcc": os.environ.get("OWNER_BCC", "example@example.com").strip(), + "client_bcc": os.environ.get("CLIENT_BCC", "").strip(), "enable_general_enquiries": os.environ.get("ENABLE_GENERAL_ENQUIRIES", "false").strip().lower() in {"1", "true", "yes", "on", "enabled"}, "max_attempts": max(1, int(os.environ.get("MAIL_MAX_ATTEMPTS", "3"))), "form_min_seconds": max(1, int(os.environ.get("FORM_MIN_SECONDS", "4"))), @@ -104,6 +106,8 @@ _config = _load_config() APP_VERSION = os.environ.get("APP_VERSION", "unknown") resend.api_key = _config["resend_api_key"] OWNER_EMAIL = _config["owner_email"] +OWNER_BCC = _config["owner_bcc"] +CLIENT_BCC = _config["client_bcc"] FROM_EMAIL = _config["from_email"] REPLY_TO = _config["reply_to"] ENABLE_GENERAL_ENQUIRIES = _config["enable_general_enquiries"] @@ -118,12 +122,14 @@ RATE_LIMIT_MIN_INTERVAL_SECONDS = _config["rate_limit_min_interval_seconds"] LOGO_URL = "https://www.goodwalk.co.nz/images/goodwalk-auckland-dog-walking-logo.png" logger.info( - "Mail API config: version=%r timezone=%r from=%r reply_to=%r owner=%r general_enquiries=%r max_attempts=%d form_min=%ss form_max=%ss rate_window=%ss per_ip=%d per_email=%d min_interval=%ss", + "Mail API config: version=%r timezone=%r from=%r reply_to=%r owner=%r owner_bcc=%r client_bcc=%r general_enquiries=%r max_attempts=%d form_min=%ss form_max=%ss rate_window=%ss per_ip=%d per_email=%d min_interval=%ss", APP_VERSION, os.environ.get("TZ", "system-default"), FROM_EMAIL, REPLY_TO, OWNER_EMAIL, + OWNER_BCC, + CLIENT_BCC, ENABLE_GENERAL_ENQUIRIES, MAX_SEND_ATTEMPTS, FORM_MIN_SECONDS, @@ -891,15 +897,19 @@ async def submit_booking(data: BookingSubmission, request: Request): failures: list[dict] = [] + client_payload = { + "from": FROM_EMAIL, + "to": [data.email], + "reply_to": REPLY_TO, + "subject": f"We received your {'general enquiry' if _is_general_enquiry(data) else 'enquiry'}, {first_name}! 🐾", + "html": client_email(data), + } + if CLIENT_BCC: + client_payload["bcc"] = [CLIENT_BCC] + try: await _send_email( - { - "from": FROM_EMAIL, - "to": [data.email], - "reply_to": REPLY_TO, - "subject": f"We received your {'general enquiry' if _is_general_enquiry(data) else 'enquiry'}, {first_name}! 🐾", - "html": client_email(data), - }, + client_payload, label="client_email", request_id=request_id, ) @@ -911,19 +921,23 @@ async def submit_booking(data: BookingSubmission, request: Request): "status": getattr(exc, "status_code", None) or getattr(exc, "code", None), }) + owner_payload = { + "from": FROM_EMAIL, + "to": [OWNER_EMAIL], + "reply_to": data.email, + "subject": ( + f"New GoodWalk general enquiry — {data.fullName}" + if _is_general_enquiry(data) + else f"New GoodWalk lead — {data.fullName} ({data.petName})" + ), + "html": owner_email(data, ip, browser), + } + if OWNER_BCC: + owner_payload["bcc"] = [OWNER_BCC] + try: await _send_email( - { - "from": FROM_EMAIL, - "to": [OWNER_EMAIL], - "reply_to": data.email, - "subject": ( - f"New GoodWalk general enquiry — {data.fullName}" - if _is_general_enquiry(data) - else f"New GoodWalk lead — {data.fullName} ({data.petName})" - ), - "html": owner_email(data, ip, browser), - }, + owner_payload, label="owner_email", request_id=request_id, ) diff --git a/src/lib/components/InstagramSection.svelte b/src/lib/components/InstagramSection.svelte index 7f68412..7fbcad4 100644 --- a/src/lib/components/InstagramSection.svelte +++ b/src/lib/components/InstagramSection.svelte @@ -4,7 +4,7 @@ export let instagram: HomePageContent['instagram']; - const dogCutoutSrc = '/images/smiling-dog-cutout.webp'; + const dogCutoutSrc = '/images/smiling-dogs-instagram-cta.png';
@@ -30,7 +30,7 @@