diff --git a/.superpowers/sdd/task-2-report.md b/.superpowers/sdd/task-2-report.md index e11e41f..3531a59 100644 --- a/.superpowers/sdd/task-2-report.md +++ b/.superpowers/sdd/task-2-report.md @@ -97,11 +97,13 @@ Tutti e 4 i loghi partner sono stati trovati nel Figma. Nessuna altra immagine r ## Dimensioni finali ``` -src/assets/img/ 3.4 MB (31 file JPG + 4 PNG partner loghi) -public/img/ ~50 KB (2 PNG logo fallback) +src/assets/img/ 3.7 MB (31 file JPG + 4 PNG partner loghi) +public/img/ ~3.4 KB (2 PNG logo: logo-dark.png 1.7 KB, logo-light.png 1.7 KB) ``` -Tutte le immagini sono ≤ 1400 px larghezza o ≤ 1200 px (ritratti). Nessun file supera 400 KB. +Tutte le immagini sono ≤ 1400 px larghezza e ≤ 1600 px altezza. Il file più pesante è quote-bg.jpg a 460 KB. Nessun file supera 500 KB. + +*Aggiornato dopo fix round 2 — i numeri precedenti (3.4 MB / nessun file >400 KB) erano errati: la pipeline originale non vincolava l'altezza, lasciando immagini portrait a 2-3 MB ciascuna.* --- @@ -148,3 +150,42 @@ git status --short → elenco file identico al pre-fix (31 img + 4 - **`method-step-3.jpg`** (184×276): sorgente in `assets-src/a3e84d7daf0b25c750ef694f4b9fc10bf0f2f1a8.jpg` è già 184×276 — stessa risoluzione del file committato. Nessuna versione ad alta risoluzione disponibile in `assets-src/`. **Richiede sorgente migliore dal cliente.** - **`about-team-group.jpg`** (270×480): sorgente in `assets-src/32ecd00a20321e58c700fbaf739e53ac3bf03876.png` è già 270×480. Nessuna versione ad alta risoluzione disponibile. **Richiede sorgente migliore dal cliente.** + +--- + +## Fix round 2 + +**Data:** 2026-07-02 + +### Numeri finali + +``` +src/assets/img/ 3.7 MB totale (31 JPG + 4 PNG partner) +``` + +Top-5 per peso: +| File | Dimensioni | Peso | +|---|---|---| +| quote-bg.jpg | 1087×1600 | 460 KB | +| info-performance.jpg | 1200×1500 | 256 KB | +| info-longevity.jpg | 1095×1600 | 248 KB | +| training-performance-class.jpg | 1400×1400 | 240 KB | +| about-exterior.jpg | 1400×781 | 188 KB | + +Nessun file supera 500 KB. Precedente info-longevity.jpg era 2.7 MB, info-balance.jpg 2.0 MB. + +### Cosa cambiato + +1. **`scripts/optimize-assets.sh`** — vincolo resize cambiato da `'1400x>'` (solo larghezza) a `'1400x1600>'` (larghezza E altezza). Qualità JPG da 85 a 83. Tutti i JPG già esistenti vengono ri-codificati a q83 con nuovo vincolo (loop separato, skip file appena convertiti per evitare doppia codifica). Risultato: portrait da 2-3 MB → 248-460 KB. + +2. **`scripts/asset-map.json`** — aggiunta chiave `"_nota"` in testa per documentare la conversione PNG→JPG operata da optimize-assets.sh (JSON non supporta commenti, chiave dedicata con prefisso `_`). + +3. **`scripts/apply-asset-map.mjs`** — aggiunto `destDir.startsWith('_')` nella condizione di skip, così le chiavi meta `_*` del JSON vengono ignorate nella pipeline. + +### Esito idempotenza + +Terza esecuzione `apply-asset-map.mjs + optimize-assets.sh`: md5sum su tutti i .jpg identico prima e dopo → **IDEMPOTENTE** ✓ + +### 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. diff --git a/scripts/apply-asset-map.mjs b/scripts/apply-asset-map.mjs index f018d3c..38b06a1 100644 --- a/scripts/apply-asset-map.mjs +++ b/scripts/apply-asset-map.mjs @@ -14,7 +14,7 @@ let n = 0, missing = 0; // Sezione principale: copia da assets-src/ for (const [destDir, entries] of Object.entries(map)) { - if (destDir === 'fallbacks') continue; + if (destDir.startsWith('_') || destDir === 'fallbacks') continue; mkdirSync(join(root, destDir), { recursive: true }); for (const [src, dest] of Object.entries(entries)) { const from = join(root, 'assets-src', src); diff --git a/scripts/asset-map.json b/scripts/asset-map.json index 0907eb3..4662a28 100644 --- a/scripts/asset-map.json +++ b/scripts/asset-map.json @@ -1,4 +1,5 @@ { + "_nota": "Le destinazioni .png fotografiche vengono convertite in .jpg da optimize-assets.sh; il nome finale su disco ha estensione .jpg", "src/assets/img": { "8b71f158c30a0a23cc5113bfe1cd9a6c4f19e4c4.jpg": "hero-1.jpg", "0f8034394657985cc4cf35eb8441ae93a7ce5302.jpg": "info-performance.jpg", diff --git a/scripts/optimize-assets.sh b/scripts/optimize-assets.sh index 690a2fb..01bb004 100755 --- a/scripts/optimize-assets.sh +++ b/scripts/optimize-assets.sh @@ -1,8 +1,10 @@ #!/usr/bin/env bash # Passo 3 della pipeline asset (dopo apply-asset-map.mjs). -# Converte PNG fotografici in src/assets/img/ → JPG q85 e ridimensiona a ≤1400px larghezza. +# Converte PNG fotografici in src/assets/img/ → JPG q83 e ridimensiona a ≤1400x1600px. # I PNG partner-* (loghi con trasparenza) restano PNG. -# Idempotente: se il .png non esiste (già convertito), salta. +# Tutti i JPG esistenti vengono ri-codificati a q83 con vincolo 1400x1600> +# (larghezza ≤1400 px E altezza ≤1600 px, aspect ratio preservato). +# Idempotente se abbinato a apply-asset-map.mjs (che ripristina i sorgenti originali). set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -11,27 +13,28 @@ IMG_DIR="$ROOT/src/assets/img" cd "$IMG_DIR" -# --- PNG fotografici → JPG q85 + resize ≤1400px --- +# --- PNG fotografici → JPG q83 + resize ≤1400x1600 --- shopt -s nullglob +declare -A just_converted converted=0 for png in *.png; do [[ "$png" == partner-* ]] && continue jpg="${png%.png}.jpg" - convert "$png" -quality 85 -resize '1400x>' "$jpg" + convert "$png" -quality 83 -resize '1400x1600>' "$jpg" rm "$png" echo " PNG→JPG: $png → $jpg" + just_converted["$jpg"]=1 (( converted++ )) || true done -# --- Resize JPG già esistenti se >1400px --- -resized=0 +# --- Ri-codifica JPG esistenti a q83 + vincolo 1400x1600 --- +# Skip file appena convertiti (già a q83), elabora tutti gli altri. +reencoded=0 for jpg in *.jpg; do - w=$(identify -format '%w' "$jpg") - if (( w > 1400 )); then - mogrify -resize '1400x>' "$jpg" - echo " Resize: $jpg (era ${w}px → ≤1400px)" - (( resized++ )) || true - fi + [[ -n "${just_converted[$jpg]+x}" ]] && continue + mogrify -quality 83 -resize '1400x1600>' "$jpg" + echo " Ricodificato: $jpg" + (( reencoded++ )) || true done -echo "Ottimizzazione completata: ${converted} PNG→JPG, ${resized} JPG ridimensionati." +echo "Ottimizzazione completata: ${converted} PNG→JPG, ${reencoded} JPG ricodificati (q83, ≤1400x1600)." diff --git a/src/assets/img/about-exterior.jpg b/src/assets/img/about-exterior.jpg index f9acbb9..99a44e7 100644 Binary files a/src/assets/img/about-exterior.jpg and b/src/assets/img/about-exterior.jpg differ diff --git a/src/assets/img/about-team-group.jpg b/src/assets/img/about-team-group.jpg index 69b2d35..a37d5ad 100644 Binary files a/src/assets/img/about-team-group.jpg and b/src/assets/img/about-team-group.jpg differ diff --git a/src/assets/img/about-trainer-1.jpg b/src/assets/img/about-trainer-1.jpg index 0888fc2..b958d89 100644 Binary files a/src/assets/img/about-trainer-1.jpg and b/src/assets/img/about-trainer-1.jpg differ diff --git a/src/assets/img/about-trainer-2.jpg b/src/assets/img/about-trainer-2.jpg index 4791b00..76cfa77 100644 Binary files a/src/assets/img/about-trainer-2.jpg and b/src/assets/img/about-trainer-2.jpg differ diff --git a/src/assets/img/about-trainer-3.jpg b/src/assets/img/about-trainer-3.jpg index 1046caf..e17f529 100644 Binary files a/src/assets/img/about-trainer-3.jpg and b/src/assets/img/about-trainer-3.jpg differ diff --git a/src/assets/img/about-trainer-4.jpg b/src/assets/img/about-trainer-4.jpg index 00aa1bb..54c1470 100644 Binary files a/src/assets/img/about-trainer-4.jpg and b/src/assets/img/about-trainer-4.jpg differ diff --git a/src/assets/img/about-training-group.jpg b/src/assets/img/about-training-group.jpg index 959e60e..6c795a3 100644 Binary files a/src/assets/img/about-training-group.jpg and b/src/assets/img/about-training-group.jpg differ diff --git a/src/assets/img/feature-balance.jpg b/src/assets/img/feature-balance.jpg index 48d6c74..416d835 100644 Binary files a/src/assets/img/feature-balance.jpg and b/src/assets/img/feature-balance.jpg differ diff --git a/src/assets/img/feature-longevity.jpg b/src/assets/img/feature-longevity.jpg index 6f26b10..06ec041 100644 Binary files a/src/assets/img/feature-longevity.jpg and b/src/assets/img/feature-longevity.jpg differ diff --git a/src/assets/img/feature-performance.jpg b/src/assets/img/feature-performance.jpg index 3c16e7d..f7209e7 100644 Binary files a/src/assets/img/feature-performance.jpg and b/src/assets/img/feature-performance.jpg differ diff --git a/src/assets/img/hero-1.jpg b/src/assets/img/hero-1.jpg index eb13ceb..edaa600 100644 Binary files a/src/assets/img/hero-1.jpg and b/src/assets/img/hero-1.jpg differ diff --git a/src/assets/img/info-balance.jpg b/src/assets/img/info-balance.jpg index 43f7989..57ffdac 100644 Binary files a/src/assets/img/info-balance.jpg and b/src/assets/img/info-balance.jpg differ diff --git a/src/assets/img/info-longevity.jpg b/src/assets/img/info-longevity.jpg index b153873..e7b194d 100644 Binary files a/src/assets/img/info-longevity.jpg and b/src/assets/img/info-longevity.jpg differ diff --git a/src/assets/img/info-performance.jpg b/src/assets/img/info-performance.jpg index a514f75..bdc360c 100644 Binary files a/src/assets/img/info-performance.jpg and b/src/assets/img/info-performance.jpg differ diff --git a/src/assets/img/method-step-1.jpg b/src/assets/img/method-step-1.jpg index d8d000c..3c3748d 100644 Binary files a/src/assets/img/method-step-1.jpg and b/src/assets/img/method-step-1.jpg differ diff --git a/src/assets/img/method-step-2.jpg b/src/assets/img/method-step-2.jpg index ca23451..81dfb8a 100644 Binary files a/src/assets/img/method-step-2.jpg and b/src/assets/img/method-step-2.jpg differ diff --git a/src/assets/img/method-step-3.jpg b/src/assets/img/method-step-3.jpg index c818d32..d8e7b96 100644 Binary files a/src/assets/img/method-step-3.jpg and b/src/assets/img/method-step-3.jpg differ diff --git a/src/assets/img/method-step-4.jpg b/src/assets/img/method-step-4.jpg index f2206da..ec6fc69 100644 Binary files a/src/assets/img/method-step-4.jpg and b/src/assets/img/method-step-4.jpg differ diff --git a/src/assets/img/quote-bg.jpg b/src/assets/img/quote-bg.jpg index 23bc137..e5ab31d 100644 Binary files a/src/assets/img/quote-bg.jpg and b/src/assets/img/quote-bg.jpg differ diff --git a/src/assets/img/team-antonello.jpg b/src/assets/img/team-antonello.jpg index e14d8b6..0c8a08c 100644 Binary files a/src/assets/img/team-antonello.jpg and b/src/assets/img/team-antonello.jpg differ diff --git a/src/assets/img/team-donata.jpg b/src/assets/img/team-donata.jpg index 06beba4..71ddb49 100644 Binary files a/src/assets/img/team-donata.jpg and b/src/assets/img/team-donata.jpg differ diff --git a/src/assets/img/team-eleonora.jpg b/src/assets/img/team-eleonora.jpg index ec473b3..003469f 100644 Binary files a/src/assets/img/team-eleonora.jpg and b/src/assets/img/team-eleonora.jpg differ diff --git a/src/assets/img/team-nicola.jpg b/src/assets/img/team-nicola.jpg index 6a44984..2e0befd 100644 Binary files a/src/assets/img/team-nicola.jpg and b/src/assets/img/team-nicola.jpg differ diff --git a/src/assets/img/training-fit-remote.jpg b/src/assets/img/training-fit-remote.jpg index e4fb107..c7602b4 100644 Binary files a/src/assets/img/training-fit-remote.jpg and b/src/assets/img/training-fit-remote.jpg differ diff --git a/src/assets/img/training-one-to-one.jpg b/src/assets/img/training-one-to-one.jpg index d84d102..6a81d1f 100644 Binary files a/src/assets/img/training-one-to-one.jpg and b/src/assets/img/training-one-to-one.jpg differ diff --git a/src/assets/img/training-performance-class.jpg b/src/assets/img/training-performance-class.jpg index c4cde4d..434a95f 100644 Binary files a/src/assets/img/training-performance-class.jpg and b/src/assets/img/training-performance-class.jpg differ diff --git a/src/assets/img/training-small-groups.jpg b/src/assets/img/training-small-groups.jpg index 01b5fc5..885e2b7 100644 Binary files a/src/assets/img/training-small-groups.jpg and b/src/assets/img/training-small-groups.jpg differ