Album: Download im Profil — zwei ZIPs (DE+EN) mit Cover, ID3-Tags, Liner Notes (v1302)

- Profil-Karte "Ban Yaro — das Album" in settings.js mit Cover-Thumbnail +
  zwei Download-Buttons (Deutsch/English), rein deklarativ (CSP-safe)
- /downloads StaticFiles-Mount in main.py (makedirs-Schutz); ZIPs matchen
  keine SW-Cache-Regel -> fluten den Cache nicht
- backend/static/downloads/ban-yaro-album-{de,en}.zip: je 7 MP3s mit ID3-Tags
  + eingebettetem Cover, cover.jpg, LIESMICH.txt/README.txt (Tracklist + Lizenz)
- Cover aus Fruehling-Playdate-Foto (quadr. Crop + Wortmarke), DE/EN-Variante;
  textfreies album-thumb.jpg fuer die Karte
- Reproduzierbar: make album (tools/album-build/build.sh + Liner-Notes)
- LIVE auf Prod + Staging v1302
This commit is contained in:
rene 2026-06-17 06:25:34 +02:00
parent aea489aa5a
commit 1a03cab5dd
15 changed files with 213 additions and 18 deletions

View file

@ -86,14 +86,14 @@
<title>Ban Yaro</title>
<!-- Theme + theme-color Statusleiste vor CSS setzen -->
<script src="/js/boot-early.js?v=1301"></script>
<script src="/js/boot-early.js?v=1302"></script>
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
<link rel="stylesheet" href="/css/design-system.css?v=1301">
<link rel="stylesheet" href="/css/layout.css?v=1301">
<link rel="stylesheet" href="/css/components.css?v=1301">
<link rel="stylesheet" href="/css/utilities.css?v=1301">
<link rel="stylesheet" href="/css/lists.css?v=1301">
<link rel="stylesheet" href="/css/design-system.css?v=1302">
<link rel="stylesheet" href="/css/layout.css?v=1302">
<link rel="stylesheet" href="/css/components.css?v=1302">
<link rel="stylesheet" href="/css/utilities.css?v=1302">
<link rel="stylesheet" href="/css/lists.css?v=1302">
</head>
<body>
@ -624,12 +624,12 @@
<div id="modal-container"></div>
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
<script src="/js/api.js?v=1301"></script>
<script src="/js/ui.js?v=1301"></script>
<script src="/js/app.js?v=1301"></script>
<script src="/js/worlds.js?v=1301"></script>
<script src="/js/offline-indicator.js?v=1301"></script>
<script src="/js/contact-form.js?v=1301"></script>
<script src="/js/api.js?v=1302"></script>
<script src="/js/ui.js?v=1302"></script>
<script src="/js/app.js?v=1302"></script>
<script src="/js/worlds.js?v=1302"></script>
<script src="/js/offline-indicator.js?v=1302"></script>
<script src="/js/contact-form.js?v=1302"></script>
<!-- Feature-Seiten werden lazy geladen -->
@ -639,7 +639,7 @@
<!-- Boot: Offline-Banner + SW-Registration (extrahiert für CSP) -->
<script src="/js/boot.js?v=1301"></script>
<script src="/js/boot.js?v=1302"></script>
</body>