// Regenerates the favicon, touch icon and app icons from public/icons/icon-512.png. // Run it after changing the source icon: node scripts/make-icons.mjs import { writeFile } from 'node:fs/promises' import { fileURLToPath } from 'node:url' import sharp from 'sharp' const root = fileURLToPath(new URL('../public/', import.meta.url)) const source = `${root}icons/icon-512.png` const BACKGROUND = '#0a0d12' const resize = (size) => sharp(source).resize(size, size) await resize(32).toFile(`${root}favicon-32x32.png`) await resize(192).toFile(`${root}icons/icon-192.png`) // iOS fills transparent corners with black, so flatten onto the site background. await resize(180) .flatten({ background: BACKGROUND }) .toFile(`${root}apple-touch-icon.png`) const manifest = { name: 'Dennis Thiessen', short_name: 'D. Thiessen', start_url: '/', display: 'minimal-ui', background_color: BACKGROUND, theme_color: BACKGROUND, icons: [ { src: '/icons/icon-192.png', sizes: '192x192', type: 'image/png' }, { src: '/icons/icon-512.png', sizes: '512x512', type: 'image/png' }, ], } await writeFile( `${root}manifest.webmanifest`, `${JSON.stringify(manifest, null, 2)}\n` ) console.log('icons and manifest written to public/')