Files
dogfather-universe/stimmen.html
T
DogFatherGitandClaude Sonnet 5 81f55d67db Team-Verwaltung Runde 2: bestehende Mitglieder importieren + Kategorien/Seitentitel editierbar
Nutzer-Wunsch 21.08.2026: "wenn ich eine änderung mache ist es auch für
jeden für die die schon da sind und die neuen" + "ich will ich titel
und namen von kategorien und seiten ändern können in der verwaltung".

Backend (braucht Filipes manuellen Deploy):
- Migration 0008: team_members bekommt intro/bioHtml/extraCta-Spalten
  -- volle Feld-Parität mit den von Hand gepflegten Profilen (Diene/
  Patrick/Bananenstift/Marina nutzen diese Felder).
- routes/team.js: neue importLegacyMember()-Funktion -- übernimmt ein
  bestehendes Profil 1:1 in die Datenbank, OHNE erneut zu übersetzen
  (die vorhandenen, von Hand geschriebenen Übersetzungen bleiben
  erhalten). Idempotent: mehrfacher Import erzeugt keine Duplikate.
- routes/site-texts.js (neu): admin-editierbare Kategorie-Namen und
  Seitentitel, generischer key->{de,...}-Override über app_settings
  (wie "Event des Jahres"), fester Schlüssel-Katalog aus
  Sicherheitsgründen. Leeres Feld setzt auf den Standardtext zurück.
- 27 Tests in isolierter Testumgebung geprüft (kein better-sqlite3
  lokal kompilierbar).

Frontend:
- window.dogiTeamZusammenfuehren() (main.js): admin-Mitglieder
  ÜBERSCHREIBEN jetzt gleichnamige statische Einträge (per slug) statt
  sie zu duplizieren -- eine Bearbeitung wirkt dadurch für alle.
- window.dogiSiteTexteLaden() + applyTranslations() erweitert um
  data-site-text-key -- Kategorie-Seitentitel (team-modis.html/
  team-scouts.html/creator.html/manager.html) sind jetzt live editierbar.
- Verwaltung: "📥 Bestehende Mitglieder importieren"-Knopf (holt VanVan/
  Diene/Funny/Miss/Marina/Ghost/Patrick/Bananenstift aus den data-*.js-
  Dateien, VanVan bewusst ausgenommen -- eigene Sonderkarte + Seite),
  erweitertes Formular (Intro/ausführliche Vorstellung/zweiter Button,
  eingeklappt unter "Erweitert"), neue Sektion "Kategorien &
  Seitentitel" (4 Karten, sofort wirksam auf Website UND Verwaltung).

Beim Testen einen echten UX-Bug gefunden und gefixt: die "Gespeichert"-
Meldung nach dem Speichern eines Mitglieds wurde von der direkt
anschließenden Formular-Zurücksetzung sofort wieder überschrieben und
war nie sichtbar.

Cache-Busting-Version auf 20260821k erhöht.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-21 03:47:51 +02:00

95 lines
5.0 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>Stimmen über DogFather — DOGFATHER UNIVERSE</title>
<meta name="description" content="Was die Community und das Team über DogFather sagen." />
<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="Stimmen über DogFather — DOGFATHER UNIVERSE" />
<meta property="og:description" content="Was die Community und das Team über DogFather sagen." />
<meta property="og:image" content="https://dogfather-universe.com/assets/img/og-cover.jpg" />
<meta property="og:url" content="https://dogfather-universe.com/stimmen.html" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Stimmen über DogFather — DOGFATHER UNIVERSE" />
<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=20260821k" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260821k" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260821k" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260821k" />
</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>
<main>
<section class="hero page-bg">
<div class="hero-banner"><img src="/assets/img/bg-stimmen.jpg" alt="" loading="eager" /></div>
<div class="container">
<span class="eyebrow" data-i18n="st_eyebrow">Welt 2 — HasiDog</span>
<h1 data-i18n="st_h1">Stimmen über DogFather</h1>
<p class="lead worlds" data-i18n="st_lead">Was Community und Team sagen.</p>
</div>
</section>
<!-- ===== Eigene Stimme einreichen (20.08.2026, Nutzer-Wunsch: "eine
richtig geile kachel ... wo die leute mit namen und tiktok namen
mir eine nachricht schreiben können", "das wird mega persoenlich
zu den fans"). Landet in der Verwaltung, wird NIE automatisch
veroeffentlicht -- siehe server-internal/routes/testimonials.js. -->
<section class="section-tight">
<div class="container">
<div class="stimmen-einreichen-kachel" id="stimmen-formular-box">
<span class="stimmen-einreichen-glanz" aria-hidden="true"></span>
<div class="stimmen-einreichen-kopf">
<span class="stimmen-einreichen-herz" aria-hidden="true">💌</span>
<h2 data-i18n="st_form_titel">Deine Stimme zählt</h2>
<p class="small" data-i18n="st_form_text">
Was bedeutet dir Team Dogi? Schreib uns deine Geschichte — mit etwas Glück liest DogFather sie
persönlich und stellt sie hier auf die Seite.
</p>
</div>
<form id="stimmen-formular">
<div class="field">
<label for="st-name" data-i18n="st_form_name_label">Dein Name</label>
<input type="text" id="st-name" maxlength="60" required />
</div>
<div class="field">
<label for="st-tiktok" data-i18n="st_form_tiktok_label">TikTok-Name (optional)</label>
<input type="text" id="st-tiktok" maxlength="40" placeholder="@dein-name" />
</div>
<div class="field">
<label for="st-nachricht" data-i18n="st_form_nachricht_label">Deine Nachricht</label>
<textarea id="st-nachricht" maxlength="500" rows="4" required data-i18n-attr="placeholder:st_form_nachricht_placeholder" placeholder="Erzähl uns, was dir Team Dogi bedeutet …"></textarea>
</div>
<button type="submit" class="btn btn-primary" style="width:100%;" data-i18n="st_form_absenden">💙 Nachricht einreichen</button>
</form>
<p class="stimmen-erfolg" id="stimmen-erfolg" data-i18n="st_form_erfolg">Danke dir! Deine Nachricht wurde eingereicht und wird von Dogi persönlich geprüft. 🩵</p>
<p class="stimmen-fehler" id="stimmen-fehler"></p>
</div>
</div>
</section>
<!-- ===== Echte, freigegebene Stimmen -- bleibt komplett unsichtbar, bis
mindestens eine Nachricht in der Verwaltung freigegeben wurde (kein
Platzhaltertext mehr). ===== -->
<section class="section-tight" id="stimmen-echte-root" hidden>
<div class="container">
<h2 class="text-center" data-i18n="st_echte_titel">Das sagt die Community</h2>
<div class="grid grid-3" id="stimmen-echte-grid" style="margin-top:1.6rem;"></div>
</div>
</section>
</main>
<div id="site-footer"></div>
<script src="assets/js/i18n-stimmen.js?v=20260821k"></script>
<script src="assets/js/main.js?v=20260821k"></script>
<script src="assets/js/stimmen.js?v=20260821k"></script>
</body>
</html>