Files
InsanityLab-web/.superpowers/sdd/review-551957e..810e5d8.diff
T
Adriano b913a2bf90 registri dei piani in git (AI-OS#309)
Refs gitea:Adriano/AI-OS#310

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 10:36:26 +02:00

309 lines
17 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Review package: 551957e..HEAD
## Commits
810e5d8 fix: limite altezza in optimize-assets, pesi immagini e report dimensioni
## Files changed
.superpowers/sdd/task-2-report.md | 47 ++++++++++++++++++++++++--
scripts/apply-asset-map.mjs | 2 +-
scripts/asset-map.json | 1 +
scripts/optimize-assets.sh | 29 +++++++++-------
src/assets/img/about-exterior.jpg | Bin 202579 -> 190714 bytes
src/assets/img/about-team-group.jpg | Bin 26902 -> 25553 bytes
src/assets/img/about-trainer-1.jpg | Bin 189023 -> 148343 bytes
src/assets/img/about-trainer-2.jpg | Bin 173351 -> 135795 bytes
src/assets/img/about-trainer-3.jpg | Bin 148483 -> 118975 bytes
src/assets/img/about-trainer-4.jpg | Bin 214745 -> 162617 bytes
src/assets/img/about-training-group.jpg | Bin 153758 -> 143401 bytes
src/assets/img/feature-balance.jpg | Bin 96137 -> 101290 bytes
src/assets/img/feature-longevity.jpg | Bin 27449 -> 25258 bytes
src/assets/img/feature-performance.jpg | Bin 79280 -> 79834 bytes
src/assets/img/hero-1.jpg | Bin 648492 -> 97196 bytes
src/assets/img/info-balance.jpg | Bin 2030838 -> 136394 bytes
src/assets/img/info-longevity.jpg | Bin 2813013 -> 252166 bytes
src/assets/img/info-performance.jpg | Bin 243040 -> 260295 bytes
src/assets/img/method-step-1.jpg | Bin 880847 -> 105410 bytes
src/assets/img/method-step-2.jpg | Bin 808269 -> 175977 bytes
src/assets/img/method-step-3.jpg | Bin 44942 -> 11290 bytes
src/assets/img/method-step-4.jpg | Bin 30953 -> 30346 bytes
src/assets/img/quote-bg.jpg | Bin 740531 -> 469103 bytes
src/assets/img/team-antonello.jpg | Bin 193104 -> 149301 bytes
src/assets/img/team-donata.jpg | Bin 180165 -> 138907 bytes
src/assets/img/team-eleonora.jpg | Bin 184226 -> 145996 bytes
src/assets/img/team-nicola.jpg | Bin 220263 -> 171336 bytes
src/assets/img/training-fit-remote.jpg | Bin 193144 -> 38375 bytes
src/assets/img/training-one-to-one.jpg | Bin 40927 -> 38837 bytes
src/assets/img/training-performance-class.jpg | Bin 259348 -> 242256 bytes
src/assets/img/training-small-groups.jpg | Bin 181470 -> 142807 bytes
31 files changed, 62 insertions(+), 17 deletions(-)
## Diff
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
@@ -90,25 +90,27 @@
| `logo-dark.png` | Assente in `Web Insanity.fig` | Fallback da `../Dati/logo-dark.png` ✓ |
| `logo-light.png` | Assente in `Web Insanity.fig` | Fallback da `../Dati/logo-light.png` ✓ |
Tutti e 4 i loghi partner sono stati trovati nel Figma. Nessuna altra immagine richiesta dal brief risulta mancante.
---
## 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.*
---
## Note tecnica — PNG → JPG
Le foto trainer e training erano estratte dal Figma come PNG lossless (6–8 MB ciascuna). Convertite a JPG qualità 85 con resize a 1200 px max → risparmio ~98% per file. I loghi partner restano PNG per preservare sfondo trasparente.
Il file `asset-map.json` referenzia gli hash originali (estensione .png/.jpg come estratti). I file di destinazione finali hanno tutti estensione .jpg (eccetto loghi partner .png), il che diverge dai nomi originali nel map ma i file in `src/assets/img/` riflettono il formato convertito.
---
@@ -141,10 +143,49 @@ node scripts/apply-asset-map.mjs → "Copiate 33 immagini"
./scripts/optimize-assets.sh → 16 PNG→JPG, 5 JPG ridimensionati (hero-1, info-balance, info-longevity, method-step-1, method-step-2)
git status --short → elenco file identico al pre-fix (31 img + 4 PNG partner)
18 file binari rigenerati (ricompressione diversa da conversione manuale originale)
→ ricommittati: repo = output pipeline ✓
```
### Esito punto 4 — bassa risoluzione
- **`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
@@ -7,21 +7,21 @@ import { copyFileSync, mkdirSync, existsSync } from 'node:fs';
import { readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
const map = JSON.parse(readFileSync(join(root, 'scripts/asset-map.json'), 'utf8'));
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);
if (!existsSync(from)) { console.error(`MANCANTE: ${src}`); missing++; continue; }
copyFileSync(from, join(root, destDir, dest));
n++;
}
}
// Sezione fallbacks: copia da path relativo alla root del repo (es. ../Dati/)
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,11 +1,12 @@
{
+ "_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",
"432d397a342b4e8312a3a13a4fea836b3e867a64.jpg": "info-balance.jpg",
"d7fcf0aa827ec50f660145c0d319049b9153fefb.jpg": "info-longevity.jpg",
"6d6025730c3d0b73c0052fa67b1bb111c8462a08.jpg": "feature-performance.jpg",
"16e611de84f51bf5d01486a5e74ba0f8249850be.jpg": "feature-balance.jpg",
"98f1f8d257dfeffbaf35507d033e5bb51e08895e.png": "feature-longevity.png",
"28e8157dc88a42cffdbcd028e4cb02a6eb3de337.png": "quote-bg.png",
"85808a0c9aeb461c70c059b013eab47faa4fc4f1.png": "training-one-to-one.png",
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,37 +1,40 @@
#!/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)"
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
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