From d35e3f4705694b97c66357526aacd31d55994837 Mon Sep 17 00:00:00 2001 From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:56:36 +0200 Subject: [PATCH] fix(pitch-deck): split email.ts to fix client bundle including nodemailer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Client component (investors/new page) imported DEFAULT_MESSAGE etc. from lib/email.ts which also top-level initialises nodemailer — webpack tried to bundle fs/net/dns into the client chunk and failed. Extract the pure constants + getDefaultGreeting into lib/email-templates.ts (client-safe), keep nodemailer in lib/email.ts (server-only), update the page to import from email-templates. Co-Authored-By: Claude Sonnet 4.6 --- .../(authed)/investors/new/page.tsx | 2 +- pitch-deck/lib/email-templates.ts | 9 +++++++++ pitch-deck/lib/email.ts | 18 ++++++++---------- pitch-deck/package-lock.json | 9 ++++++++- pitch-deck/package.json | 3 ++- 5 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 pitch-deck/lib/email-templates.ts diff --git a/pitch-deck/app/pitch-admin/(authed)/investors/new/page.tsx b/pitch-deck/app/pitch-admin/(authed)/investors/new/page.tsx index be74368..c67dc2d 100644 --- a/pitch-deck/app/pitch-admin/(authed)/investors/new/page.tsx +++ b/pitch-deck/app/pitch-admin/(authed)/investors/new/page.tsx @@ -4,7 +4,7 @@ import { useState, useMemo } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { ArrowLeft, Eye, Send } from 'lucide-react' -import { DEFAULT_MESSAGE, DEFAULT_CLOSING, getDefaultGreeting } from '@/lib/email' +import { DEFAULT_MESSAGE, DEFAULT_CLOSING, getDefaultGreeting } from '@/lib/email-templates' export default function NewInvestorPage() { const router = useRouter() diff --git a/pitch-deck/lib/email-templates.ts b/pitch-deck/lib/email-templates.ts new file mode 100644 index 0000000..50da1d8 --- /dev/null +++ b/pitch-deck/lib/email-templates.ts @@ -0,0 +1,9 @@ +export const DEFAULT_GREETING = 'Sehr geehrte Damen und Herren' +export const DEFAULT_MESSAGE = + 'wir freuen uns, Ihnen einen exklusiven Zugang zu unserem interaktiven Investor Pitch Deck zu gewähren. Die Präsentation enthält alle relevanten Informationen zu unserem Unternehmen, unserem Produkt und unserer Finanzierungsstrategie.' +export const DEFAULT_CLOSING = + 'Mit freundlichen Grüßen,\nBenjamin Boenisch & Sharang Parnerkar\nGründer — BreakPilot ComplAI' + +export function getDefaultGreeting(name: string | null): string { + return name ? `Sehr geehrte(r) ${name}` : DEFAULT_GREETING +} diff --git a/pitch-deck/lib/email.ts b/pitch-deck/lib/email.ts index d9a2f63..7d55deb 100644 --- a/pitch-deck/lib/email.ts +++ b/pitch-deck/lib/email.ts @@ -1,4 +1,12 @@ +import 'server-only' import nodemailer from 'nodemailer' +import { + DEFAULT_MESSAGE, + DEFAULT_CLOSING, + getDefaultGreeting, +} from '@/lib/email-templates' + +export { DEFAULT_GREETING, DEFAULT_MESSAGE, DEFAULT_CLOSING, getDefaultGreeting } from '@/lib/email-templates' const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, @@ -13,16 +21,6 @@ const transporter = nodemailer.createTransport({ const fromName = process.env.SMTP_FROM_NAME || 'BreakPilot' const fromAddr = process.env.SMTP_FROM_ADDR || 'noreply@breakpilot.ai' -export const DEFAULT_GREETING = 'Sehr geehrte Damen und Herren' -export const DEFAULT_MESSAGE = - 'wir freuen uns, Ihnen einen exklusiven Zugang zu unserem interaktiven Investor Pitch Deck zu gewähren. Die Präsentation enthält alle relevanten Informationen zu unserem Unternehmen, unserem Produkt und unserer Finanzierungsstrategie.' -export const DEFAULT_CLOSING = - 'Mit freundlichen Grüßen,\nBenjamin Boenisch & Sharang Parnerkar\nGründer — BreakPilot ComplAI' - -export function getDefaultGreeting(name: string | null): string { - return name ? `Sehr geehrte(r) ${name}` : DEFAULT_GREETING -} - export async function sendMagicLinkEmail( to: string, investorName: string | null, diff --git a/pitch-deck/package-lock.json b/pitch-deck/package-lock.json index 50e3e2a..8192068 100644 --- a/pitch-deck/package-lock.json +++ b/pitch-deck/package-lock.json @@ -17,7 +17,8 @@ "pg": "^8.13.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "recharts": "^2.15.0" + "recharts": "^2.15.0", + "server-only": "^0.0.1" }, "devDependencies": { "@types/bcryptjs": "^2.4.6", @@ -3743,6 +3744,12 @@ "node": ">=10" } }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", diff --git a/pitch-deck/package.json b/pitch-deck/package.json index f9b6910..2c0a658 100644 --- a/pitch-deck/package.json +++ b/pitch-deck/package.json @@ -20,7 +20,8 @@ "pg": "^8.13.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "recharts": "^2.15.0" + "recharts": "^2.15.0", + "server-only": "^0.0.1" }, "devDependencies": { "@types/bcryptjs": "^2.4.6",