Files
dogfather-universe/community.html
T
DogFatherGitandClaude Sonnet 5 57966e24d0 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]>
2026-08-21 19:25:12 +02:00

91 lines
6.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>