diff --git a/.superpowers/sdd/task-2-report.md b/.superpowers/sdd/task-2-report.md index 3531a59..6318927 100644 --- a/.superpowers/sdd/task-2-report.md +++ b/.superpowers/sdd/task-2-report.md @@ -189,3 +189,59 @@ Terza esecuzione `apply-asset-map.mjs + optimize-assets.sh`: md5sum su tutti i . ### Esito verifica loghi `public/img/logo-dark.png` (130×19, 1725 B) e `logo-light.png` (135×19, 1701 B) sono **identici** ai file sorgente in `../Dati/logo-dark.png` e `../Dati/logo-light.png` (stessa dimensione byte-level). Non sono placeholder: sono i loghi reali InsanityLab copiati dalla sezione `fallbacks` di asset-map.json tramite apply-asset-map.mjs. Le dimensioni in pixel ridotte (130×19 px) sono caratteristiche del PNG sorgente in Dati/, non di un errore di pipeline. + +--- + +## Fix round 3 + +**Data:** 2026-07-02 + +### Problema chiuso + +`public/img/logo-dark.png` e `logo-light.png` contenevano i loghi del template "PROWESS++" copiati da `../Dati/` (sorgente errato). Sostituiti con i loghi reali "insanitylab" estratti vettorialmente dal PDF Figma. + +### Metodo + +Sorgente: `../FigmaDoc/Homepage.pdf` (1334×10460 pt, 1 pagina). + +Render esplorativi a 72–150 dpi per individuare le zone logo: +- **Logo dark** (header, fondo bianco): riga nav in alto, x≈25pt, y≈10pt +- **Logo light** (footer, fondo scuro `srgb(58,41,41)`): sezione footer, y≈8490pt + +Estrazione finale con `pdftoppm -r 300`, poi ImageMagick: +- Dark: `-fuzz 8% -transparent white -trim -resize 600x -strip` +- Light: `-crop 850x660+130+60` (esclude tagline e colonne destra), `-fuzz 12% -transparent 'srgb(58,41,41)' -trim -resize 600x -strip` + +`-strip` su entrambi garantisce idempotenza md5sum tra esecuzioni successive. + +### Coordinate pdftoppm a 300 dpi (pixel) + +| Logo | -x | -y | -W | -H | crop interno | +|---|---|---|---|---|---| +| dark | 104 | 41 | 895 | 250 | — | +| light | 0 | 35375 | 1800 | 833 | `850x660+130+60` | + +### Dimensioni finali + +| File | Dimensioni | Tipo | +|---|---|---| +| `public/img/logo-dark.png` | **600×108 px** | TrueColorAlpha (PNG trasparente) | +| `public/img/logo-light.png` | **600×342 px** | TrueColorAlpha (PNG trasparente) | + +### Aggiornamenti pipeline + +- Creato `scripts/extract-logos.sh` (bash, `set -euo pipefail`, coordinate fisse, idempotente) +- `scripts/asset-map.json`: rimossa sezione `fallbacks` (loghi ora da extract-logos.sh, non da `../Dati`) +- `scripts/apply-asset-map.mjs`: commento pipeline aggiornato a step 4 +- Ordine pipeline: `extract-fig-images.sh → apply-asset-map.mjs → optimize-assets.sh → extract-logos.sh` + +### Verifica visiva + +- `logo-dark.png`: icona onda/battito cardiaco beige + scritta "insanitylab" scura, layout orizzontale, sfondo trasparente. **Nessun residuo PROWESS++.** +- `logo-light.png`: icona onda/battito cardiaco beige sopra, scritta "insanitylab" beige sotto, layout stacked, sfondo trasparente. **Nessun residuo PROWESS++.** + +### Idempotenza + +``` +md5sum run1 = md5sum run2 → IDEMPOTENTE ✓ +``` diff --git a/public/img/logo-dark.png b/public/img/logo-dark.png index f4c5df5..5535d27 100644 Binary files a/public/img/logo-dark.png and b/public/img/logo-dark.png differ diff --git a/public/img/logo-light.png b/public/img/logo-light.png index 2ff7759..7d5354c 100644 Binary files a/public/img/logo-light.png and b/public/img/logo-light.png differ diff --git a/scripts/apply-asset-map.mjs b/scripts/apply-asset-map.mjs index 38b06a1..931b99c 100644 --- a/scripts/apply-asset-map.mjs +++ b/scripts/apply-asset-map.mjs @@ -1,7 +1,8 @@ -// Pipeline asset: extract-fig-images.sh → apply-asset-map.mjs → optimize-assets.sh +// Pipeline asset: extract-fig-images.sh → apply-asset-map.mjs → optimize-assets.sh → extract-logos.sh // 1. extract-fig-images.sh: estrae hash-named images da .fig → assets-src/ // 2. apply-asset-map.mjs: copia da assets-src/ → destinazioni (src/assets/img, public/img) // 3. optimize-assets.sh: converte PNG fotografici → JPG q85, ridimensiona ≤1400px +// 4. extract-logos.sh: estrae loghi insanitylab da FigmaDoc/Homepage.pdf → public/img/logo-{dark,light}.png import { copyFileSync, mkdirSync, existsSync } from 'node:fs'; import { readFileSync } from 'node:fs'; diff --git a/scripts/asset-map.json b/scripts/asset-map.json index 4662a28..3155034 100644 --- a/scripts/asset-map.json +++ b/scripts/asset-map.json @@ -33,10 +33,5 @@ "c51a49b9be7f1b1a31de6b2f5261c8c5b5fdab52.png": "about-trainer-3.png", "3341a11b7153349a23c75b1fa2a9a62d48953330.png": "about-trainer-4.png" }, - "fallbacks": { - "public/img": { - "../Dati/logo-dark.png": "logo-dark.png", - "../Dati/logo-light.png": "logo-light.png" - } - } + "_loghi": "logo-dark.png e logo-light.png estratti da extract-logos.sh (FigmaDoc/Homepage.pdf), non da ../Dati" } diff --git a/scripts/extract-logos.sh b/scripts/extract-logos.sh new file mode 100755 index 0000000..a84b5bc --- /dev/null +++ b/scripts/extract-logos.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# extract-logos.sh — estrae loghi insanitylab dal PDF Figma Homepage +# Pipeline: extract-fig-images.sh → apply-asset-map.mjs → optimize-assets.sh → extract-logos.sh +# Idempotente: stessi file ad ogni esecuzione, coordinate fisse. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +PDF="$ROOT/../FigmaDoc/Homepage.pdf" +OUT="$ROOT/public/img" +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT + +if [[ ! -f "$PDF" ]]; then + echo "ERRORE: PDF non trovato: $PDF" >&2 + exit 1 +fi + +mkdir -p "$OUT" + +echo "Estrazione loghi da $PDF..." + +# ── Logo DARK (header, su fondo bianco) ───────────────────────────────────── +# Zona: x=104, y=41, W=895, H=250 px a 300dpi (pt: x≈25, y≈10, W≈215, H≈60) +pdftoppm -png -r 300 -f 1 -l 1 \ + -x 104 -y 41 -W 895 -H 250 \ + "$PDF" "$WORK/hdr" + +convert "$WORK/hdr-1.png" \ + -fuzz 8% -transparent white \ + -trim +repage \ + -resize 600x \ + -strip \ + "$OUT/logo-dark.png" + +# ── Logo LIGHT (footer, su fondo scuro #3A2929) ───────────────────────────── +# Zona: x=0, y=35375, W=1800, H=833 px a 300dpi (pt: x≈0, y≈8490, W≈432, H≈200) +# poi crop interno: x=130, y=60, W=850, H=660 per includere solo icona+testo +pdftoppm -png -r 300 -f 1 -l 1 \ + -x 0 -y 35375 -W 1800 -H 833 \ + "$PDF" "$WORK/ftr" + +convert "$WORK/ftr-1.png" \ + -crop 850x660+130+60 +repage \ + -fuzz 12% -transparent 'srgb(58,41,41)' \ + -trim +repage \ + -resize 600x \ + -strip \ + "$OUT/logo-light.png" + +echo "Logo dark: $OUT/logo-dark.png $(identify -format '%wx%h' "$OUT/logo-dark.png")" +echo "Logo light: $OUT/logo-light.png $(identify -format '%wx%h' "$OUT/logo-light.png")" +echo "Done."