diff --git a/app/main.py b/app/main.py index 020b120..b5bd702 100644 --- a/app/main.py +++ b/app/main.py @@ -296,7 +296,12 @@ def send_email(to: str, subject: str, text_body: str, html_body: str | None = No def welcome_email(name: str) -> tuple[str, str, str]: - """Build the welcome email (subject, text, html) for a new member.""" + """Build the welcome email (subject, text, html) for a new member. + + The HTML uses a centered, card-style layout matching the landing page + (cream background, forest-green button, Figtree-like system fonts). + Email HTML is table-based for client compatibility; no external assets. + """ join_url = f"{PORTAL_BASE}/join" subject = "Welcome to the Inference Cooperative — finish your setup" text = ( @@ -310,20 +315,64 @@ def welcome_email(name: str) -> tuple[str, str, str]: "Questions? Reply to this email or write to info@inference.coop.\n\n" "— The Inference Cooperative\n" ) - html = ( - f"

Hi {name},

" - "

Thanks for joining the Inference Cooperative!

" - "

To finish setting up your account and start using private AI chat, " - "click the button below and connect your Open Collective account:

" - f'

' - "Finish setup

" - "

This takes about a minute. You'll then get an account-setup email " - "from our platform.

" - '

Questions? Reply to this email or write to ' - 'info@inference.coop.

' - "

— The Inference Cooperative

" - ) + html = f""" + + + + + + + +
+ + + + + + + + + + +
+ + +
+

Welcome, {name}

+

Thanks for joining the Inference Cooperative.

+

Finish setting up your account to start using private AI chat.

+ Finish setup +

This takes about a minute. You'll then get an account-setup email from our platform.

+
+ Questions? Reply to this email or write to info@inference.coop.
+ The Inference Cooperative · inference.coop +
+
+ +""" return subject, text, html