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]>
91 lines
6.9 KiB
HTML
91 lines
6.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de" data-theme="hasidog">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Die Community — DOGFATHER UNIVERSE</title>
|
||
<meta name="description" content="Team Dogi ist Familie — die Community rund um DogFather und HasiDog." />
|
||
<link rel="icon" type="image/png" href="assets/img/favicon.png" />
|
||
<link rel="manifest" href="/manifest.json" />
|
||
<meta name="theme-color" content="#0b0d10" />
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:site_name" content="DOGFATHER UNIVERSE" />
|
||
<meta property="og:title" content="Die Community — DOGFATHER UNIVERSE" />
|
||
<meta property="og:description" content="Team Dogi ist Familie — die Community rund um DogFather und HasiDog." />
|
||
<meta property="og:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
|
||
<meta property="og:url" content="https://dogfather-universe.com/community.html" />
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:title" content="Die Community — DOGFATHER UNIVERSE" />
|
||
<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=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>
|
||
|
||
<main>
|
||
<section class="hero page-bg">
|
||
<div class="hero-banner"><img src="/assets/img/bg-community.jpg" alt="" loading="eager" /></div>
|
||
<div class="container">
|
||
<span class="eyebrow" data-i18n="com_eyebrow">Welt 2 — HasiDog</span>
|
||
<h1 data-i18n="com_h1">Die Community</h1>
|
||
<p class="lead worlds" data-i18n="com_lead">Team Dogi ist Familie 🩵</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section-tight">
|
||
<div class="container grid grid-2" style="align-items:center;">
|
||
<div>
|
||
<h2 data-i18n="com_mehr_h2">Mehr als Follower</h2>
|
||
<p data-i18n="com_mehr_1">Team Dogi soll niemals nur „DogFather und Follower" sein, sondern eine echte Gemeinschaft. Jeder verdient Spotlight 🩵</p>
|
||
<p data-i18n="com_mehr_2">Discord ist das Community-Zentrum — hier trifft man sich, tauscht sich aus und ist Teil des Alltags von Team Dogi.</p>
|
||
<a class="btn btn-primary" href="links.html" data-i18n="com_discord_btn">Discord beitreten</a>
|
||
</div>
|
||
<div class="collage-photo" style="aspect-ratio:3/4;border-radius:var(--radius);">
|
||
<img src="assets/img/community-team-dogi.jpg" alt="Diene, Ghost, VanVan und Dogi bei einem gemeinsamen Treffen von Team Dogi" style="width:100%;height:100%;object-fit:cover;object-position:center 25%;" />
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section-tight">
|
||
<div class="container" style="max-width:70ch;">
|
||
<h2 class="text-center" data-i18n="com_story_h2">Team Dogi – mehr als eine Community 🩵</h2>
|
||
<p data-i18n="com_1">Meine Community ist nicht einfach nur eine Gruppe von Menschen, die sich regelmäßig in einem Livestream trifft. <strong>Team Dogi ist Familie.</strong></p>
|
||
<p data-i18n="com_2">Hier kommen Menschen zusammen, die unterschiedlicher kaum sein könnten – und trotzdem verbindet uns etwas ganz Besonderes: Loyalität, Ehrlichkeit, Respekt, Zusammenhalt und das Herz am richtigen Fleck.</p>
|
||
<p data-i18n="com_3">Bei uns darf jeder so sein, wie er wirklich ist. Niemand muss sich verstellen, niemand muss perfekt sein und niemand wird allein gelassen. Wir lachen zusammen, machen Blödsinn, unterstützen uns gegenseitig und stehen füreinander ein, wenn das Leben einmal nicht so läuft, wie es sollte.</p>
|
||
<p data-i18n="com_4">Natürlich sind wir manchmal laut, verrückt, chaotisch und komplett verpeilt. Aber genau das macht uns aus. Hinter jedem Spaß, jedem Insider und jedem verrückten Moment steckt eine Gemeinschaft, die zusammenhält – nicht nur während eines Lives, sondern auch weit darüber hinaus.</p>
|
||
<p data-i18n="com_5">Neue Menschen werden bei uns nicht einfach nur begrüßt. Sie werden aufgenommen, respektiert und Schritt für Schritt ein Teil unserer Truppe. Denn bei Team Dogi zählt nicht, woher du kommst, wie du aussiehst oder was andere über dich denken. Es zählt, welchen Charakter du hast, wie du mit anderen Menschen umgehst und ob dein Herz am richtigen Fleck sitzt.</p>
|
||
<p data-i18n="com_6">Wir feiern gemeinsam Erfolge, tragen gemeinsam schwere Zeiten und erinnern uns gegenseitig daran, niemals aufzugeben. Wenn einer fällt, helfen die anderen ihm wieder aufzustehen. Wenn einer lacht, lachen alle mit. Und wenn jemand Schutz, Rückhalt oder Unterstützung braucht, steht die gesamte Community hinter ihm.</p>
|
||
<p data-i18n="com_7">Was als TikTok-Live begonnen hat, ist längst zu etwas viel Größerem geworden: zu echten Freundschaften, besonderen Verbindungen und einer Familie, die man sich selbst ausgesucht hat.</p>
|
||
<p data-i18n="com_8">Wir sind nicht immer einer Meinung. Wir sind nicht immer leise. Und wir sind ganz sicher nicht normal. Aber wir sind echt, wir sind loyal und wir gehören zusammen.</p>
|
||
<p class="quote" data-i18n="com_quote" style="margin-top:1.4rem;">Das ist Team Dogi.<br>Das ist unsere Community.<br>Das ist Familie. 🩵</p>
|
||
<p style="text-align:right;"><strong data-i18n="com_signatur">– DogFather, im Namen von Team Dogi 🩵</strong></p>
|
||
</div>
|
||
</section>
|
||
|
||
<section>
|
||
<div class="container">
|
||
<h2 class="text-center" data-i18n="com_werte_h2">Werte der Community</h2>
|
||
<div class="grid grid-3">
|
||
<div class="card text-center"><h3 data-i18n="com_wert1_h3">🩵 Familie</h3><p data-i18n="com_wert1_p">Team Dogi ist Familie — niemand fühlt sich allein.</p></div>
|
||
<div class="card text-center"><h3 data-i18n="com_wert2_h3">🎉 Community-Treffen</h3><p data-i18n="com_wert2_p">Reale Treffen mit der Community, z.B. rund um Dogis Geburtstag.</p></div>
|
||
<div class="card text-center"><h3 data-i18n="com_wert3_h3">💬 Offenes Ohr</h3><p data-i18n="com_wert3_p">Immer erreichbar, immer präsent.</p></div>
|
||
</div>
|
||
<div class="btn-row" style="justify-content:center;">
|
||
<a class="btn btn-outline" href="medien-dogfather.html#events" data-i18n="com_aktionen_btn">Community-Aktionen ansehen</a>
|
||
<a class="btn btn-outline" href="stimmen.html" data-i18n="com_stimmen_btn">Stimmen aus der Community</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<div id="site-footer"></div>
|
||
<script src="assets/js/i18n-community.js?v=20260821s"></script>
|
||
<script src="assets/js/main.js?v=20260821s"></script>
|
||
</body>
|
||
</html>
|