Automatischer öffentlicher Start um 21 Uhr + Countdown auf der Zugangsseite
Nutzer-Wunsch 21.08.2026: "ich will dass du auch ein countdown zu der seite hinzufügst wo wir den zugangscode eingeben müssen. den um 21h heute abend geht die seite live. kannst du das sogar so anpassen dass es automatisch läuft?" server/gate.js: - Neue Einstellung SITE_PUBLIC_LAUNCH_AT (ISO-Zeitstempel mit Zeitzone). Ab diesem Moment lässt gateMiddleware ausnahmslos jeden durch -- ganz ohne Neustart oder manuellen Eingriff, weil jede Anfrage die aktuelle Serverzeit live neu prüft. Die Freischaltung "passiert" also von selbst in der Sekunde, in der die Uhrzeit erreicht wird. Vorher bleiben die Zugangscodes unverändert nötig, damit das Team schon vorher rein kann. Fail-safe statt fail-open geprüft: ein kaputter/unparsbarer Zeitwert (z.B. Tippfehler in der .env) lässt die Schranke aktiv, statt die Seite versehentlich für alle zu öffnen. - Neuer öffentlicher Endpunkt GET /gate-launch-info (immer erreichbar, auch ohne gültige Sitzung) liefert launchAt/isLive/serverTime für die Countdown-Anzeige im Frontend. gate.html: - Neue Countdown-Box zwischen Titel-Karte und den Zugangscode-Kacheln (bleibt unsichtbar, solange kein Starttermin konfiguriert ist). Rechnet auf der SERVERZEIT statt der eigenen Uhr (einmaliger Zeit-Abgleich beim Laden), damit eine falsch gehende Besucher-Uhr weder zu früh noch zu spät zählt. Bei Erreichen von Null folgt ein letzter Abgleich mit dem Server, bevor automatisch zur Zielseite weitergeleitet wird -- kein Klick, kein Neuladen nötig. - Zugangscode-Kacheln (Dogi/VanVan/Diene) bleiben während des Countdowns unverändert nutzbar. Getestet: 18 Middleware-Tests (inkl. Fail-safe bei kaputtem Zeitwert, weiterhin funktionierender Zugangscode vor dem Start) + 10 Playwright- Tests der Countdown-Oberfläche (Anzeige, Format, automatischer Sprung bei Ablauf, sofortige Weiterleitung falls schon live, stiller Fallback bei Netzwerkfehler). Zusätzlich alle 32 echten Seiten auf PC-Installierbarkeit geprüft (Manifest, Icons, Service Worker, Install-Knopf, echter Install-Klick-Ablauf simuliert) -- keine Probleme gefunden. Cache-Busting-Version auf 20260821s erhöht. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
@@ -18,10 +18,10 @@
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
<meta name="robots" content="noindex" />
|
||||
<title>Seite nicht gefunden — DOGFATHER UNIVERSE</title>
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="site-header"></div>
|
||||
@@ -41,7 +41,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-404.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-404.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Unterstütze Dogfather dauerhaft mit der DogiCrew 🩵 und sammle exklusive Treueprämien — die Teddy-Kollektion entsteht in Kooperation mit VanVan." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* =====================================================================
|
||||
Preis-/Anmelde-Kiste — komplett neu gestaltet (Nutzer-Feedback
|
||||
@@ -603,9 +603,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-abonnieren.js?v=20260821r"></script>
|
||||
<script src="assets/js/supporter.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-abonnieren.js?v=20260821s"></script>
|
||||
<script src="assets/js/supporter.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
(function () {
|
||||
const S = window.DogiSupporter;
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
<meta name="robots" content="noindex" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="site-header"></div>
|
||||
@@ -134,6 +134,6 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Detailansicht einer Aktion oder eines Projekts von Team Dogi." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="site-header"></div>
|
||||
@@ -51,9 +51,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-aktion-detail.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-aktion-detail.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const params = new URLSearchParams(location.search);
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Du bist Streamer und suchst einen Manager? Bewirb dich als Creator bei Spicy Media." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund bewerben-seite" style="--page-bg:url('/assets/img/bg-bewerben-creator.jpg');--page-bg-mobile:url('/assets/img/bg-bewerben-creator-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -70,8 +70,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/forms.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-bewerben-creator.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/forms.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-bewerben-creator.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
<meta name="twitter:description" content="Kooperationsanfrage an Manager DogFather / Spicy Media." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund bewerben-seite" style="--page-bg:url('/assets/img/bg-bewerben.jpg');--page-bg-mobile:url('/assets/img/bg-bewerben-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -68,8 +68,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/forms.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-bewerben-kooperation.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/forms.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-bewerben-kooperation.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Werde Modi bei Team Dogi — DogFathers persönliches Community-Team." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund bewerben-seite" style="--page-bg:url('/assets/img/bg-bewerben-modi.jpg');--page-bg-mobile:url('/assets/img/bg-bewerben-modi-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -79,8 +79,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/forms.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-bewerben-modi.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/forms.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-bewerben-modi.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Werde Scout für DogFather bei der Spicy Media Agentur — finde neue Talente." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund bewerben-seite" style="--page-bg:url('/assets/img/bg-bewerben-scout.jpg');--page-bg-mobile:url('/assets/img/bg-bewerben-scout-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -71,8 +71,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/forms.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-bewerben-scout.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/forms.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-bewerben-scout.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Werde Teil vom Team: Modi bei Team Dogi, Scout oder Creator bei Spicy Media, oder Kooperation anfragen." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund bewerben-seite" style="--page-bg:url('/assets/img/bg-bewerben-split.jpg');--page-bg-mobile:url('/assets/img/bg-bewerben-split-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -85,7 +85,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-bewerben.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-bewerben.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Der Husky an DogFathers Seite — das tierische Gesicht der HasiDog-Welt." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-casper.jpg');--page-bg-mobile:url('/assets/img/bg-casper-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -85,7 +85,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-casper.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-casper.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Team Dogi ist Familie — die Community rund um DogFather und HasiDog." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-community.jpg');--page-bg-mobile:url('/assets/img/bg-community-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -84,7 +84,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-community.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-community.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Content Creator, die Teil von DogFather / Spicy Media sind." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-creator.jpg');--page-bg-mobile:url('/assets/img/bg-creator-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -60,9 +60,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-creator.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-creator.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-creator.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-creator.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", async () => {
|
||||
const grid = document.getElementById("creator-grid");
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Wer ist DogFather wirklich? Persönlichkeit, Werte und die Geschichte hinter dem Content." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-dogfather-person.jpg');--page-bg-mobile:url('/assets/img/bg-dogfather-person-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -158,7 +158,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-dogfather.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-dogfather.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="apple-mobile-web-app-title" content="DogFather" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<style>
|
||||
/* =====================================================================
|
||||
Zugangsseite — bewusst kein braves Standard-Login-Formular, sondern
|
||||
@@ -246,6 +246,37 @@
|
||||
.gate-cards { flex-direction: column; align-items: center; }
|
||||
.gate-card { max-width: 300px; width: 100%; }
|
||||
}
|
||||
|
||||
/* ---------- Countdown zum öffentlichen Start (21.08.2026) ----------
|
||||
Nutzer-Wunsch: "ich will dass du auch ein countdown zu der seite
|
||||
hinzufügst wo wir den zugangscode eingeben müssen. den um 21h heute
|
||||
abend geht die seite live." Eigene, ruhige Optik statt einer reinen
|
||||
Zahlenanzeige — passt zur restlichen Gold/Aurora-Bühne der Seite.
|
||||
[hidden] per Default: erscheint erst, wenn server/gate.js per
|
||||
/gate-launch-info wirklich einen Start-Zeitpunkt meldet (siehe Skript
|
||||
unten) — ohne das bleibt die Seite unverändert wie vorher. */
|
||||
.gate-countdown {
|
||||
position: relative; z-index: 2; width: 100%; text-align: center;
|
||||
margin-top: 1.3rem; padding: 1.1rem 1.4rem;
|
||||
border-radius: 16px; border: 1.5px solid rgba(212,175,55,.35);
|
||||
background: linear-gradient(180deg, rgba(20,23,29,.85), rgba(10,12,15,.9));
|
||||
box-shadow: 0 20px 50px -25px rgba(0,0,0,.7);
|
||||
}
|
||||
.gate-countdown[hidden] { display: none; }
|
||||
.gate-countdown-label {
|
||||
margin: 0 0 .5rem; font-size: .78rem; letter-spacing: .1em; text-transform: uppercase;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
.gate-countdown-zeit {
|
||||
margin: 0; font-family: var(--font-head); font-weight: 800; letter-spacing: .04em;
|
||||
font-size: clamp(1.7rem, 6vw, 2.4rem); font-variant-numeric: tabular-nums;
|
||||
background: linear-gradient(135deg, #fff, #ffe9a8 55%, #d4af37);
|
||||
-webkit-background-clip: text; background-clip: text; color: transparent;
|
||||
animation: gate-countdown-puls 2.4s ease-in-out infinite;
|
||||
}
|
||||
@keyframes gate-countdown-puls { 0%,100% { opacity: .92; } 50% { opacity: 1; } }
|
||||
@media (prefers-reduced-motion: reduce) { .gate-countdown-zeit { animation: none; } }
|
||||
.gate-countdown-hinweis { margin: .55rem 0 0; font-size: .82rem; color: var(--text-muted); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -269,6 +300,15 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Countdown zum öffentlichen Start (21.08.2026) — bleibt leer/unsichtbar,
|
||||
solange server/gate.js keinen SITE_PUBLIC_LAUNCH_AT meldet (siehe
|
||||
/gate-launch-info im Skript unten). -->
|
||||
<div class="gate-countdown" id="gate-countdown" hidden>
|
||||
<p class="gate-countdown-label">🎉 Startet automatisch in</p>
|
||||
<p class="gate-countdown-zeit" id="gate-countdown-zeit">--:--:--</p>
|
||||
<p class="gate-countdown-hinweis">Kein Neuladen nötig — die Seite öffnet sich von selbst.</p>
|
||||
</div>
|
||||
|
||||
<!-- Nutzer-Wunsch 07.08.2026: statt einem gemeinsamen Eingabefeld für
|
||||
Dogi/VanVan jetzt 2 getrennte Kacheln, gleiches Muster wie schon in
|
||||
verwaltung.html — beide Formulare rufen weiterhin denselben
|
||||
@@ -405,6 +445,84 @@
|
||||
bindeGateKachel("gate-form-vanvan", "gate-code-vanvan", "gate-fehler-vanvan");
|
||||
bindeGateKachel("gate-form-diene", "gate-code-diene", "gate-fehler-diene");
|
||||
|
||||
/* ---------- Countdown zum öffentlichen Start (21.08.2026) ----------
|
||||
Nutzer-Wunsch: "um 21h heute abend geht die seite live. kannst du das
|
||||
sogar so anpassen dass es automatisch läuft?" -- server/gate.js meldet
|
||||
über /gate-launch-info den echten Start-Zeitpunkt (SITE_PUBLIC_LAUNCH_AT
|
||||
in der .env) und lässt ab genau diesem Moment jeden ohne Code durch.
|
||||
Diese Uhr hier ist rein die SICHTBARE Anzeige dafür + der automatische
|
||||
Sprung zur Zielseite, sobald es soweit ist -- die eigentliche
|
||||
Freischaltung passiert unabhängig davon serverseitig.
|
||||
|
||||
Läuft bewusst auf der SERVERZEIT, nicht der eigenen Uhr: viele Handys/
|
||||
PCs gehen ein paar Minuten falsch, das würde sonst entweder zu früh
|
||||
"00:00:00" zeigen (und dann an der noch verschlossenen Schranke
|
||||
scheitern) oder unnötig lange nachzählen. offsetMs wird einmal beim
|
||||
Laden bestimmt (Server-Zeit minus eigene Zeit) und auf die eigene,
|
||||
lokal tickende Uhr addiert -- kein Dauer-Nachfragen nötig, nur beim
|
||||
Erreichen von Null ein letzter Abgleich als Sicherheitsnetz. */
|
||||
const countdownBox = document.getElementById("gate-countdown");
|
||||
const countdownZeit = document.getElementById("gate-countdown-zeit");
|
||||
|
||||
function formatiereCountdown(ms) {
|
||||
const gesamtSekunden = Math.max(0, Math.round(ms / 1000));
|
||||
const std = Math.floor(gesamtSekunden / 3600);
|
||||
const min = Math.floor((gesamtSekunden % 3600) / 60);
|
||||
const sek = gesamtSekunden % 60;
|
||||
const zweistellig = (n) => String(n).padStart(2, "0");
|
||||
return `${zweistellig(std)}:${zweistellig(min)}:${zweistellig(sek)}`;
|
||||
}
|
||||
|
||||
async function holeLaunchInfo() {
|
||||
try {
|
||||
const res = await fetch("/gate-launch-info", { cache: "no-store" });
|
||||
const data = await res.json();
|
||||
return data && data.ok ? data : null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (countdownBox && countdownZeit) {
|
||||
async function richteCountdownEin(info) {
|
||||
const launchAtMs = new Date(info.launchAt).getTime();
|
||||
const offsetMs = new Date(info.serverTime).getTime() - Date.now();
|
||||
countdownBox.hidden = false;
|
||||
|
||||
const timerId = setInterval(async () => {
|
||||
const serverJetzt = Date.now() + offsetMs;
|
||||
const rest = launchAtMs - serverJetzt;
|
||||
if (rest > 0) {
|
||||
countdownZeit.textContent = formatiereCountdown(rest);
|
||||
return;
|
||||
}
|
||||
countdownZeit.textContent = "00:00:00";
|
||||
clearInterval(timerId);
|
||||
// Letzter Abgleich mit dem Server statt blind der eigenen Uhr zu
|
||||
// vertrauen -- erst wenn ER bestätigt "live", wird weitergeleitet.
|
||||
// Sagt er "noch nicht" (z.B. Uhr wich ein paar Sekunden ab, oder
|
||||
// der Zeitpunkt wurde inzwischen verschoben), richtet sich der
|
||||
// Countdown mit den frischen Werten einfach neu ein, statt
|
||||
// stumm bei "00:00:00" stehen zu bleiben.
|
||||
const bestaetigung = await holeLaunchInfo();
|
||||
if (bestaetigung && bestaetigung.isLive) location.href = next;
|
||||
else if (bestaetigung && bestaetigung.launchAt) richteCountdownEin(bestaetigung);
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
(async function starteCountdown() {
|
||||
const info = await holeLaunchInfo();
|
||||
if (!info || !info.launchAt) return; // kein Starttermin gesetzt -> Box bleibt versteckt
|
||||
|
||||
if (info.isLive) {
|
||||
location.href = next; // schon live (z.B. Seite kurz nach dem Start neu geöffnet)
|
||||
return;
|
||||
}
|
||||
|
||||
richteCountdownEin(info);
|
||||
})();
|
||||
}
|
||||
|
||||
/* Service-Worker-Registrierung — auf allen anderen Seiten macht das main.js, diese Seite
|
||||
ist aber bewusst eigenstaendig und laedt main.js nicht. Ohne registrierten Service
|
||||
Worker bietet Chrome hier gar kein "App installieren" an (siehe Kommentar im Kopfbereich).
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="HasiDog: Maskottchen, Musikprojekt und die verspielte, familiäre Seite von Team Dogi." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-hasidog.jpg');--page-bg-mobile:url('/assets/img/bg-hasidog-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -186,7 +186,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-hasidog.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-hasidog.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+8
-8
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="DOGFATHER UNIVERSE: die Heimat von DogFather als Streamer, der HasiDog-Community und Manager DogFather bei Spicy Media." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="start-seite">
|
||||
<div id="site-header"></div>
|
||||
@@ -290,10 +290,10 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-modis.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-index.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-modis.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-index.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
// Gleiche URL wie in assets/js/forms.js / postfach.html — läuft seit
|
||||
// 05.08.2026 auf dem eigenen Server statt auf Cloudflare Workers.
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Kontakt, Impressum und Datenschutz von DOGFATHER UNIVERSE." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="site-header"></div>
|
||||
@@ -126,7 +126,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-kontakt.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-kontakt.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Alle Social-Media- und Musik-Links von DogFather an einem Ort — plus QR-Codes." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* Rabattcodes: an das Supporter-Abo gekoppelt (Nutzer-Feedback
|
||||
03.08.2026: "verbinde es mit dem Abo... wenn die Leute drauf drücken
|
||||
@@ -140,8 +140,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-links.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-links.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
(function () {
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="DogFather als Manager bei der Spicy Media Agency: Scouts, Creator und faire Zusammenarbeit." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-manager.jpg');--page-bg-mobile:url('/assets/img/bg-manager-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -139,9 +139,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-manager.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-manager.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-manager.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-manager.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
// "Weitere Manager" (21.08.2026) -- siehe Kommentar bei #weitere-manager-root
|
||||
// oben. Aktuell IMMER window.MANAGERS === [] (siehe data-manager.js), Inhalt
|
||||
|
||||
+9
-9
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Fotos und Videos rund um Husky Casper an einem Ort." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" data-welt="casper" style="--page-bg:url('/assets/img/bg-medien-casper.jpg');--page-bg-mobile:url('/assets/img/bg-medien-casper-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -59,10 +59,10 @@
|
||||
</div>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-media.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821r"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-medien-casper.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-media.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821s"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-medien-casper.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+10
-10
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Fotos, Videos und Events aus DogFathers Welt an einem Ort." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" data-welt="dogfather" style="--page-bg:url('/assets/img/bg-dogfather.jpg');--page-bg-mobile:url('/assets/img/bg-dogfather-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -65,11 +65,11 @@
|
||||
</div>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-media.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821r"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-medien-dogfather.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-media.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821s"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-medien-dogfather.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+10
-10
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Fotos, Videos und Events aus der HasiDog-Welt an einem Ort." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" data-welt="hasidog" style="--page-bg:url('/assets/img/bg-medien-hasidog.jpg');--page-bg-mobile:url('/assets/img/bg-medien-hasidog-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -65,11 +65,11 @@
|
||||
</div>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-media.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821r"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-medien-hasidog.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-media.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-videos.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-aktionen.js?v=20260821s"></script>
|
||||
<script src="assets/js/medien-welt.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-medien-hasidog.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+10
-10
@@ -16,10 +16,10 @@
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="robots" content="noindex" /> <!-- generische URL, echte Team-Seiten verlinken hierher -->
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
.profil-photo { aspect-ratio: 4/5; max-width: 420px; margin: 0 auto; }
|
||||
.profil-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
||||
@@ -130,12 +130,12 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-modis.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-creator.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-manager.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-profil.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-modis.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-creator.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-manager.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-profil.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", async () => {
|
||||
const slug = new URLSearchParams(location.search).get("p") || "";
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Rabattcodes von Dogis Partnern für Team Dogi — spar bares Geld bei ausgewählten Marken." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* Leere-Zustand-Kachel im "Gutschein"-Look: gestrichelter Rand wie ein
|
||||
ausgeschnittener Coupon, damit auch OHNE echte Codes schon klar ist,
|
||||
@@ -131,8 +131,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-rabattcodes.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-rabattcodes.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
(function () {
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
@@ -6,3 +6,12 @@ PORT=4100
|
||||
SITE_ACCESS_SECRET=
|
||||
SITE_ACCESS_CODE_DOGI=
|
||||
SITE_ACCESS_CODE_VANVAN=
|
||||
SITE_ACCESS_CODE_DIENE=
|
||||
|
||||
# Automatischer öffentlicher Start (21.08.2026): ab diesem Zeitpunkt lässt
|
||||
# gate.js JEDEN durch, ganz ohne Neustart/manuellen Eingriff -- die Codes
|
||||
# oben bleiben bis dahin unverändert nötig. ISO-Format MIT Zeitzone, sonst
|
||||
# wird der Wert als UTC statt als Ortszeit gelesen. Leer lassen = kein
|
||||
# automatischer Start, die Schranke bleibt dauerhaft aktiv.
|
||||
# Beispiel (21 Uhr deutscher Sommerzeit): 2026-08-21T21:00:00+02:00
|
||||
SITE_PUBLIC_LAUNCH_AT=
|
||||
|
||||
@@ -214,9 +214,47 @@ export async function gateAuthHandler(req, res) {
|
||||
return res.json({ ok: true, next });
|
||||
}
|
||||
|
||||
/* Automatischer öffentlicher Start (21.08.2026, Nutzer-Wunsch: "um 21h heute
|
||||
abend geht die seite live. kannst du das sogar so anpassen dass es
|
||||
automatisch läuft?"). SITE_PUBLIC_LAUNCH_AT ist ein fester Zeitpunkt
|
||||
(ISO-String MIT Zeitzone in der .env, z.B. "2026-08-21T21:00:00+02:00").
|
||||
Ab diesem Moment lässt diese Prüfung ausnahmslos jeden durch — ganz ohne
|
||||
Neustart und ohne jeden manuellen Eingriff: jede einzelne Anfrage prüft
|
||||
die aktuelle Serverzeit neu, die Freischaltung "passiert" also von selbst
|
||||
in der Sekunde, in der die Uhrzeit erreicht wird. Vorher (isLive: false)
|
||||
ändert sich am bisherigen Verhalten nichts — die Zugangscodes bleiben bis
|
||||
dahin unverändert nötig, damit das Team schon vorher rein kann.
|
||||
Fehlt die Variable (z.B. lokal beim Testen), bleibt isLive dauerhaft
|
||||
false — reines Opt-in, kein Verhalten ändert sich ohne diese Einstellung. */
|
||||
function ermittleLiveStatus() {
|
||||
const wert = process.env.SITE_PUBLIC_LAUNCH_AT;
|
||||
if (!wert) return { launchAt: null, isLive: false };
|
||||
const launchMs = new Date(wert).getTime();
|
||||
if (Number.isNaN(launchMs)) return { launchAt: null, isLive: false };
|
||||
return { launchAt: launchMs, isLive: Date.now() >= launchMs };
|
||||
}
|
||||
|
||||
export function gateMiddleware(req, res, next) {
|
||||
const pfad = req.path;
|
||||
|
||||
/* Öffentlicher, IMMER erreichbarer Status-Endpunkt für den Countdown auf
|
||||
gate.html — unabhängig davon, ob gerade Codes verlangt werden, damit
|
||||
das Frontend jederzeit den echten (serverseitigen) Stand erfragen kann,
|
||||
statt sich auf die möglicherweise falsch gestellte Uhr des Besuchers zu
|
||||
verlassen. Bewusst vor jeder anderen Prüfung, damit er auch dann noch
|
||||
antwortet, wenn z.B. SITE_ACCESS_SECRET fehlt oder die Sperre aktiv ist. */
|
||||
if (pfad === "/gate-launch-info" && req.method === "GET") {
|
||||
const { launchAt, isLive } = ermittleLiveStatus();
|
||||
return res.json({
|
||||
ok: true,
|
||||
launchAt: launchAt ? new Date(launchAt).toISOString() : null,
|
||||
isLive,
|
||||
serverTime: new Date().toISOString(),
|
||||
});
|
||||
}
|
||||
|
||||
if (ermittleLiveStatus().isLive) return next(); // Uhrzeit erreicht -> Seite ist automatisch öffentlich
|
||||
|
||||
const codesKonfiguriert = !!(process.env.SITE_ACCESS_SECRET && (process.env.SITE_ACCESS_CODE_DOGI || process.env.SITE_ACCESS_CODE_VANVAN || process.env.SITE_ACCESS_CODE_DIENE));
|
||||
if (!codesKonfiguriert) return next();
|
||||
|
||||
|
||||
+8
-8
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Was die Community und das Team über DogFather sagen." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-stimmen.jpg');--page-bg-mobile:url('/assets/img/bg-stimmen-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -102,9 +102,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-stimmen-avatare.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-stimmen.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/stimmen.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-stimmen-avatare.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-stimmen.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script src="assets/js/stimmen.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Die persönliche Geschichte hinter DogFather — Filipe, Streamer, Manager bei Spicy Media und Hundepapa von Husky Casper." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-streamer.jpg');--page-bg-mobile:url('/assets/img/bg-streamer-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -217,7 +217,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-streamer.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-streamer.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+9
-9
@@ -19,17 +19,17 @@
|
||||
<meta name="twitter:description" content="Wann geht DogFather live? Streamplan und Livebereich." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-streamplan.jpg?v=20260821r');--page-bg-mobile:url('/assets/img/bg-streamplan-mobile.jpg?v=20260821r');">
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-streamplan.jpg?v=20260821s');--page-bg-mobile:url('/assets/img/bg-streamplan-mobile.jpg?v=20260821s');">
|
||||
<div id="site-header"></div>
|
||||
|
||||
<main>
|
||||
<section class="hero page-bg">
|
||||
<div class="hero-banner"><img src="/assets/img/bg-streamplan.jpg?v=20260821r" alt="" loading="eager" /></div>
|
||||
<div class="hero-banner"><img src="/assets/img/bg-streamplan.jpg?v=20260821s" alt="" loading="eager" /></div>
|
||||
<div class="container">
|
||||
<span class="eyebrow" data-i18n="sp_eyebrow">Welt 1 — DogFather</span>
|
||||
<h1 data-i18n="sp_h1">Streamplan & Livebereich</h1>
|
||||
@@ -126,8 +126,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-streamplan.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/streamplan.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-streamplan.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script src="assets/js/streamplan.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+7
-7
@@ -9,10 +9,10 @@
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<meta name="theme-color" content="#0b0d10" />
|
||||
<meta name="robots" content="noindex" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* =====================================================================
|
||||
Supporter-Bereich — komplett neu gestaltet (Nutzer-Feedback
|
||||
@@ -515,9 +515,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-supporter.js?v=20260821r"></script>
|
||||
<script src="assets/js/supporter.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-supporter.js?v=20260821s"></script>
|
||||
<script src="assets/js/supporter.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
(function () {
|
||||
const S = window.DogiSupporter;
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="VanVan, Diene, Funny, Miss und Marina — das Modi-/Core-Team von Team Dogi." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-modis.jpg');--page-bg-mobile:url('/assets/img/bg-modis.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -72,9 +72,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-modis.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-team-modis.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-modis.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-team-modis.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const grid = document.getElementById("modis-grid");
|
||||
|
||||
+7
-7
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Die Scouts von Team Dogi bei Spicy Media." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-scouts.jpg');--page-bg-mobile:url('/assets/img/bg-scouts-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -49,9 +49,9 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/data-scouts.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-team-scouts.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821s"></script>
|
||||
<script src="assets/js/i18n-team-scouts.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const grid = document.getElementById("scouts-grid");
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Eine persönliche Widmung von Dogi an Tili — seine TikTok-Muddi, die erste und bis heute einzige Streamerin, die ihm all die Zeit treu geblieben ist." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* Gleiche Anpassung wie vanvan.html: der site-weit etwas größere
|
||||
Fließtext wirkt bei einem so langen persönlichen Brief zu wuchtig —
|
||||
@@ -153,7 +153,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-tt-muddi.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-tt-muddi.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="VanVan erzählt ihre Geschichte: wie sie zu Team Dogi kam, wer sie ist und was DogFather und Team Dogi ihr bedeuten." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* Auf Wunsch: der site-weit vergrößerte Fließtext wirkte auf VanVans
|
||||
eigener Seite zu groß (viel Text am Stück) — hier gezielt wieder
|
||||
@@ -175,7 +175,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-vanvan.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-vanvan.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+11
-11
@@ -19,10 +19,10 @@
|
||||
<link rel="apple-touch-icon" href="assets/img/apple-touch-icon-admin.png" />
|
||||
<meta name="apple-mobile-web-app-title" content="DogiCrew-Verwaltung" />
|
||||
<meta name="theme-color" content="#0e0a16" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
<style>
|
||||
/* =====================================================================
|
||||
verwaltung.html — Dogis privater Command-Center-Bereich.
|
||||
@@ -1232,13 +1232,13 @@
|
||||
<!-- 21.08.2026: für den "Bestehende Mitglieder importieren"-Knopf in der
|
||||
Team-Verwaltung -- liest die von Hand gepflegten Profile aus diesen
|
||||
Dateien aus und bietet an, sie 1:1 in die Datenbank zu übernehmen. -->
|
||||
<script src="assets/js/data-modis.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-creator.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-manager.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-stimmen-avatare.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/admin-auth.js?v=20260821r"></script>
|
||||
<script src="assets/js/data-modis.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-scouts.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-creator.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-manager.js?v=20260821s"></script>
|
||||
<script src="assets/js/data-stimmen-avatare.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script src="assets/js/admin-auth.js?v=20260821s"></script>
|
||||
<script>
|
||||
(function () {
|
||||
const API_BASE_URL = "https://postfach.dogfather-universe.com";
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Die Werte, nach denen DogFather als Manager bei Spicy Media arbeitet." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-werte.jpg');--page-bg-mobile:url('/assets/img/bg-werte-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -113,7 +113,7 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-werte.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-werte.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+6
-6
@@ -19,10 +19,10 @@
|
||||
<meta name="twitter:description" content="Die Geschichte von DogFather in einer interaktiven Zeitleiste." />
|
||||
<meta name="twitter:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||||
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821r" />
|
||||
<link rel="stylesheet" href="assets/css/main.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821s" />
|
||||
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821s" />
|
||||
</head>
|
||||
<body class="mit-hintergrund" style="--page-bg:url('/assets/img/bg-zeitreise.jpg');--page-bg-mobile:url('/assets/img/bg-zeitreise-mobile.jpg');">
|
||||
<div id="site-header"></div>
|
||||
@@ -237,8 +237,8 @@
|
||||
</main>
|
||||
|
||||
<div id="site-footer"></div>
|
||||
<script src="assets/js/i18n-zeitreise.js?v=20260821r"></script>
|
||||
<script src="assets/js/main.js?v=20260821r"></script>
|
||||
<script src="assets/js/i18n-zeitreise.js?v=20260821s"></script>
|
||||
<script src="assets/js/main.js?v=20260821s"></script>
|
||||
<script>
|
||||
/* Wachstums-Reveal: Äste blenden sich beim Scrollen sanft ein — passt
|
||||
zum "wachsenden Baum"-Konzept dieser Seite. Rein page-lokal, betrifft
|
||||
|
||||
Reference in New Issue
Block a user