From a11ae7eef3bf79c0c8365ac01f1822f7df7e9cfa Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Mon, 12 Oct 2026 09:09:07 +0200 Subject: [PATCH] feat(marke): Logo, Favicon und PWA-Icons per Skript (#002) Die Bildmarke liegt als SVG in drei Varianten (dunkel, hell, mono) vor. Rasterdateien erzeugt scripts/icons.mjs mit sharp und sie werden eingecheckt, damit Build und Laufzeitabbild kein sharp brauchen. Unter 32 px dient eine reduzierte Marke ohne Zahlenring und Bolzen, weil die Details dort zu Rauschen verschwimmen. Co-Authored-By: Claude Opus 5.5 --- public/brand/favicon.svg | 5 ++ public/brand/logo-light.svg | 10 +++ public/brand/logo-mono.svg | 11 ++++ public/brand/logo.svg | 10 +++ public/icons/apple-touch-icon.png | Bin 0 -> 5480 bytes public/icons/favicon-16.png | Bin 0 -> 384 bytes public/icons/favicon-32.png | Bin 0 -> 678 bytes public/icons/icon-192.png | Bin 0 -> 5942 bytes public/icons/icon-512.png | Bin 0 -> 21125 bytes scripts/icons.mjs | 99 ++++++++++++++++++++++++++++++ src/app/apple-icon.png | Bin 0 -> 5480 bytes src/app/favicon.ico | Bin 0 -> 2177 bytes src/app/icon.svg | 5 ++ src/app/manifest.ts | 20 ++++++ 14 files changed, 160 insertions(+) create mode 100644 public/brand/favicon.svg create mode 100644 public/brand/logo-light.svg create mode 100644 public/brand/logo-mono.svg create mode 100644 public/brand/logo.svg create mode 100644 public/icons/apple-touch-icon.png create mode 100644 public/icons/favicon-16.png create mode 100644 public/icons/favicon-32.png create mode 100644 public/icons/icon-192.png create mode 100644 public/icons/icon-512.png create mode 100644 scripts/icons.mjs create mode 100644 src/app/apple-icon.png create mode 100644 src/app/favicon.ico create mode 100644 src/app/icon.svg create mode 100644 src/app/manifest.ts diff --git a/public/brand/favicon.svg b/public/brand/favicon.svg new file mode 100644 index 0000000..b5f29a9 --- /dev/null +++ b/public/brand/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/brand/logo-light.svg b/public/brand/logo-light.svg new file mode 100644 index 0000000..ebc67d3 --- /dev/null +++ b/public/brand/logo-light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/brand/logo-mono.svg b/public/brand/logo-mono.svg new file mode 100644 index 0000000..13a7213 --- /dev/null +++ b/public/brand/logo-mono.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/brand/logo.svg b/public/brand/logo.svg new file mode 100644 index 0000000..d5a2de1 --- /dev/null +++ b/public/brand/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/apple-touch-icon.png b/public/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a95d68173e29926c5dd6cf7d7112ac8360db399 GIT binary patch literal 5480 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 evsa(2l==p$hf) zI7XoKr?g(ftPmk#?O*%#i*b^PS9i~2jPp%zsgq@Fz$)PqHmtd9lu2Tkw_+ImVHoWu z@g01+RE|KV9v_ncFmKH&JP`1Pt~w=P-Y(9A??r_KeA+gQUUEl(dC!W9TO^)3BLIx< zj3mJ5j>8Vn^)u~&iFY8LbJ6L4JKX^UZhG-7_H}A!2?nPl@KsKJwDX| z-#eNL0r`6IV$lece|ye30r2Tk;STKHx#ygKVcyn|Yxr^+9r!ln8h#y{Kp^3X^*bJU z0`R@(hSANuz-OZg=xs|M*0O?RpG;SfEN3NIRHYcr;zTyDS(2>7dFw*_00p8om%2ky z`o(JhZu$@%i>=*}L>M-&R4Yc|vn|VofExoZp;^cnlZY$*v1cwO^M>)ay&MC^ge(1U zm^Evki8Ui>yI=u#qH1%BGZ#W%FFiNhP}J=`&p4SkOzin`y6rjm3+}eqw6O?)00000 M07*qoM6N<$f^ShW)&Kwi literal 0 HcmV?d00001 diff --git a/public/icons/icon-192.png b/public/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..195f7a7e9d84ec3610d1bc0bf34f29078826eef8 GIT binary patch literal 5942 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 f1$f%9|t;p4HfA#^-m1OXA^>bP0l+XkKuzy= 256 ? 0 : groesse, 0); + e.writeUInt8(groesse >= 256 ? 0 : groesse, 1); + e.writeUInt8(0, 2); + e.writeUInt8(0, 3); + e.writeUInt16LE(1, 4); + e.writeUInt16LE(32, 6); + e.writeUInt32LE(daten.length, 8); + e.writeUInt32LE(versatz, 12); + versatz += daten.length; + eintraege.push(e); + } + return Buffer.concat([kopf, ...eintraege, ...bilder.map((b) => b.daten)]); +} + +async function main() { + await mkdir(ICONS, { recursive: true }); + const logo = await readFile(join(BRAND, "logo.svg")); + // Unter 32 px wird die reduzierte Variante ohne Zahlenring und Bolzen genutzt, + // sonst verschwimmen die Details zu grauem Rauschen. + const favicon = await readFile(join(BRAND, "favicon.svg")); + + const icon192 = await aufFlaeche(logo, 192, 0.72); + const icon512 = await aufFlaeche(logo, 512, 0.72); + const apple = await aufFlaeche(logo, 180, 0.72); + const fav32 = await rendern(favicon, 32); + const fav16 = await rendern(favicon, 16); + const fav48 = await rendern(favicon, 48); + + await writeFile(join(ICONS, "icon-192.png"), icon192); + await writeFile(join(ICONS, "icon-512.png"), icon512); + await writeFile(join(ICONS, "apple-touch-icon.png"), apple); + await writeFile(join(ICONS, "favicon-32.png"), fav32); + await writeFile(join(ICONS, "favicon-16.png"), fav16); + + // Next-Metadaten-Dateien: favicon.ico, icon.svg und apple-icon.png in src/app + // erzeugen die -Tags automatisch. + await writeFile( + join(APP, "favicon.ico"), + icoBauen([ + { groesse: 16, daten: fav16 }, + { groesse: 32, daten: fav32 }, + { groesse: 48, daten: fav48 }, + ]), + ); + await copyFile(join(BRAND, "favicon.svg"), join(APP, "icon.svg")); + await writeFile(join(APP, "apple-icon.png"), apple); + + console.log("Icons erzeugt: public/icons/*, src/app/favicon.ico, src/app/icon.svg, src/app/apple-icon.png"); +} + +await main(); diff --git a/src/app/apple-icon.png b/src/app/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a95d68173e29926c5dd6cf7d7112ac8360db399 GIT binary patch literal 5480 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 Qm|qNRbewnZ|NE8w31gzUGynhq literal 0 HcmV?d00001 diff --git a/src/app/icon.svg b/src/app/icon.svg new file mode 100644 index 0000000..b5f29a9 --- /dev/null +++ b/src/app/icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/app/manifest.ts b/src/app/manifest.ts new file mode 100644 index 0000000..7e6ee11 --- /dev/null +++ b/src/app/manifest.ts @@ -0,0 +1,20 @@ +import type { MetadataRoute } from "next"; + +/** Web-App-Manifest; die Icons erzeugt scripts/icons.mjs (#002). */ +export default function manifest(): MetadataRoute.Manifest { + return { + name: "SSHKeyVault", + short_name: "sshkv", + description: "Zentrale Verwaltung von SSH-Schlüsseln", + lang: "de", + start_url: "/", + display: "standalone", + background_color: "#0D1013", + theme_color: "#0D1013", + icons: [ + { src: "/icons/icon-192.png", sizes: "192x192", type: "image/png" }, + { src: "/icons/icon-512.png", sizes: "512x512", type: "image/png" }, + { src: "/brand/favicon.svg", sizes: "any", type: "image/svg+xml" }, + ], + }; +}