diff --git a/apps/website/emails/email-wrapper.ts b/apps/website/emails/email-wrapper.ts index b1232473..5fcb20f0 100644 --- a/apps/website/emails/email-wrapper.ts +++ b/apps/website/emails/email-wrapper.ts @@ -1,22 +1,25 @@ /** * Shared HTML wrapper for all email templates. - * Gradient header band with logo, white body, footer. + * + * Brand pass: drops the pastel gradient header band (legacy aesthetic) for + * a clean white card with hairline borders, matching the Statusbrew-inspired + * marketing surface. Inline-only styles for cross-client compatibility. */ export function wrapEmail(opts: { body: string; showUnsubscribe?: boolean; }): string { return ` - -
-
-
🛩️ Angular Agent Framework
+ +
+
+
🛩️ Angular Agent Framework
-
+
${opts.body} -
-

Angular Agent Framework — Signal-native streaming for LangGraph.

- ${opts.showUnsubscribe ? '

Unsubscribe

' : ''} +
+

Angular Agent Framework — Signal-native streaming for LangGraph.

+ ${opts.showUnsubscribe ? '

Unsubscribe

' : ''}
diff --git a/apps/website/emails/lead-notification.ts b/apps/website/emails/lead-notification.ts index b5475dd9..0be62275 100644 --- a/apps/website/emails/lead-notification.ts +++ b/apps/website/emails/lead-notification.ts @@ -14,9 +14,9 @@ export function leadNotificationHtml({ name, email, company, message, ts }: Lead

New Lead

${esc(name)}

${esc(email)}${company ? ` — ${esc(company)}` : ''}

- ${message ? `

${esc(message)}

` : ''} -
-

Received ${esc(ts)}

+ ${message ? `

${esc(message)}

` : ''} +
+

Received ${esc(ts)}

`, }); diff --git a/apps/website/scripts/generate-whitepaper.ts b/apps/website/scripts/generate-whitepaper.ts index 38470b8c..01deec9d 100644 --- a/apps/website/scripts/generate-whitepaper.ts +++ b/apps/website/scripts/generate-whitepaper.ts @@ -70,7 +70,7 @@ const WHITEPAPERS: Record = { title: 'From Prototype to Production', subtitle: 'The Angular Agent Readiness Guide', eyebrow: '@ngaf/langgraph · Production Readiness Guide', - coverGradient: 'linear-gradient(135deg,#fef0f3 0%,#f4f0ff 45%,#eaf3ff 70%,#e6f4ff 100%)', + coverGradient: 'linear-gradient(135deg, #fafbfc 0%, #eaf3ff 100%)', outputPdf: 'apps/website/public/whitepaper.pdf', outputHtml: 'apps/website/public/whitepaper-preview.html', chapters: [ @@ -196,7 +196,7 @@ Tone: Direct, technical, peer-to-peer. No fluff. Audience is senior Angular engi title: 'The Enterprise Guide to Agent Streaming in Angular', subtitle: 'Ship LangGraph agents in Angular — without building the plumbing', eyebrow: '@ngaf/langgraph · Enterprise Guide', - coverGradient: 'linear-gradient(135deg, #eaf3ff 0%, #e6f4ff 45%, #f4f0ff 70%, #fef0f3 100%)', + coverGradient: 'linear-gradient(135deg, #fafbfc 0%, #eaf3ff 100%)', outputPdf: 'apps/website/public/whitepapers/angular.pdf', outputHtml: 'apps/website/public/whitepapers/angular-preview.html', chapters: [ @@ -323,7 +323,7 @@ Tone: Direct, technical, peer-to-peer. No fluff. Audience is senior Angular engi title: 'The Enterprise Guide to Generative UI in Angular', subtitle: 'Agents that render UI — without coupling to your frontend', eyebrow: '@ngaf/render · Enterprise Guide', - coverGradient: 'linear-gradient(135deg, #e8f5e9 0%, #eaf3ff 45%, #f4f0ff 70%, #fef0f3 100%)', + coverGradient: 'linear-gradient(135deg, #fafbfc 0%, #e8f5e9 100%)', outputPdf: 'apps/website/public/whitepapers/render.pdf', outputHtml: 'apps/website/public/whitepapers/render-preview.html', chapters: [ @@ -433,7 +433,7 @@ Tone: Direct, technical, peer-to-peer. No fluff. Audience is senior Angular engi title: 'The Enterprise Guide to Agent Chat Interfaces in Angular', subtitle: 'Production agent chat UI in days, not sprints', eyebrow: '@ngaf/chat · Enterprise Guide', - coverGradient: 'linear-gradient(135deg, #f3e8ff 0%, #f4f0ff 45%, #eaf3ff 70%, #e6f4ff 100%)', + coverGradient: 'linear-gradient(135deg, #fafbfc 0%, #f3e8ff 100%)', outputPdf: 'apps/website/public/whitepapers/chat.pdf', outputHtml: 'apps/website/public/whitepapers/chat-preview.html', chapters: [ @@ -564,7 +564,7 @@ function buildHTML( config: WhitepaperConfig, ): string { const tocHTML = chapters.map((ch, i) => ` -
+
${String(i + 1).padStart(2, '0')} ${ch.title}
`).join(''); @@ -601,7 +601,7 @@ function buildHTML(
${config.eyebrow}

${config.title.replace(/ /g, '
')}

${config.subtitle}

-
cacheplane.ai · ${new Date().getFullYear()}
+
cacheplane.ai · ${new Date().getFullYear()}
diff --git a/apps/website/src/app/api/email-preview/route.ts b/apps/website/src/app/api/email-preview/route.ts index f0a51e98..bae3cc39 100644 --- a/apps/website/src/app/api/email-preview/route.ts +++ b/apps/website/src/app/api/email-preview/route.ts @@ -64,10 +64,10 @@ export async function GET(req: NextRequest) { // Wrap in a preview frame showing subject line const preview = `Preview: ${subject} - -
+ +
- Subject: + Subject: ${subject}
← All templates