Auf Nutzerwunsch steht der komplette "Wer ich bin"-Abschnitt jetzt direkt
neben VanVans Foto im oberen grid-2-Bereich statt als eigene Sektion
weiter unten - keine Dopplung, alter Standalone-Abschnitt entfernt.
Kompletter Seiteninhalt durch VanVans eigenen Text ersetzt: wie sie zu
Team Dogi kam ("Zufall oder Schicksal?"), wer sie ist, ihre Stärken und
Schwächen, was Dogi und Team Dogi ihr bedeuten, persönliches Fazit mit
Signatur. TikTok-Handle @o.o.vanessa.o.o ergänzt (im Originaltext stand
dort nur ein nicht auflösbarer Discord-Mention-Code, mit dem Nutzer
abgeklärt und durch den echten Handle ersetzt). Foto- und Spotify-Link
aus der bisherigen Seite als funktionale Elemente beibehalten.
Neues Foto vom Nutzer bereitgestellt, quadratisch zugeschnitten (Fokus
Gesicht oben) und in beiden benötigten Größen (1200x1200 Karte,
400x400 Avatar) gespeichert.
Auf Nutzerwunsch aus der DogFather-Fotogalerie (medien-dogfather.html)
genommen. Die Bilddatei char-dogfather.jpg selbst bleibt erhalten (falls
später anderweitig gebraucht), wird aber nicht mehr in der Galerie gezeigt.
Bisher stand das Charakterbild ganz oben als eigene zentrierte Karte.
Auf Nutzerwunsch jetzt weiter unten in der "Eine eigene Welt"-Sektion
platziert, im selben grid-2/frame-lila-Stil wie das DogFather-Maskottchen
auf streamer.html: Text links, Bild rechts.
Das Originalbild hatte links/rechts einen dünnen dunklen Rand samt
1px-Markierungslinie vom Screenshot - dadurch entstand im lila Rahmen ein
sichtbarer Abstand zwischen Rahmen und Hund. Jetzt exakt bis an den
Bildinhalt zugeschnitten, füllt den Rahmen randlos.
Diese Fakten (34 Jahre, Portugiese, seit Februar 2026 in Luxemburg,
bisheriger Lebensweg) standen bereits in Filipes persönlichem
Vorstellungstext auf streamer.html, fehlten aber noch im kurzen
Steckbrief auf dogfather.html. Veralteten Privatsphäre-Kommentar
entsprechend aktualisiert, da der Nutzer diese Fakten selbst öffentlich
gemacht hat.
Neue Details eingearbeitet, die im bisherigen Text noch fehlten (chaotische/
verpeilte Seite, dass die Stream-Persönlichkeit keine gespielte Rolle ist,
das Vergessen von Terminen/Namen bei gleichzeitigem Nie-Vergessen der
Menschen in schwierigen Zeiten, sowie klare Grenzen bei Unehrlichkeit/
Respektlosigkeit). Bereits vorhandene Aussagen (Werte, Zuverlässigkeit,
Humor, Charakter vor Besitz) unverändert gelassen, keine Dopplungen.
Nutzer hat das exakte Originalbild bereitgestellt statt der KI-Nachbildung
(Screenshot 2026-08-01 190134.png) - für 100% korrekte Wiedergabe verwendet.
Neu generiertes Bild (lokal, Z-Image-Turbo) im Stil des vom Nutzer gezeigten
Referenzbilds: niedlicher 3D-Husky-Welpe mit blauem Hoodie und korrekt
geschriebenem "DogFather"-Schriftzug. Layout wie die bestehende Casper-
Sektion (grid-2, collage-photo/frame-lila), aber gespiegelt: Text links,
Bild rechts, wie vom Nutzer gewünscht.
- streamer.html: kompletter Inhalt ersetzt durch Dogis ausführliche
persönliche Vorstellung ("Wer ist DogFather? - Mehr als nur ein Name").
Enthält erstmals öffentlich: Filipe, 34, Portugiese, seit Februar 2026
in Luxemburg, Partnerin Franzi. Abschnitte: Der Mensch hinter DogFather,
DogFather als Streamer, Casper, Team Dogi/VanVan, DogFather als Manager
(Scouts Patrick & Bananenstift verlinkt), Was macht DogFather aus,
Schluss-Statement mit Signatur. Schlanke Buttonzeile am Ende erhalten
fuer Navigation (Videos/Galerie/Team Dogi).
- Neue Standing Rule: "DogFather" wird IMMER mit großem F geschrieben
(nicht "Dogfather"). Site-weit korrigiert in 29 Dateien (Anzeige-Text,
Alt-Texte, Meta-Beschreibungen, Kommentare) - technische Bezeichner
(Dateinamen, data-theme-Werte, CSS-Klassen, @dogfather0804-Handle)
bleiben bewusst unangetastet, da alle klein geschrieben sind und somit
von der Ersetzung gar nicht erst betroffen waren.
Bisher sprang die Nummerierung von Stufe 2 (Diene/Funny) direkt auf
Stufe 4 (Miss) - Stufe 3 fehlte komplett, weil profil.html und
team-modis.html beide den rohen "rank"-Wert anzeigen (nicht die intern
für die Pyramiden-Größe berechnete Position). Miss/Marina/Michi/Ghost
jeweils um 1 nach vorne gerückt (3/4/4/5), dadurch sind Anzeige auf der
Team-Übersicht UND auf den einzelnen Profilseiten jetzt konsistent
lückenlos. Ghosts rankLabel "Ghost" -> "Geist" (letzte Stufe).
"Die Person hinter Dogfather" -> "Die Person, die Dogfather erschuf!"
(Komma vor Relativsatz ergänzt), Lead-Text "Dogi, Hasidog - der Mensch
hinter der Kamera." -> "Filipe – der Mensch hinter der Kamera."
Titel/Meta-Tags entsprechend mitgezogen (ohne Ausrufezeichen, SEO-üblich).
- data-modis.js: "– eure Diene 🩵" als Signatur ans Ende ihrer
ausführlichen Vorstellung ergänzt
- medien-casper.html: Events-Sektion entfernt (Wunsch Dogi) - nur noch
Fotos + Videos. data-aktionen.js-Script-Include und Meta-Texte
entsprechend bereinigt.
flex-direction fehlte, dadurch liefen Titel und "folgt in Kürze"-Text in
einer Reihe statt untereinander - fiel bisher kaum auf, wurde aber durch
die neuen Video-Platzhalter auf den 3 Medien-Welten-Seiten sichtbar.
Auf Wunsch von Dogi: Medien-Menü zeigt jetzt Dogfather / HasiDog / Casper
statt Galerie / Videos / Aktionen. Jede der 3 neuen Seiten
(medien-dogfather.html / medien-hasidog.html / medien-casper.html) zeigt
alles zu ihrer Welt an einem Ort, sauber in 3 Bereiche kategorisiert:
Fotos, Videos, Events.
- Neu: assets/js/data-media.js (ersetzt gallery.js) - Fotos jetzt mit
welt: dogfather|hasidog|casper statt dogfather/team/hasidog/manager.
Team-Mitglieder-Fotos und Logo entfernt (Wunsch Dogi - passen in keine
der 3 Welten, bleiben weiter auf ihren Profilseiten). Casper-Fotos aus
der alten "hasidog"-Sammelkategorie sauber herausgelöst. Zusätzliche
bisher ungenutzte Fotos ergänzt (dogfather-main, char-dogfather,
manager-dogfather-portrait, char-hasidog, casper-main).
- Neu: assets/js/data-videos.js - Struktur pro Welt vorbereitet (noch
keine echten Videos vorhanden, Platzhalter "folgt in Kürze")
- data-aktionen.js: alle 4 bestehenden Events als welt:"dogfather"
getaggt (alles Team-Dogi-weite Community-Aktionen)
- Neu: assets/js/medien-welt.js - eine gemeinsame Render-Logik für alle
3 Seiten (liest body[data-welt]), rendert Foto-Grid+Lightbox,
Video-Grid, Events-Grid gefiltert nach Welt
- aktion-detail.html: "Zurück"-Button zeigt jetzt dynamisch auf die
Events-Sektion der richtigen Welt (aktion.welt)
- main.js NAV: Medien-Untermenü aktualisiert
- Alle Querverweise site-weit korrigiert (casper.html, community.html,
hasidog.html, index.html, streamer.html) - Anker-Links (#fotos/#videos/
#events) für Deep-Links direkt in den passenden Bereich
- Alte Dateien gelöscht: medien.html, videos.html, aktionen.html,
gallery.js
- sitemap.xml aktualisiert
Alte schlichte 3-Karten-Version komplett durch Dogis ausführliche neue
Version ersetzt:
- Intro-Textblock "HasiDog - Eine eigene Welt voller Chaos, Herz und
Fantasie"
- "Die Welt von HasiDog" (6 Karten: Figur/Humor/Charakter/Fantasie/
Überraschung/Herz)
- "Die HasiDog-Familie" (4 Karten mit mehr Text: Musik/Casper/Buch/
Community) - ersetzt die alte gleichnamige Sektion
- "Was HasiDog ausmacht" (6 Karten)
- "Die HasiDog-Inhalte" (8 Karten)
- "Die HasiDog-Welt" (5 Karten)
- Abschluss-Statement "Willkommen in der Welt von HasiDog" mit Signatur
und Buttons (Musik/Casper/Videos/Galerie/Familie)
Bewusst NICHT übernommen: der Meta-Abschnitt "Weitere Bereiche für die
HasiDog-Seite" und die reine Button-Vorschlagsliste - stattdessen direkt
in die finale Buttonzeile eingearbeitet. Die bestehende "Schlaft schön"-
Sektion am Seitenende bleibt unverändert erhalten.
Alte 3-Karten-Version von "Content-Säulen" komplett durch Dogis neue,
ausführliche 15-Karten-Version ersetzt (Kern/Frech/Chaos/Live/Familie/
Herz/Husky/Action/Event/Story/Community/Reaktion/Highlight/Backstage/
Persönlich). Zusätzlich neue Abschnitte darunter:
- "Was DogFather ausmacht" (6 Karten: Authentisch/Humorvoll/Loyal/Direkt/
Herzlich/Communitynah)
- "Die Streamformate" (6 Karten: normaler Live/Party-Live/Real-Talk-Live/
Challenge-Live/Spezialstream/Community-Live)
- "Team Dogi ist Familie" (Fließtext-Abschnitt)
- "Casper & HasiDog" (2 Karten)
- Abschluss-Statement "Nicht nur zuschauen. Teil davon werden." mit
Signatur, ersetzt die bisherige schlichte "Mehr sehen"-Sektion und
bündelt jetzt alle relevanten Buttons (Streamplan, Videos, Fotos,
Team Dogi, Instagram, Snapchat) an einer Stelle
Bewusst NICHT übernommen: der Meta-Abschnitt "Weitere Bereiche der
Streamer-Seite" und die reine Button-Vorschlagsliste aus Dogis Text -
das beschreibt nur bereits vorhandene Seiten/Buttons, wurde stattdessen
in die erweiterte Buttonzeile am Ende eingearbeitet statt als
redundanter Fließtext dupliziert.
Seite hatte bisher kein Hintergrundmotiv - jetzt nach etabliertem Muster
ergänzt (body.mit-hintergrund + hero-banner-<img>, wie auf den anderen
Seiten).
Beide Codes sauber auf die Karte/den QR-Bereich zugeschnitten (keine
Emoji-Tapete bzw. App-Screenshot-Reste drumherum mehr), verkleinert auf
400px Kantenlänge für vernünftige Dateigröße (151 KB / 86 KB statt 611 KB
/ 275 KB Original). Ersetzen 2 der 3 "folgt in Kürze"-Platzhalter in der
QR-Codes-Sektion.
Seite hatte bisher gar kein Hintergrundmotiv (nur body ohne Klasse) -
jetzt nach dem etablierten Muster ergänzt: body.mit-hintergrund mit
--page-bg/--page-bg-mobile + echter hero-banner-<img> oben (garantiert
volle Breite und komplett sichtbar, wie auf allen anderen Seiten).
Bisher war der Rahmen ein statischer, matter Ring + ein starrer Farb-
Überzug - jetzt "atmet" der Glanz (box-shadow pulsiert langsam zwischen
schmal/dezent und breit/hell, siehe @keyframes collage-aurora-glow) und
ein zusätzlicher, langsam wandernder Lichtschimmer läuft über jedes Foto
(reuse von @keyframes btn-shimmer). Läuft über die --frame-Variable, wirkt
also automatisch in jeder Rahmenfarbe (frame-silver/lila/gold/rot/
tuerkis), nicht nur silber. Pausiert bei Hover (dann übernimmt der
stärkere Hover-Glow) und wird bei prefers-reduced-motion abgeschaltet.
- "Warum schauen Menschen zu?" (mit Foto) steht jetzt VOR "Der Mensch
hinter DogFather" statt danach - Wunsch von Dogi
- Foto war ein Hochkant-Bild (864x1536), wurde aber in eine Querformat-Box
(aspect-ratio:16/10) gezwungen und dadurch stark beschnitten. Jetzt
aspect-ratio:auto + width:100%;height:auto -> komplettes Bild sichtbar,
Box passt sich der echten Bildform an.
.hero-cinematic wirkte auf großen PC-Screens zu klein (Artwork, Überschrift,
Text, Live-Status-Kästchen, Buttons). Padding erhöht (mehr Raum fürs
contain-Artwork), h1/.lead/eyebrow/Buttons/Kästchen-Text in diesem
Abschnitt gezielt etwas größer - mobile Untergrenze der clamp()s bleibt
unverändert, damit es auf kleinen Screens nicht zu groß wird.
Top-Level-Nav (Start/Dogfather/HasiDog/...) von 1.05rem auf 1.14rem,
Dropdown-Einträge darunter von 1rem auf 1.06rem - Wunsch von Dogi nach
dem letzten Anpassungsschritt.
Die Top-Level-Nav-Einträge (Start/Dogfather/HasiDog/Manager/Medien/Links)
hatten nie eine explizite Schriftgröße (liefen auf Browser-Standard) -
jetzt fest auf 1.05rem gesetzt (etwas größer als vorher), Dropdown-Einträge
von .92rem auf 1rem angehoben.
- dogfather.html: neues, extra dafür erstelltes Hero-Bild als eigene Datei
(bg-dogfather-person.jpg) - bewusst NICHT die geteilte bg-dogfather.jpg
überschrieben, die noch auf 3 weiteren Seiten (bewerben-modi, profil,
team-modis) mitverwendet wird
- creator.html: "Content Creator, die bei Spicy Media / Team Dogi
mitmachen" -> "...die bei Dogfather / Spicy Media mitmachen" (Meta-Tags
entsprechend mitkorrigiert)
- Pyramiden-Karten (team-modis.html) sind jetzt pro Ebene gleich hoch,
unabhängig von Textlänge (z.B. Diene/Funny): .pyramid-tier auf
align-items:stretch, .profile-card darin als Flex-Spalte mit dem
"Profil ansehen"-Button per margin-top:auto immer ganz unten
Ticketanizers Inbound-Ticket-API erzeugt bei API-Tickets nachweislich
keinen echten Discord-Kanal (nur Web-Inbox + Rollen-Ping im Log-Kanal,
auch nach manuellem Uebernehmen nicht) - das wurde heute gemeinsam mit
Dogi live in der Ticketanizer-Inbox und in Discord verifiziert. Deshalb
zusaetzlich ein normaler Discord-Webhook pro Zielkanal, der die komplette
Bewerbung garantiert sichtbar direkt postet.
Kanal-Zuordnung (von Dogi aus Discord kopiert):
modi -> #modi-bewerbung (DISCORD_WEBHOOK_MODI)
kooperation -> #kooperations-bewerbung (DISCORD_WEBHOOK_KOOPERATION)
scout + creator -> #scout-bewerbung gemeinsam (DISCORD_WEBHOOK_SCOUT_MANAGER)
- Neu: cloudflare-worker/src/lib/discord-webhooks.js
- applications.js: postet jetzt parallel zu Ticketanizer (Promise.all,
weiterhin ueber ctx.waitUntil im Hintergrund, blockiert nie die Antwort)
- Alle 3 Secrets bereits live gesetzt und deployed
- Getestet mit allen 4 Bewerbungstypen (modi/kooperation/scout/creator) -
laut Log alle erfolgreich gepostet, Testdaten aus D1 wieder entfernt
- README.md: Einschraenkung von Ticketanizer dokumentiert + neue
Webhook-Einrichtungsanleitung
- bewerben.html: die zwei neuen Kampagnen-Poster (Dogfather/Team-Dogi links,
Spicy Media rechts) flankieren jetzt die beiden Bewerbungs-Spalten wie
Kinoplakate, leicht gekippt, farblich passend zur jeweiligen Seite,
blenden nach unten sanft aus. Bewusst als eigene scharfe Bildspalte statt
als verwaschener Hintergrund hinter den Karten, damit beides in voller
Qualität lesbar bleibt. Ab 1080px Breite ausgeblendet (kein Platz mehr).
- creator.html: neues, extra dafür erstelltes "Die Creator"-Breitbild als
Hintergrund, ersetzt den bisher wiederverwendeten Bewerbungs-Platzhalter
- data-modis.js: Funny von Stufe 3 auf Stufe 2 - jetzt gleiche Hierarchie-
Ebene wie Diene (Pyramide gruppiert automatisch per Stufe, keine
Code-Änderung an der Anzeige-Logik nötig)
- Alle Bilder als optimierte JPEGs eingebunden (PNG-Originale via
System.Drawing skaliert/komprimiert, 63-232 KB statt 1,9-2,6 MB)
Fremde Bewerber koennen theoretisch kurz hintereinander absenden (z.B.
wenn Dogi live "bewerbt euch jetzt" sagt) und dabei dasselbe Rate-Limit
treffen, das beim Testen aufgefallen ist. Jetzt wird ein 429 automatisch
bis zu 2x mit kurzer Pause wiederholt (Retry-After-Header wird beachtet,
sonst 2s/5s Standard-Wartezeit), bevor endgueltig aufgegeben wird - laeuft
komplett im Hintergrund ueber ctx.waitUntil, blockiert nie die Antwort an
den Bewerber. Die Bewerbung selbst landet ohnehin immer sicher in der
eigenen Datenbank, unabhaengig vom Ticketanizer-Ergebnis.
Getestet mit 3 gleichzeitigen Bewerbungen - alle liefen sauber durch.
Bisher hatte der Chamäleon-Musik-Knopf nur einen einfachen, statischen
Farbverlauf - jetzt läuft er wie der Bewerben-Knopf: dunkler Grund +
wandernde, weichgezeichnete Farbwolken + durchlaufender Lichtschimmer
(wiederverwendete @keyframes btn-aurora/btn-shimmer). Die Farben kommen
weiterhin live per Canvas-Analyse aus dem Seitenbild (--music-c1/-c2).
Auf Start-/Bewerben-Seiten überschreibt der bestehende Block die Farben
weiterhin fest auf die Bewerben-Palette (höhere Selektor-Spezifität).
- .btn (primary/secondary/outline) bekommt jetzt sitewide denselben STIL wie
der "Bewerben"-Knopf oben (wandernde, weichgezeichnete Farbwolken +
Lichtschimmer) - aber mit den Farben der jeweiligen Seite/Karte
(--accent/--accent-2) statt der festen Regenbogen-Palette. Läuft über
negative z-index-Ebenen, Button-Text bleibt automatisch scharf obenauf,
keine HTML-Änderung in den ~30 Seiten nötig.
- Musik-Knopf zeigt den festen Polarlicht-Look (wie der Bewerben-Knopf)
jetzt auch auf der Startseite, nicht mehr nur auf den Bewerben-Seiten -
auf allen anderen Seiten bleibt er das Chamäleon (passt sich dem
jeweiligen Seitenbild an)
- main.js: SPA-Seitenwechsel übernimmt jetzt die komplette body-Klassenliste
der neuen Seite (vorher wurde nur "mit-hintergrund" einzeln synchronisiert -
Sonderklassen wie "bewerben-seite"/"start-seite" blieben beim Klick-Wechsel
fälschlich hängen bzw. fehlten)
Bisher wurden Fehler beim Ticket-Anlegen komplett stillschweigend
verschluckt (bewusst, damit es die Bewerbung nie blockiert) - das machte
es aber unmöglich zu sehen, WARUM ein Ticket nicht ankam. Jetzt wird
jeder Versuch (Erfolg wie Fehler, inkl. HTTP-Status und Antworttext)
über console.log/console.error protokolliert, sichtbar per
`wrangler tail`.
Umgestellt von der ursprünglichen Discord-Webhook-Idee auf die offizielle
Ticketanizer-Inbound-Ticket-API (api.ticketanizer.com/v1/tickets) - erzeugt
echte Tickets statt nur Nachrichten, landen dadurch direkt im richtigen
Ticketanizer-Bereich in Discord.
- Neu: cloudflare-worker/src/lib/ticketanizer.js. panel_id pro Bewerbungs-
bereich fest hinterlegt (aus dem Ticketanizer-Dashboard abgelesen):
Modi=4, Kooperation=5, Scout=6, Creator=7 (dort "Manager-Bewerbung")
- Alte discord.js entfernt (Ansatz verworfen)
- applications.js: Aufruf entsprechend umbenannt/angepasst
- README.md: Einrichtungsanleitung aktualisiert (TICKETANIZER_API_KEY
statt 4x DISCORD_WEBHOOK_*)
- Ticketanizer bleibt rein informativ, kein Ausfallpunkt - Bewerbung wird
immer in der eigenen Datenbank gespeichert, unabhängig vom Ticket-Erfolg
- Secret TICKETANIZER_API_KEY bereits live gesetzt und deployed; End-to-
End mit 3 Test-Bewerbungen geprüft (HTTP Ok geloggt), Testeinträge aus
der DB wieder entfernt
Jede eingehende Bewerbung landet weiterhin wie bisher in der D1-Datenbank,
wird zusätzlich aber (falls eine Webhook-URL hinterlegt ist) als formatierte
Discord-Nachricht in den passenden Kanal gepostet - pro Bewerbungsbereich
(Modi/Scout/Creator/Kooperation) eine eigene Webhook-URL, exakt wie auf der
Website getrennt. Läuft über normale Discord-Webhooks, kompatibel mit
Ticketanizer, falls dessen Kanäle eigene Ziel-URLs im selben Format anbieten.
- Neu: cloudflare-worker/src/lib/discord.js (Embed-Aufbau, Feld-Labels
pro Formular, Farbe je Bewerbungsart)
- applications.js: submitApplication ruft den Versand nach dem Speichern
auf, über ctx.waitUntil() damit die Antwort an den Nutzer nicht wartet
- worker.js: ctx wird jetzt an fetch() durchgereicht
- Discord ist rein informativ - fehlt die Webhook-URL oder ist Discord
kurz nicht erreichbar, wird die Bewerbung trotzdem ganz normal
gespeichert
- README.md: Einrichtungsanleitung (wrangler secret put DISCORD_WEBHOOK_*)
Bisher kannte der Knopf nur 3 feste Weltfarben (dogfather/hasidog/
spicymedia). Jetzt analysiert main.js (musikKnopfFarbenAnpassen) per
Canvas das tatsächliche Bild jeder einzelnen Seite - Durchschnittsfarbe
plus die kräftigste Farbe darin, als Verlauf - und setzt sie live als
--music-c1/--music-c2 auf den Knopf.
Bildquelle in Prioritätsreihenfolge: 1) scharfes Hero-Banner-Bild,
2) Startseiten-Artwork, 3) Ambiente-Hintergrundbild der Seite. Ohne
Bild fällt der Knopf sauber auf die normale Weltfarbe zurück. Läuft
beim ersten Laden UND nach jedem nahtlosen Seitenwechsel (SPA-Navigation),
damit die Farbe wirklich bei jeder Seite mitwechselt.
Das auf 240px verkleinerte Banner war laut Dogi immer noch zu dominant -
man sah beim Öffnen zuerst das Bild statt die Person. Jetzt gibt es auf
profil.html gar kein scharfes Kopfbanner mehr, nur noch die ohnehin
vorhandene weichgezeichnete Hintergrundstimmung (body.mit-hintergrund,
liegt fest hinter allem und nimmt keinen Platz im Textfluss ein). Direkt
nach dem kompakten Titel kommt sofort das Profilfoto mit Name und Bio.