52f538c432
Rueckmeldung des Nutzers: in Outlook nur ein grosser schwarzer Kasten, kein Logo (das eingebettete Kopfbild wurde nicht angezeigt; Logo und Schriftzug steckten nur darin). Jetzt Bildmarke aus Tabellenzellen und Schriftzug als Text in einer niedrigen dunklen Leiste, darunter die Duenen-Welle als 600x56-Streifen, der ins Weiss auslaeuft; fehlt das Bild, bleibt nur Abstand. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
41 lines
1.8 KiB
JavaScript
41 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* render-mail-header.mjs — erzeugt das Kopfbild der Willkommensmail
|
|
* (apps/api/assets/mail/welcome-header.png, 1200x112 fuer hochaufloesende
|
|
* Bildschirme, in der Mail 600x56 angezeigt) aus der daneben liegenden
|
|
* Quelle welcome-header.svg.
|
|
*
|
|
* Warum ein PNG statt Inline-SVG oder CSS-Hintergrund: Outlook (Word-
|
|
* Darstellung) und viele Webmailer zeigen weder SVG noch Hintergrundbilder
|
|
* zuverlaessig an. Das PNG wird als CID-Anhang eingebettet (MailService),
|
|
* die Mail laedt also nichts von aussen nach.
|
|
*
|
|
* Das PNG liegt fertig im Repo; dieses Skript ist nur noetig, wenn die SVG
|
|
* geaendert wird. Kein neues Paket: `sharp` ist ueber Next.js (apps/web)
|
|
* bereits installiert und wird von dort aufgeloest. Der Schriftzug wird
|
|
* mit den Systemschriften des erzeugenden Rechners gesetzt (fontconfig:
|
|
* Segoe UI, Inter, Noto Sans, DejaVu Sans — die erste vorhandene gewinnt).
|
|
*
|
|
* Aufruf (Repo-Wurzel): node apps/api/scripts/render-mail-header.mjs
|
|
*/
|
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
import { createRequire } from 'node:module';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
const assetDir = join(here, '..', 'assets', 'mail');
|
|
const webDir = join(here, '..', '..', 'web');
|
|
|
|
const require = createRequire(import.meta.url);
|
|
const nextPkg = require.resolve('next/package.json', { paths: [webDir] });
|
|
const sharp = createRequire(nextPkg)('sharp');
|
|
|
|
const svg = readFileSync(join(assetDir, 'welcome-header.svg'));
|
|
const png = await sharp(svg, { density: 72 })
|
|
.resize(1200, 112)
|
|
.png({ compressionLevel: 9, palette: false })
|
|
.toBuffer();
|
|
writeFileSync(join(assetDir, 'welcome-header.png'), png);
|
|
console.log(`welcome-header.png geschrieben (${png.length} Bytes)`);
|