feat: asset immagini estratti da Figma e mappati
Estrazione da Web Insanity.fig, identificazione visiva, mappatura semantica e ottimizzazione peso. 31 immagini in src/assets/img/, 2 loghi InsanityLab (fallback da Dati/) in public/img/. Tutti i 4 partner logo trovati nel Figma. PNG foto convertite a JPG q85 per ridurre da 99 MB a 3.4 MB totali. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,19 @@
|
||||
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;
|
||||
for (const [destDir, entries] of Object.entries(map)) {
|
||||
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++;
|
||||
}
|
||||
}
|
||||
console.log(`Copiate ${n} immagini${missing ? `, ${missing} mancanti` : ''}`);
|
||||
process.exit(missing ? 1 : 0);
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"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",
|
||||
"bb632b8da5e9e4d4b05207f04a8883163caac53a.png": "training-small-groups.png",
|
||||
"91aa82b5dedee8ad56c6db249c9947c7d6d9c89a.png": "training-performance-class.png",
|
||||
"86c1363b22a8fb3bb7b2bf044e52856d474d927e.jpg": "training-fit-remote.jpg",
|
||||
"0b6cf69438af21bbca934b0b27995ac4fa967451.png": "team-donata.png",
|
||||
"1cc33c41368d47c30d949e991c5a442ff51d1a91.png": "team-nicola.png",
|
||||
"a75ca105e362e3c3bc5cfe0bfc7c39e69645660d.png": "team-eleonora.png",
|
||||
"e3c84f9989df8b160d185bd40b774e460a4f6896.png": "team-antonello.png",
|
||||
"88cfcd5fd321b5ca6e4833e3980b792a95090545.jpg": "method-step-1.jpg",
|
||||
"d21671bb08f4f2eadde09f91a46b568788a209d7.jpg": "method-step-2.jpg",
|
||||
"a3e84d7daf0b25c750ef694f4b9fc10bf0f2f1a8.jpg": "method-step-3.jpg",
|
||||
"e50b6f7818b3742ddba0f4ad4a162a8aafc505e0.jpg": "method-step-4.jpg",
|
||||
"bee22f37bba6f18d3defcd47762375e1c8ddd0f5.png": "partner-edenred.png",
|
||||
"cf079250ea1db7f0055b76af21e04b1ed1870770.png": "partner-welbee.png",
|
||||
"872c3679df24bd0d3fdca7c4cb9a24d1836309a0.png": "partner-howden.png",
|
||||
"014a7708ad61b12c5765ad4a60539d2fa325f9aa.png": "partner-aon.png",
|
||||
"8ffc5f7a2428b0d0eabd09f676ab98d3e5644f0d.png": "about-exterior.png",
|
||||
"32ecd00a20321e58c700fbaf739e53ac3bf03876.png": "about-team-group.png",
|
||||
"d4608b102eb67ac067e6585250b3c37963db1d34.png": "about-training-group.png",
|
||||
"dafcc19362e3a76dd20e9a656499a8068a3a9fca.png": "about-trainer-1.png",
|
||||
"9c50f1d3b3a0477e80e03c0849d3d4687610b461.png": "about-trainer-2.png",
|
||||
"c51a49b9be7f1b1a31de6b2f5261c8c5b5fdab52.png": "about-trainer-3.png",
|
||||
"3341a11b7153349a23c75b1fa2a9a62d48953330.png": "about-trainer-4.png"
|
||||
},
|
||||
"public/img": {
|
||||
"logo-dark.png": "logo-dark.png",
|
||||
"logo-light.png": "logo-light.png"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
FIG="../FigmaDoc/Web Insanity.fig"
|
||||
OUT="assets-src"
|
||||
rm -rf "$OUT" && mkdir -p "$OUT"
|
||||
unzip -o -j -q "$FIG" 'images/*' -d "$OUT"
|
||||
cd "$OUT"
|
||||
for f in *; do
|
||||
case "$(file --brief --mime-type "$f")" in
|
||||
image/png) mv "$f" "$f.png" ;;
|
||||
image/jpeg) mv "$f" "$f.jpg" ;;
|
||||
image/webp) mv "$f" "$f.webp" ;;
|
||||
*) rm -f "$f" ;;
|
||||
esac
|
||||
done
|
||||
echo "Estratte: $(ls | wc -l) immagini in $OUT/"
|
||||
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 398 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 96 KiB |