+
${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 ? `
` : ''}
-
-
Received ${esc(ts)}
+ ${message ? `
` : ''}
+
`,
});
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}
-
-