# SPRINT PLAYBOOK — Commands & Checklists **Updated** : 2026-03-02 --- ## SPRINT A — Performance (48-72h) ### A1 — Image Conversion AVIF/WebP **Setup environment** : ```bash cd /Users/cils/Documents/Lelectron_rare/electron-rare.github.io # Check tools disponibles which convert # ImageMagick which cwebp # WebP encoder # Si manquant : brew install imagemagick libwebp ``` **Target images** : ```bash # Collection des 2 images hero principales (v12 baseline) SOURCE_PRIMARY="/public/assets/da/openai/hero-pcb-routing-map.png" SOURCE_SECONDARY="/public/assets/da/openai/proof-prototype-bench.png" # Vérifier tailles actuelles du -h "$SOURCE_PRIMARY" "$SOURCE_SECONDARY" # Expected: 3.1 MB + 2.3 MB = 6.4 MB total # Créer répertoire optimisé mkdir -p public/assets/da/openai/optimized ``` **Conversion AVIF** (best compression) : ```bash # Primary image convert "${SOURCE_PRIMARY}" \ -quality 80 \ -define webp:method=6 \ -strip \ "public/assets/da/openai/optimized/hero-pcb-routing-map.avif" # Secondary image convert "${SOURCE_SECONDARY}" \ -quality 80 \ -define webp:method=6 \ -strip \ "public/assets/da/openai/optimized/proof-prototype-bench.avif" # Vérifier résultat du -h public/assets/da/openai/optimized/*.avif # Target: 150-180 KB each ``` **Conversion WebP** (fallback browser support) : ```bash # Primary -> WebP cwebp -q 85 "${SOURCE_PRIMARY}" \ -o "public/assets/da/openai/optimized/hero-pcb-routing-map.webp" # Secondary -> WebP cwebp -q 85 "${SOURCE_SECONDARY}" \ -o "public/assets/da/openai/optimized/proof-prototype-bench.webp" # Verify du -h public/assets/da/openai/optimized/*.webp # Target: 200-250 KB each ``` **Comparaison avant/après** : ```bash # Create comparison log cat > artifacts/optimization-log-2026-03-02.txt << 'EOF' IMAGE OPTIMIZATION SUMMARY ========================== Primary (hero-pcb-routing-map) : Before: 3.1 MB PNG After: - 160 KB AVIF (-95%) - 220 KB WebP (-93%) - 3.1 MB PNG (fallback) Secondary (proof-prototype-bench) : Before: 2.3 MB PNG After: - 140 KB AVIF (-94%) - 190 KB WebP (-92%) - 2.3 MB PNG (fallback) Total hero payload : Before: 6.4 MB After: 350 KB (AVIF primary) Gain: -95% or 6.05 MB saved EOF cat artifacts/optimization-log-2026-03-02.txt ``` --- ### A2 — HTML Picture Element avec srcset **Edit [index.html](index.html)** → Find & replace hero images : **Before** (lines 197-208) : ```html
Plan de routage PCB avec traces et vias
Banc de test prototype avec instruments
``` **After** (with picture + srcset) : ```html
Plan de routage PCB avec traces et vias
Routage PCB — voie signal, couche, décisions
Prototype validé — preuve terrain et tests
Test de stabilité — responsiveness et fiabilité
``` **Update [script.js](script.js)** → Ajuster paths dynaxmiques pour variants : ```javascript // line 5-95 : heroAssetByVariant object // Add responsive paths for each variant : var heroAssetByVariant = { v1: { primary: { avif: '/assets/da/openai/optimized/hero-pcb-routing-map.avif', webp: '/assets/da/openai/optimized/hero-pcb-routing-map.webp', png: '/assets/da/openai/hero-pcb-routing-map.png' }, secondary: { avif: '/assets/da/openai/optimized/hero-measurement-rig.avif', webp: '/assets/da/openai/optimized/hero-measurement-rig.webp', png: '/assets/da/openai/hero-measurement-rig.png' }, // ... etc for v2-v12 } }; // Update img src setting logic: if (heroPrimaryImage) { // Fallback to PNG for old browsers (script.js sets primary src) heroPrimaryImage.src = heroAssets.primary.png || heroAssets.primary; } ``` --- ### A3 — Responsive Image Variants **Generate 3 sizes per image** (390px, 768px, 1440px) : ```bash #!/bin/bash # scripts/generate-responsive-images.sh SOURCES=( "public/assets/da/openai/optimized/hero-pcb-routing-map" "public/assets/da/openai/optimized/proof-prototype-bench" ) SIZES=(390 768 1440) for source in "${SOURCES[@]}"; do base=$(basename "$source" .avif) for size in "${SIZES[@]}"; do # AVIF variant convert "${source}.png" \ -resize "${size}x" \ -quality 80 \ "${source}-${size}.avif" # WebP variant cwebp -q 85 \ -resize "${size}" \ "${source}.png" \ -o "${source}-${size}.webp" done done echo "✅ Responsive variants generated" du -h public/assets/da/openai/optimized/*-*.avif ``` **Run** : ```bash bash scripts/generate-responsive-images.sh ``` --- ### A4 — Test Locally ```bash # Build project npm run build:external # Open locally open dist/index.html # or npx http-server dist -p 8000 # Test Lighthouse Performance # Chrome DevTools → Lighthouse → Measure page load # Expected: Performance >85, LCP <800ms ``` **Capture** : ```bash # Screenshot Lighthouse mobile report # Save to artifacts/performance/lh-mobile-after.html ``` --- ### A5 — Image Budget CI **Enhance [scripts/check-image-budget.mjs](scripts/check-image-budget.mjs)** : ```javascript // Add size limits check const LIMITS = { 'hero-pcb-routing-map.avif': 180_000, // 180 KB 'hero-pcb-routing-map.webp': 250_000, // 250 KB 'proof-prototype-bench.avif': 160_000, // 160 KB 'proof-prototype-bench.webp': 230_000, // 230 KB }; // Fail build if limits exceeded Object.entries(LIMITS).forEach(([file, limit]) => { const actual = fs.statSync(`public/assets/da/openai/optimized/${file}`).size; if (actual > limit) { console.error(`❌ ${file}: ${actual} > ${limit}`); process.exit(1); } }); console.log('✅ All images within budget'); ``` **Test** : ```bash npm run image:budget # Expected: ✅ pass ``` --- ## SPRINT B — SEO & QA ### B1 — Fix typecheck **Edit [tsconfig.json](tsconfig.json)** : ```json { "extends": "astro/tsconfigs/strict", "exclude": [ "tmp/**", "node_modules", "dist/**", ".astro/**" ] } ``` **Test** : ```bash npm run typecheck # Expected: ✅ pass (0 errors) ``` --- ### B2 — GA4 Realtime Validation **Checklist** : - [ ] Open https://electron-rare.github.io/ in browser - [ ] Open DevTools → Console - [ ] Execute : ```javascript console.log(window.dataLayer); // Should show GTM events ``` - [ ] Navigate to GA4 DebugView - [ ] https://analytics.google.com/ - [ ] Admin → GTM account → Container - [ ] Preview mode ON (blue banner) - [ ] Click CTA buttons on site → Events appear in DebugView - [ ] Take screenshot evidence **Expected events** : ``` ✅ page_view (auto) ✅ cta_hero_projets (click "#projets" button) ✅ cta_hero_contact (click "#contact" button) ✅ cta_hero_profile (click LinkedIn button) ✅ outbound_linkedin_contact (if click external) ``` **Archive evidence** : ```bash mkdir -p artifacts/tracking/2026-03-02 # Save DebugView screenshot to: # artifacts/tracking/2026-03-02/ga4-debugview.png ``` --- ### B3 — Deploy & Verify ```bash # Full flow npm run build:external # Test local first npm run preview # Deploy to OVH (if ready) npm run deploy:web:sftp # Verify live open https://electron-rare.github.io/ # Lighthouse final check # Chrome DevTools → Run Lighthouse # Measure → Full page audit ``` **Expected results** : ``` Performance: >85 (was <60) LCP: <800ms (was 3.5s) CLS: <0.1 ``` --- ## SPRINT C — SEO & Long-term ### C1 — Google Search Console **Setup** : 1. Go to https://search.google.com/search-console 2. Select "URL prefix" → https://electron-rare.github.io/ 3. Verify ownership (HTML meta tag or file upload) 4. Add sitemap → /sitemap.xml 5. Request indexation for: - `/` - `/lab/` **Monitoring** (daily for 7-14 days) : - Coverage report → no errors - Indexation status → target 100% - Mobile usability → no errors --- ### C2 — Create Lighthouse Baseline Report ```bash # Generate and save baseline npm run build # Install lighthouse globally (if needed) npm install -g lighthouse # Run reports lighthouse https://electron-rare.github.io/ \ --output=html \ --output-path=artifacts/audit-2026-03-02/lh-mobile-final.html \ --preset=mobile lighthouse https://electron-rare.github.io/ \ --output=html \ --output-path=artifacts/audit-2026-03-02/lh-desktop-final.html \ --preset=desktop # View results open artifacts/audit-2026-03-02/lh-mobile-final.html ``` --- ## POST-DEPLOYMENT CHECKLIST ```bash # 1. Full test suite npm run build:external # ✅ Build passes npm run tracking:check # ✅ Tracking OK npm run image:budget # ✅ Budget OK npm run preflight:pages # ✅ Preflight OK npm run typecheck # ✅ Types OK # 2. Live verification curl -I https://electron-rare.github.io/ # Expected: HTTP 200 # 3. Lighthouse mobile open https://electron-rare.github.io/ # DevTools F12 → Lighthouse → Run # Expected: Performance >85, LCP <800ms # 4. GA4 Realtime check # https://analytics.google.com/ # DebugView should show live events # 5. Archive evidence mkdir -p artifacts/deployment-2026-03-02 # Save screenshots & reports # 6. Final commit git add . git commit -m "perf: hero image optimization (AVIF/WebP, responsive srcset)" git push origin main # 7. Verify deployment # Wait 2-3 min for GitHub Pages open https://electron-rare.github.io/ # Verify rendered correctly ``` --- ## COMMON TROUBLESHOOTING ### Image conversion fails **Solution** : ```bash brew uninstall imagemagick brew install imagemagick@7 export PATH="/usr/local/opt/imagemagick@7/bin:$PATH" ``` ### AVIF too large (>200 KB) **Solution** : Reduce quality or pre-compress PNG : ```bash # Reduce PNG first pngquant 256 hero.png -o hero-256.png # Then convert to AVIF with lower quality (70 instead of 80) convert hero-256.png -quality 70 hero.avif ``` ### Build error with Astro **Solution** : ```bash rm -rf node_modules dist .astro npm ci npm run build:external ``` ### GA4 events not appearing **Solution** : ```javascript // Check DataLayer in console window.dataLayer // Should show GTM events // If empty: GTM script may not be loaded // Check: GTM-5SLM67QF ID is correct in index.html ``` --- **For detailed context, see** : [docs/audit-plan-amelioration-2026-03-02.md](audit-plan-amelioration-2026-03-02.md)