import nodemailer from 'nodemailer' const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT || '587'), secure: process.env.SMTP_PORT === '465', auth: { user: process.env.SMTP_USERNAME, pass: process.env.SMTP_PASSWORD, }, }) 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, magicLinkUrl: string, greeting?: string, message?: string, closing?: string, ): Promise { const effectiveGreeting = greeting || getDefaultGreeting(investorName) const effectiveMessage = message || DEFAULT_MESSAGE const effectiveClosing = closing || DEFAULT_CLOSING const closingHtml = effectiveClosing.replace(/\n/g, '
') const ttl = process.env.MAGIC_LINK_TTL_HOURS || '72' await transporter.sendMail({ from: `"${fromName}" <${fromAddr}>`, to, subject: 'BreakPilot ComplAI — Ihr persönlicher Pitch-Deck-Zugang', html: `

BreakPilot ComplAI

Investor Pitch Deck

${effectiveGreeting},

${effectiveMessage}

Ihr persoenlicher Zugangslink

Der untenstehende Link ist einmalig und verfaellt nach ${ttl} Stunden. Er gewaehrt Ihnen exklusiven Zugang zu unserem interaktiven Pitch Deck — inklusive KI-Assistent fuer Ihre Fragen.

Pitch Deck oeffnen

Falls der Button nicht funktioniert: ${magicLinkUrl}

${closingHtml}

Vertraulichkeit & Haftungsausschluss

Dieses Pitch Deck ist vertraulich und wurde ausschliesslich fuer den namentlich eingeladenen Empfaenger erstellt. Durch das Oeffnen des Links erklaert sich der Empfaenger einverstanden: (a) Der Inhalt ist vertraulich zu behandeln und darf nicht an Dritte weitergegeben, kopiert oder zugaenglich gemacht werden. Ausgenommen sind Berater (Rechtsanwaelte, Steuerberater), die berufsrechtlich zur Verschwiegenheit verpflichtet sind. (b) Die Informationen duerfen ausschliesslich zur Bewertung einer moeglichen Beteiligung verwendet werden. (c) Diese Vertraulichkeitsverpflichtung gilt fuer drei (3) Jahre ab Uebermittlung, unabhaengig davon, ob eine Beteiligung zustande kommt.

Dieses Dokument stellt weder ein Angebot zum Verkauf noch eine Aufforderung zur Abgabe eines Angebots zum Erwerb von Wertpapieren dar. Es handelt sich nicht um einen Wertpapierprospekt. Alle Finanzangaben sind Planzahlen und stellen keine Garantie fuer kuenftige Ergebnisse dar. Eine Beteiligung an einem jungen Unternehmen ist mit erheblichen Risiken verbunden, einschliesslich des Risikos eines Totalverlusts. Es gilt deutsches Recht. Gerichtsstand ist Konstanz, Deutschland.

Confidentiality & Disclaimer

This pitch deck is confidential and has been prepared exclusively for the personally invited recipient. By opening this link, the recipient agrees: (a) The content must be treated confidentially and may not be disclosed, copied or made accessible to third parties. Excluded are advisors (lawyers, tax advisors) professionally bound to secrecy. (b) The information may only be used for evaluating a possible participation. (c) This confidentiality obligation applies for three (3) years from transmission, regardless of whether a participation materializes.

This document constitutes neither an offer to sell nor a solicitation of an offer to acquire securities. It is not a securities prospectus. All financial figures are projections and do not constitute a guarantee of future results. An investment in a young company involves significant risks, including the risk of total loss. German law applies. Place of jurisdiction is Konstanz, Germany.

`, }) }