diff --git a/public/icons/badge-72x72.png b/public/icons/badge-72x72.png new file mode 100644 index 0000000..8dd0c79 Binary files /dev/null and b/public/icons/badge-72x72.png differ diff --git a/public/icons/icon-128x128.png b/public/icons/icon-128x128.png new file mode 100644 index 0000000..01acd7c Binary files /dev/null and b/public/icons/icon-128x128.png differ diff --git a/public/icons/icon-144x144.png b/public/icons/icon-144x144.png new file mode 100644 index 0000000..97ca7d3 Binary files /dev/null and b/public/icons/icon-144x144.png differ diff --git a/public/icons/icon-152x152.png b/public/icons/icon-152x152.png new file mode 100644 index 0000000..07793d4 Binary files /dev/null and b/public/icons/icon-152x152.png differ diff --git a/public/icons/icon-192x192.png b/public/icons/icon-192x192.png new file mode 100644 index 0000000..684b084 Binary files /dev/null and b/public/icons/icon-192x192.png differ diff --git a/public/icons/icon-384x384.png b/public/icons/icon-384x384.png new file mode 100644 index 0000000..01779f1 Binary files /dev/null and b/public/icons/icon-384x384.png differ diff --git a/public/icons/icon-512x512.png b/public/icons/icon-512x512.png new file mode 100644 index 0000000..86ab736 Binary files /dev/null and b/public/icons/icon-512x512.png differ diff --git a/public/icons/icon-72x72.png b/public/icons/icon-72x72.png new file mode 100644 index 0000000..8dd0c79 Binary files /dev/null and b/public/icons/icon-72x72.png differ diff --git a/public/icons/icon-96x96.png b/public/icons/icon-96x96.png new file mode 100644 index 0000000..58bdc40 Binary files /dev/null and b/public/icons/icon-96x96.png differ diff --git a/public/icons/icon-maskable-512x512.png b/public/icons/icon-maskable-512x512.png new file mode 100644 index 0000000..0fd4c14 Binary files /dev/null and b/public/icons/icon-maskable-512x512.png differ diff --git a/public/icons/orders-shortcut.png b/public/icons/orders-shortcut.png new file mode 100644 index 0000000..58bdc40 Binary files /dev/null and b/public/icons/orders-shortcut.png differ diff --git a/public/icons/products-shortcut.png b/public/icons/products-shortcut.png new file mode 100644 index 0000000..58bdc40 Binary files /dev/null and b/public/icons/products-shortcut.png differ diff --git a/public/icons/stops-shortcut.png b/public/icons/stops-shortcut.png new file mode 100644 index 0000000..58bdc40 Binary files /dev/null and b/public/icons/stops-shortcut.png differ diff --git a/scripts/generate-pwa-icons.js b/scripts/generate-pwa-icons.js new file mode 100644 index 0000000..f046d6a --- /dev/null +++ b/scripts/generate-pwa-icons.js @@ -0,0 +1,36 @@ +// scripts/generate-pwa-icons.js +// Generates the full PWA icon set from public/favicon.svg +// Run: node scripts/generate-pwa-icons.js +const fs = require("fs"); +const path = require("path"); +const sharp = require("sharp"); + +const SIZES = [72, 96, 128, 144, 152, 192, 384, 512]; +const OUT_DIR = path.join(__dirname, "..", "public", "icons"); + +const SVG_PATH = path.join(__dirname, "..", "public", "favicon.svg"); +const svg = fs.readFileSync(SVG_PATH); + +async function main() { + fs.mkdirSync(OUT_DIR, { recursive: true }); + for (const size of SIZES) { + await sharp(svg).resize(size, size).png().toFile(path.join(OUT_DIR, `icon-${size}x${size}.png`)); + console.log(`✓ icon-${size}x${size}.png`); + } + // Maskable: same icon, with 20% safe-area padding baked in + await sharp(svg).resize(410, 410).extend({ + top: 51, bottom: 51, left: 51, right: 51, + background: { r: 22, g: 77, b: 46, alpha: 1 }, + }).png().toFile(path.join(OUT_DIR, "icon-maskable-512x512.png")); + console.log("✓ icon-maskable-512x512.png"); + // Badge + await sharp(svg).resize(72, 72).png().toFile(path.join(OUT_DIR, "badge-72x72.png")); + console.log("✓ badge-72x72.png"); + // Shortcuts (same icon, 96x96) + for (const name of ["orders-shortcut", "products-shortcut", "stops-shortcut"]) { + await sharp(svg).resize(96, 96).png().toFile(path.join(OUT_DIR, `${name}.png`)); + console.log(`✓ ${name}.png`); + } +} + +main().catch((err) => { console.error(err); process.exit(1); });