/** * One-off script to generate PWA icons from logo.png. * Run: bun run scripts/generate-icons.ts */ import sharp from "sharp"; import { resolve } from "node:path"; const src = resolve(import.meta.dir, "../website/public/logo.png"); const outDir = resolve(import.meta.dir, "../website/public/icons"); // 192x192 await sharp(src).resize(192, 192).png().toFile(resolve(outDir, "icon-192.png")); console.log("✓ icon-192.png"); // 512x512 await sharp(src).resize(512, 512).png().toFile(resolve(outDir, "icon-512.png")); console.log("✓ icon-512.png"); // 180x180 apple-touch-icon await sharp(src).resize(180, 180).png().toFile(resolve(outDir, "apple-touch-icon.png")); console.log("✓ apple-touch-icon.png"); // Maskable 512x512: logo centered in inner 80% (410px) on #0f172a background const logoForMask = await sharp(src).resize(410, 410).png().toBuffer(); await sharp({ create: { width: 512, height: 512, channels: 4, background: { r: 15, g: 23, b: 42, alpha: 1 }, // #0f172a }, }) .composite([{ input: logoForMask, gravity: "centre" }]) .png() .toFile(resolve(outDir, "icon-maskable-512.png")); console.log("✓ icon-maskable-512.png"); console.log("Done! Icons written to website/public/icons/");