Perf: Fotos JPG→WebP, 18 MB → 373 KB (SW by-v959)
cwebp: eric-ward 1200px, chewy 1400px, baptist-standaert 1600px, foto-strip 700x700px — alle q80-82
|
|
@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request):
|
||||||
raise _HE(404, "Nicht gefunden.")
|
raise _HE(404, "Nicht gefunden.")
|
||||||
return _media_response(filepath)
|
return _media_response(filepath)
|
||||||
|
|
||||||
APP_VER = "958" # muss mit APP_VER in app.js übereinstimmen
|
APP_VER = "959" # muss mit APP_VER in app.js übereinstimmen
|
||||||
|
|
||||||
@app.get("/.well-known/assetlinks.json")
|
@app.get("/.well-known/assetlinks.json")
|
||||||
async def assetlinks():
|
async def assetlinks():
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 1.6 MiB |
BIN
backend/static/img/landing/alvan-nee.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 2.2 MiB |
BIN
backend/static/img/landing/baptist-standaert.webp
Normal file
|
After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 3.1 MiB |
BIN
backend/static/img/landing/chewy.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
BIN
backend/static/img/landing/eric-ward.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
BIN
backend/static/img/landing/nicholas-brownlow.webp
Normal file
|
After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 6.5 MiB |
BIN
backend/static/img/landing/tamas-pap.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 1.9 MiB |
BIN
backend/static/img/landing/wade-austin-ellis.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '958'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '959'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
||||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
||||||
|
|
|
||||||
|
|
@ -831,7 +831,7 @@
|
||||||
<!-- Emotionaler Split: Eric Ward -->
|
<!-- Emotionaler Split: Eric Ward -->
|
||||||
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));min-height:420px;overflow:hidden">
|
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));min-height:420px;overflow:hidden">
|
||||||
<div style="position:relative;min-height:300px">
|
<div style="position:relative;min-height:300px">
|
||||||
<img src="/img/landing/eric-ward.jpg" alt="Hundebesitzer umarmt seinen Golden Retriever"
|
<img src="/img/landing/eric-ward.webp" alt="Hundebesitzer umarmt seinen Golden Retriever"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block">
|
style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block">
|
||||||
<span class="photo-credit">© Eric Ward · Unsplash</span>
|
<span class="photo-credit">© Eric Ward · Unsplash</span>
|
||||||
|
|
@ -853,7 +853,7 @@
|
||||||
|
|
||||||
<!-- Demo-Video -->
|
<!-- Demo-Video -->
|
||||||
<section id="demo" style="position:relative;background:#1a1a1a;padding:64px 20px;text-align:center;overflow:hidden">
|
<section id="demo" style="position:relative;background:#1a1a1a;padding:64px 20px;text-align:center;overflow:hidden">
|
||||||
<img src="/img/landing/baptist-standaert.jpg" alt=""
|
<img src="/img/landing/baptist-standaert.webp" alt=""
|
||||||
loading="lazy" aria-hidden="true"
|
loading="lazy" aria-hidden="true"
|
||||||
style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 20%;opacity:0.15;filter:grayscale(50%)">
|
style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 20%;opacity:0.15;filter:grayscale(50%)">
|
||||||
<span class="photo-credit" style="position:absolute;top:7px;right:9px">© Baptist Standaert · Unsplash</span>
|
<span class="photo-credit" style="position:absolute;top:7px;right:9px">© Baptist Standaert · Unsplash</span>
|
||||||
|
|
@ -1023,19 +1023,19 @@
|
||||||
<section style="padding:0;overflow:hidden">
|
<section style="padding:0;overflow:hidden">
|
||||||
<div class="photo-strip">
|
<div class="photo-strip">
|
||||||
<div class="photo-strip-item">
|
<div class="photo-strip-item">
|
||||||
<img src="/img/landing/alvan-nee.jpg" alt="Zwei Hunde laufen einen Waldweg entlang" loading="lazy">
|
<img src="/img/landing/alvan-nee.webp" alt="Zwei Hunde laufen einen Waldweg entlang" loading="lazy">
|
||||||
<span class="photo-credit">© Alvan Nee · Unsplash</span>
|
<span class="photo-credit">© Alvan Nee · Unsplash</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="photo-strip-item">
|
<div class="photo-strip-item">
|
||||||
<img src="/img/landing/nicholas-brownlow.jpg" alt="Frau gibt ihrem Golden Retriever einen Kuss" loading="lazy">
|
<img src="/img/landing/nicholas-brownlow.webp" alt="Frau gibt ihrem Golden Retriever einen Kuss" loading="lazy">
|
||||||
<span class="photo-credit">© Nicholas Brownlow · Unsplash</span>
|
<span class="photo-credit">© Nicholas Brownlow · Unsplash</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="photo-strip-item">
|
<div class="photo-strip-item">
|
||||||
<img src="/img/landing/wade-austin-ellis.jpg" alt="Frau mit Labrador auf der Wiese" loading="lazy">
|
<img src="/img/landing/wade-austin-ellis.webp" alt="Frau mit Labrador auf der Wiese" loading="lazy">
|
||||||
<span class="photo-credit">© Wade Austin Ellis · Unsplash</span>
|
<span class="photo-credit">© Wade Austin Ellis · Unsplash</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="photo-strip-item">
|
<div class="photo-strip-item">
|
||||||
<img src="/img/landing/tamas-pap.jpg" alt="Frau lacht während ihr Hund sie abschleckt" loading="lazy">
|
<img src="/img/landing/tamas-pap.webp" alt="Frau lacht während ihr Hund sie abschleckt" loading="lazy">
|
||||||
<span class="photo-credit">© Tamas Pap · Unsplash</span>
|
<span class="photo-credit">© Tamas Pap · Unsplash</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1158,7 +1158,7 @@
|
||||||
<!-- Sektion C: Für Welpenkäufer -->
|
<!-- Sektion C: Für Welpenkäufer -->
|
||||||
<section id="welpen" style="background: white;">
|
<section id="welpen" style="background: white;">
|
||||||
<div style="position:relative;height:280px;overflow:hidden">
|
<div style="position:relative;height:280px;overflow:hidden">
|
||||||
<img src="/img/landing/chewy.jpg" alt="Pärchen mit Hund aus dem Tierheim" loading="lazy"
|
<img src="/img/landing/chewy.webp" alt="Pärchen mit Hund aus dem Tierheim" loading="lazy"
|
||||||
style="width:100%;height:100%;object-fit:cover;object-position:center 40%">
|
style="width:100%;height:100%;object-fit:cover;object-position:center 40%">
|
||||||
<div style="position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.1),rgba(0,0,0,.55))"></div>
|
<div style="position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.1),rgba(0,0,0,.55))"></div>
|
||||||
<span class="photo-credit">© Chewy · Unsplash</span>
|
<span class="photo-credit">© Chewy · Unsplash</span>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v958';
|
const CACHE_VERSION = 'by-v959';
|
||||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||||
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
||||||
|
|
|
||||||