Album: Blauer Ball + Mei Revier! ins de/en/neo-Album (neo = Boarisch-Variante) + Profil-ZIPs auf 9 Songs; promotion/+.claude vom Deploy-Tar ausgeschlossen (v1308)

This commit is contained in:
rene 2026-06-21 21:01:19 +02:00
parent cf88df7056
commit 786a2f442f
21 changed files with 61 additions and 37 deletions

View file

@ -25,6 +25,8 @@ TAR_EXCLUDE := --exclude='.git' \
--exclude='./.env' \ --exclude='./.env' \
--exclude='./*.db' \ --exclude='./*.db' \
--exclude='./tiles' \ --exclude='./tiles' \
--exclude='./promotion' \
--exclude='./.claude' \
--exclude='./.DS_Store' --exclude='./.DS_Store'
.PHONY: help deploy deploy-clean staging release sync push restart build stop status \ .PHONY: help deploy deploy-clean staging release sync push restart build stop status \

View file

@ -1 +1 @@
1307 1308

View file

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

View file

@ -3,7 +3,7 @@
Router, State-Management, Navigation, Initialisierung. Router, State-Management, Navigation, Initialisierung.
============================================================ */ ============================================================ */
const APP_VER = '1307'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VER = '1308'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt
window.APP_VER = APP_VER; // global verfügbar für andere Module (z.B. offline-indicator) window.APP_VER = APP_VER; // global verfügbar für andere Module (z.B. offline-indicator)
window.APP_VERSION = APP_VERSION; window.APP_VERSION = APP_VERSION;

View file

@ -885,7 +885,7 @@ window.Page_settings = (() => {
width="84" height="84" loading="lazy" width="84" height="84" loading="lazy"
style="width:84px;height:84px;border-radius:var(--radius-md);object-fit:cover;flex-shrink:0"> style="width:84px;height:84px;border-radius:var(--radius-md);object-fit:cover;flex-shrink:0">
<div style="min-width:0"> <div style="min-width:0">
<div style="font-weight:600">7 Songs zum Behalten 🎸</div> <div style="font-weight:600">9 Songs zum Behalten 🎸</div>
<div class="text-xs-secondary" style="margin-top:2px"> <div class="text-xs-secondary" style="margin-top:2px">
Das ganze Album als Download Deutsch, Englisch oder neo" Das ganze Album als Download Deutsch, Englisch oder neo"
(Electro-Remix). Behalten &amp; teilen ausdrücklich erwünscht. (Electro-Remix). Behalten &amp; teilen ausdrücklich erwünscht.
@ -896,17 +896,17 @@ window.Page_settings = (() => {
<a class="btn btn-primary" href="/downloads/ban-yaro-album-de.zip" <a class="btn btn-primary" href="/downloads/ban-yaro-album-de.zip"
download="Ban Yaro - Das Album.zip" download="Ban Yaro - Das Album.zip"
style="flex:1;min-width:130px;justify-content:center;text-decoration:none"> style="flex:1;min-width:130px;justify-content:center;text-decoration:none">
${UI.icon('download-simple')} Deutsch · 33 MB ${UI.icon('download-simple')} Deutsch · 45 MB
</a> </a>
<a class="btn btn-secondary" href="/downloads/ban-yaro-album-en.zip" <a class="btn btn-secondary" href="/downloads/ban-yaro-album-en.zip"
download="Ban Yaro - The Album.zip" download="Ban Yaro - The Album.zip"
style="flex:1;min-width:130px;justify-content:center;text-decoration:none"> style="flex:1;min-width:130px;justify-content:center;text-decoration:none">
${UI.icon('download-simple')} English · 36 MB ${UI.icon('download-simple')} English · 48 MB
</a> </a>
<a class="btn btn-secondary" href="/downloads/ban-yaro-album-neo.zip" <a class="btn btn-secondary" href="/downloads/ban-yaro-album-neo.zip"
download="Ban Yaro - Neon Edition.zip" download="Ban Yaro - Neon Edition.zip"
style="flex:1;min-width:130px;justify-content:center;text-decoration:none"> style="flex:1;min-width:130px;justify-content:center;text-decoration:none">
${UI.icon('download-simple')} neo · 33 MB ${UI.icon('download-simple')} neo · 46 MB
</a> </a>
</div> </div>
</div> </div>

View file

@ -1953,6 +1953,8 @@ window.Worlds = (() => {
{ title: 'Leckerli-Paradies', sub: 'Voller Napf, volles Glück', file: '/sounds/leckerli-paradies.mp3' }, { title: 'Leckerli-Paradies', sub: 'Voller Napf, volles Glück', file: '/sounds/leckerli-paradies.mp3' },
{ title: 'Platsch!', sub: 'Ab ins kühle Nass', file: '/sounds/platsch.mp3' }, { title: 'Platsch!', sub: 'Ab ins kühle Nass', file: '/sounds/platsch.mp3' },
{ title: 'Bester Freund', sub: 'Du und ich', file: '/sounds/bester-freund.mp3' }, { title: 'Bester Freund', sub: 'Du und ich', file: '/sounds/bester-freund.mp3' },
{ title: 'Blauer Ball', sub: 'Das Lieblingsspielzeug', file: '/sounds/blauer-ball.mp3' },
{ title: 'Mei Revier!', sub: 'Revier-Hymne, breitbeinig', file: '/sounds/mei-revier.mp3' },
]; ];
const SONGS_EN = [ const SONGS_EN = [
{ title: 'Ban Yaro Blues', sub: 'The anthem', file: '/sounds/ban-yaro-blues-en.mp3' }, { title: 'Ban Yaro Blues', sub: 'The anthem', file: '/sounds/ban-yaro-blues-en.mp3' },
@ -1962,6 +1964,8 @@ window.Worlds = (() => {
{ title: 'Treat Paradise', sub: 'Full bowl, full heart', file: '/sounds/treat-paradise-en.mp3' }, { title: 'Treat Paradise', sub: 'Full bowl, full heart', file: '/sounds/treat-paradise-en.mp3' },
{ title: 'Splash!', sub: 'Into the cool water', file: '/sounds/splash-en.mp3' }, { title: 'Splash!', sub: 'Into the cool water', file: '/sounds/splash-en.mp3' },
{ title: 'Best Friend', sub: 'You and me', file: '/sounds/best-friend-en.mp3' }, { title: 'Best Friend', sub: 'You and me', file: '/sounds/best-friend-en.mp3' },
{ title: 'Blauer Ball', sub: 'The favourite toy', file: '/sounds/blauer-ball-en.mp3' },
{ title: 'Mei Revier!', sub: 'Turf anthem with attitude', file: '/sounds/mei-revier-en.mp3' },
]; ];
// „neo" = Neon Edition: dieselben EN-Texte, anderer Musikstil (Electro + Garage-Rock). // „neo" = Neon Edition: dieselben EN-Texte, anderer Musikstil (Electro + Garage-Rock).
const SONGS_EN_ELECTRO = [ const SONGS_EN_ELECTRO = [
@ -1972,6 +1976,8 @@ window.Worlds = (() => {
{ title: 'Treat Paradise', sub: 'Euphoric filter-house', file: '/sounds/treat-paradise-en-electro.mp3' }, { title: 'Treat Paradise', sub: 'Euphoric filter-house', file: '/sounds/treat-paradise-en-electro.mp3' },
{ title: 'Splash!', sub: 'Funk-house groove', file: '/sounds/splash-en-electro.mp3' }, { title: 'Splash!', sub: 'Funk-house groove', file: '/sounds/splash-en-electro.mp3' },
{ title: 'Best Friend', sub: 'Acoustic-soul to synth', file: '/sounds/best-friend-en-electro.mp3' }, { title: 'Best Friend', sub: 'Acoustic-soul to synth', file: '/sounds/best-friend-en-electro.mp3' },
{ title: 'Blauer Ball', sub: 'Boarisch · da blaue Boi', file: '/sounds/blauer-ball-by.mp3' },
{ title: 'Mei Revier!', sub: 'Boarisch · Gangster-Rap', file: '/sounds/mei-revier-by.mp3' },
]; ];
const ALBUMS = { de: SONGS_DE, en: SONGS_EN, neo: SONGS_EN_ELECTRO }; const ALBUMS = { de: SONGS_DE, en: SONGS_EN, neo: SONGS_EN_ELECTRO };
let _lang = (() => { let _lang = (() => {

View file

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="color-scheme" content="light dark"> <meta name="color-scheme" content="light dark">
<script src="/js/landing-init.js?v=1307"></script> <script src="/js/landing-init.js?v=1308"></script>
<title>Ban Yaro — Die Hunde-App für Deutschland, Österreich & Schweiz</title> <title>Ban Yaro — Die Hunde-App für Deutschland, Österreich & Schweiz</title>
<meta name="description" content="Ban Yaro: Die kostenlose All-in-One Hunde-App für DACH. Tagebuch, Giftköder-Alarm, Training mit KI, Forum, Wurfbörse, Stammbaum, Inzucht-Check — DSGVO-konform, offline-fähig, direkt im Browser oder als native iPhone-App (Ban Yaro Go)."> <meta name="description" content="Ban Yaro: Die kostenlose All-in-One Hunde-App für DACH. Tagebuch, Giftköder-Alarm, Training mit KI, Forum, Wurfbörse, Stammbaum, Inzucht-Check — DSGVO-konform, offline-fähig, direkt im Browser oder als native iPhone-App (Ban Yaro Go).">
<meta name="keywords" content="Hunde App, Hunde Community, Wurfbörse, Züchter, Welpen kaufen, Stammbaum Hund, Inzuchtkoeffizient, Hundezucht, Impfpass Hund, Giftköder Alarm, Gassi Community, Hundetraining App, Hunde Forum, Hunde KI, Hundefilm Datenbank, Welpen Marktplatz"> <meta name="keywords" content="Hunde App, Hunde Community, Wurfbörse, Züchter, Welpen kaufen, Stammbaum Hund, Inzuchtkoeffizient, Hundezucht, Impfpass Hund, Giftköder Alarm, Gassi Community, Hundetraining App, Hunde Forum, Hunde KI, Hundefilm Datenbank, Welpen Marktplatz">

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -4,7 +4,7 @@
============================================================ */ ============================================================ */
// ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab // ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab
const VER = '1307'; const VER = '1308';
const CACHE_VERSION = `by-v${VER}`; const CACHE_VERSION = `by-v${VER}`;
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

View file

@ -27,9 +27,9 @@ make_cover() { # $1=subtitle $2=outfile
-kerning 7 -fill 'rgba(255,255,255,0.92)' -pointsize 60 -annotate +0+160 "$1" \ -kerning 7 -fill 'rgba(255,255,255,0.92)' -pointsize 60 -annotate +0+160 "$1" \
-quality 90 "$2" -quality 90 "$2"
} }
make_cover "DAS ALBUM · 7 SONGS" "$DIST/cover-de.jpg" make_cover "DAS ALBUM · 9 SONGS" "$DIST/cover-de.jpg"
make_cover "THE ALBUM · 7 SONGS" "$DIST/cover-en.jpg" make_cover "THE ALBUM · 9 SONGS" "$DIST/cover-en.jpg"
make_cover "NEON EDITION · 7 SONGS" "$DIST/cover-neo.jpg" make_cover "NEON EDITION · 9 SONGS" "$DIST/cover-neo.jpg"
# Eingebettetes Albumart kleiner halten (sonst blähen sich die MP3s auf) # Eingebettetes Albumart kleiner halten (sonst blähen sich die MP3s auf)
magick "$DIST/cover-de.jpg" -resize 800x800 -quality 85 "$DIST/art-de.jpg" magick "$DIST/cover-de.jpg" -resize 800x800 -quality 85 "$DIST/art-de.jpg"
magick "$DIST/cover-en.jpg" -resize 800x800 -quality 85 "$DIST/art-en.jpg" magick "$DIST/cover-en.jpg" -resize 800x800 -quality 85 "$DIST/art-en.jpg"
@ -47,6 +47,8 @@ DE_TRACKS=(
"leckerli-paradies|Leckerli-Paradies|Voller Napf, volles Glück" "leckerli-paradies|Leckerli-Paradies|Voller Napf, volles Glück"
"platsch|Platsch!|Ab ins kühle Nass" "platsch|Platsch!|Ab ins kühle Nass"
"bester-freund|Bester Freund|Du und ich" "bester-freund|Bester Freund|Du und ich"
"blauer-ball|Blauer Ball|Das Lieblingsspielzeug"
"mei-revier|Mei Revier!|Revier-Hymne, breitbeinig"
) )
EN_TRACKS=( EN_TRACKS=(
"ban-yaro-blues-en|Ban Yaro Blues|The anthem" "ban-yaro-blues-en|Ban Yaro Blues|The anthem"
@ -56,6 +58,8 @@ EN_TRACKS=(
"treat-paradise-en|Treat Paradise|Full bowl, full heart" "treat-paradise-en|Treat Paradise|Full bowl, full heart"
"splash-en|Splash!|Into the cool water" "splash-en|Splash!|Into the cool water"
"best-friend-en|Best Friend|You and me" "best-friend-en|Best Friend|You and me"
"blauer-ball-en|Blauer Ball|The favourite toy"
"mei-revier-en|Mei Revier!|Turf anthem with attitude"
) )
# „neo" = Neon Edition: gleiche EN-Texte, anderer Musikstil (Electro + Garage-Rock). # „neo" = Neon Edition: gleiche EN-Texte, anderer Musikstil (Electro + Garage-Rock).
NEO_TRACKS=( NEO_TRACKS=(
@ -66,10 +70,12 @@ NEO_TRACKS=(
"treat-paradise-en-electro|Treat Paradise|Euphoric filter-house" "treat-paradise-en-electro|Treat Paradise|Euphoric filter-house"
"splash-en-electro|Splash!|Funk-house groove" "splash-en-electro|Splash!|Funk-house groove"
"best-friend-en-electro|Best Friend|Acoustic-soul to synth" "best-friend-en-electro|Best Friend|Acoustic-soul to synth"
"blauer-ball-by|Blauer Ball|Boarisch · da blaue Boi"
"mei-revier-by|Mei Revier!|Boarisch · Gangster-Rap"
) )
zip_album() { # $1=lang $2=AlbumName(ID3, Em-Dash ok) $3=Ordner(ASCII) $4=art $5=liner shift 5; rest=tracks zip_album() { # $1=lang $2=AlbumName(ID3, Em-Dash ok) $3=Ordner(ASCII) $4=art $5=liner shift 5; rest=tracks
local lang="$1" album="$2" fname="$3" art="$4" liner="$5"; shift 5 local lang="$1" album="$2" fname="$3" art="$4" liner="$5"; shift 5; local total=$#
local folder="$DIST/$fname"; rm -rf "$folder"; mkdir -p "$folder" local folder="$DIST/$fname"; rm -rf "$folder"; mkdir -p "$folder"
if [ "$lang" = "de" ]; then cp "$liner" "$folder/LIESMICH.txt"; else cp "$liner" "$folder/README.txt"; fi if [ "$lang" = "de" ]; then cp "$liner" "$folder/LIESMICH.txt"; else cp "$liner" "$folder/README.txt"; fi
cp "$art" "$folder/cover.jpg" cp "$art" "$folder/cover.jpg"
@ -88,7 +94,7 @@ zip_album() { # $1=lang $2=AlbumName(ID3, Em-Dash ok) $3=Ordner(ASCII) $4=ar
-map 0:a -map 1:v -c copy -id3v2_version 3 \ -map 0:a -map 1:v -c copy -id3v2_version 3 \
-metadata title="$title" -metadata artist="Ban Yaro" \ -metadata title="$title" -metadata artist="Ban Yaro" \
-metadata album="$album" -metadata album_artist="Ban Yaro" \ -metadata album="$album" -metadata album_artist="Ban Yaro" \
-metadata track="$n/7" -metadata date="2026" -metadata genre="$genre" \ -metadata track="$n/$total" -metadata date="2026" -metadata genre="$genre" \
-metadata copyright="$copyr" -metadata comment="$sub" \ -metadata copyright="$copyr" -metadata comment="$sub" \
-disposition:v:0 attached_pic \ -disposition:v:0 attached_pic \
"$folder/$nn $title.mp3" "$folder/$nn $title.mp3"

View file

@ -1,13 +1,13 @@
================================================== ==================================================
BAN YARO — DAS ALBUM BAN YARO — DAS ALBUM
7 Songs 9 Songs
================================================== ==================================================
Sieben Lieder über einen Hund namens Ban Yaro: Neun Lieder über einen Hund namens Ban Yaro:
übers Gassigehen bei jedem Wetter, die erste Fahrt übers Gassigehen bei jedem Wetter, die erste Fahrt
im Anhänger, die große Liebe, den Friseur, den im Anhänger, die große Liebe, den Friseur, den
vollen Napf, das kühle Wasser — und den besten vollen Napf, das kühle Wasser, den besten Freund —
Freund, den ein Mensch haben kann. und dazu der blaue Lieblingsball und das eigene Revier.
Selbst gemacht, mit viel Herz. Aus der Ban-Yaro-App. Selbst gemacht, mit viel Herz. Aus der Ban-Yaro-App.
@ -21,6 +21,8 @@ TRACKLIST
5. Leckerli-Paradies Voller Napf, volles Glück 5. Leckerli-Paradies Voller Napf, volles Glück
6. Platsch! Ab ins kühle Nass 6. Platsch! Ab ins kühle Nass
7. Bester Freund Du und ich 7. Bester Freund Du und ich
8. Blauer Ball Das Lieblingsspielzeug
9. Mei Revier! Revier-Hymne, breitbeinig
-------------------------------------------------- --------------------------------------------------
© 2026 Ban Yaro — Musik und Texte. Alle Rechte vorbehalten. © 2026 Ban Yaro — Musik und Texte. Alle Rechte vorbehalten.

View file

@ -1,13 +1,14 @@
================================================== ==================================================
BAN YARO — THE ALBUM BAN YARO — THE ALBUM
7 Songs 9 Songs
================================================== ==================================================
Seven songs about a dog named Ban Yaro: Nine songs about a dog named Ban Yaro:
about walks in every kind of weather, the first about walks in every kind of weather, the first
ride in the trailer, falling in love, the groomer, ride in the trailer, falling in love, the groomer,
a full bowl, cool water — and the best friend a a full bowl, cool water, the best friend a human
human could ever ask for. could ask for — plus his blue favourite ball and
his very own turf.
Homemade, with all our heart. From the Ban Yaro app. Homemade, with all our heart. From the Ban Yaro app.
@ -21,6 +22,8 @@ TRACKLIST
5. Treat Paradise Full bowl, full heart 5. Treat Paradise Full bowl, full heart
6. Splash! Into the cool water 6. Splash! Into the cool water
7. Best Friend You and me 7. Best Friend You and me
8. Blauer Ball The favourite toy
9. Mei Revier! Turf anthem with attitude
-------------------------------------------------- --------------------------------------------------
© 2026 Ban Yaro — music and lyrics. All rights reserved. © 2026 Ban Yaro — music and lyrics. All rights reserved.

View file

@ -1,6 +1,6 @@
================================================== ==================================================
BAN YARO — NEON EDITION BAN YARO — NEON EDITION
7 Songs 9 Songs
================================================== ==================================================
The same seven Ban Yaro songs — reimagined. The same seven Ban Yaro songs — reimagined.
@ -8,6 +8,9 @@ French electronic house meets Swedish garage rock:
vocoders and four-on-the-floor, fuzzy guitars and vocoders and four-on-the-floor, fuzzy guitars and
Hammond organ. Same dog, same heart, brand-new sound. Hammond organ. Same dog, same heart, brand-new sound.
Plus two all-new tracks, sung in Bavarian dialect:
the blue ball and the turf anthem.
Homemade, with all our heart. From the Ban Yaro app. Homemade, with all our heart. From the Ban Yaro app.
-------------------------------------------------- --------------------------------------------------
@ -20,6 +23,8 @@ TRACKLIST
5. Treat Paradise Euphoric filter-house 5. Treat Paradise Euphoric filter-house
6. Splash! Funk-house groove 6. Splash! Funk-house groove
7. Best Friend Acoustic-soul to synth 7. Best Friend Acoustic-soul to synth
8. Blauer Ball Boarisch · da blaue Boi
9. Mei Revier! Boarisch · Gangster-Rap
-------------------------------------------------- --------------------------------------------------
© 2026 Ban Yaro — music and lyrics. All rights reserved. © 2026 Ban Yaro — music and lyrics. All rights reserved.