commit f8e4cf82db0cde924ad069f270f83b45bac6cff6 Author: Dogfather Date: Thu Jul 30 20:09:09 2026 +0200 DOGFATHER UNIVERSE: erste lauffähige Website + Bewerbungs-Postfach + Hosting-Vorbereitung diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..238ab9b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +Thumbs.db +*.log +node_modules/ +cloudflare-worker/.wrangler/ +cloudflare-worker/node_modules/ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..ead820c --- /dev/null +++ b/404.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + +Seite nicht gefunden — DOGFATHER UNIVERSE + + + + + + + + + +
+
+
+ 404 +

Diese Seite ist verlorengegangen 🐾

+

Selbst HasiDog konnte sie nicht erschnüffeln.

+ +
+
+
+ + + + + diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..11bcbac --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,92 @@ +# DOGFATHER UNIVERSE — Go-Live-Anleitung + +Diese Website ist rein statisch (HTML/CSS/JS) — sobald eine Domain feststeht, ist „online stellen" +nur noch eine Frage von ein paar Klicks/Befehlen, kein Code-Umbau nötig. Diese Datei ist die +Checkliste dafür. + +## 1. Domain-Platzhalter ersetzen (einmalig, sobald Domain feststeht) + +An folgenden Stellen steht aktuell `REPLACE-WITH-YOUR-DOMAIN.tld` als Platzhalter: + +- `sitemap.xml` (alle ``-Einträge) +- `robots.txt` (Sitemap-Zeile) +- in **jeder** `.html`-Datei: `og:url`, `og:image`, `twitter:image` (im ``) + +Am schnellsten mit Suchen-&-Ersetzen im Editor, oder per Terminal (im Ordner `DogFather-Website/`): + +```bash +# Beispiel mit echter Domain (macOS/Linux/Git-Bash): +find . -type f \( -name "*.html" -o -name "*.xml" -o -name "*.txt" \) \ + -exec sed -i 's/REPLACE-WITH-YOUR-DOMAIN.tld/deine-domain.de/g' {} + +``` + +## 2. Social-Preview-Bild ergänzen (optional, aber empfohlen) + +`assets/img/og-cover.jpg` (1200×630px) anlegen — erscheint als Vorschaubild, wenn Links z.B. bei +TikTok, WhatsApp oder Discord geteilt werden. Bis dahin zeigen Plattformen einfach kein Bild an, +nichts bricht. + +## 3. Bewerbungs-Postfach deployen (falls noch nicht geschehen) + +Siehe `cloudflare-worker/README.md`. Danach die Worker-URL eintragen in: +- `assets/js/forms.js` → `API_BASE_URL` +- `postfach.html` → `API_BASE_URL` + +## 4. Hosting wählen & deployen + +Alle drei Optionen sind kostenlos im Free-Tier und unterstützen automatisch HTTPS + +Custom-Domains. Empfehlung: **Cloudflare Pages**, weil das Bewerbungs-Postfach schon auf +Cloudflare läuft — dann liegt alles in einem Account. + +### Option A — Cloudflare Pages (empfohlen) + +```bash +cd DogFather-Website +npx wrangler pages deploy . --project-name=dogfather-universe +``` + +Danach im Cloudflare-Dashboard unter **Workers & Pages → dogfather-universe → Custom domains** +die eigene Domain hinzufügen (DNS läuft automatisch über Cloudflare, wenn die Domain dort +verwaltet wird). + +### Option B — Netlify + +1. Auf [netlify.com](https://netlify.com) einloggen (kostenloser Account reicht) +2. „Add new site" → „Deploy manually" → den Ordner `DogFather-Website/` per Drag&Drop hochladen + (oder Repo verbinden, falls die Seite auf GitHub liegt) +3. `netlify.toml` wird automatisch erkannt (liegt schon bereit) +4. Unter **Site settings → Domain management** die eigene Domain hinzufügen + +### Option C — GitHub Pages + +1. Repo auf GitHub erstellen, Inhalt von `DogFather-Website/` pushen (siehe Abschnitt 5) +2. Im Repo unter **Settings → Pages** → Branch `main`, Ordner `/ (root)` auswählen +3. Datei `.nojekyll` liegt schon bereit (verhindert, dass GitHub Dateien wie `_headers` + fälschlich ignoriert) +4. Unter **Settings → Pages → Custom domain** die eigene Domain eintragen — GitHub legt dafür + automatisch eine `CNAME`-Datei im Repo an + +## 5. Git-Repo einrichten (falls noch nicht geschehen) + +```bash +cd DogFather-Website +git init +git add . +git commit -m "DOGFATHER UNIVERSE — erste lauffähige Version" +git branch -M main +git remote add origin +git push -u origin main +``` + +`.gitignore` ist bereits vorbereitet (schließt z.B. Wrangler-Cache aus). + +## 6. Nach dem Go-Live prüfen + +- [ ] Alle Seiten über die echte Domain aufrufbar (nicht nur `index.html`, auch Unterseiten) +- [ ] `https://deine-domain.de/robots.txt` und `/sitemap.xml` erreichbar +- [ ] Bewerbungsformular sendet erfolgreich (Postfach zeigt neue Einträge) +- [ ] Link-Vorschau testen, z.B. mit dem + [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/) oder + [Twitter Card Validator](https://cards-dev.twitter.com/validator) +- [ ] In `cloudflare-worker/src/worker.js` → `corsHeaders()` `"*"` durch die echte Domain + ersetzen und den Worker neu deployen (`wrangler deploy`) diff --git a/_headers b/_headers new file mode 100644 index 0000000..834f2d8 --- /dev/null +++ b/_headers @@ -0,0 +1,9 @@ +# DOGFATHER UNIVERSE — Sicherheits-Header +# Funktioniert automatisch auf Netlify & Cloudflare Pages. GitHub Pages +# unterstützt diese Datei nicht (dort keine Wirkung, aber auch kein Fehler). + +/* + X-Frame-Options: DENY + X-Content-Type-Options: nosniff + Referrer-Policy: strict-origin-when-cross-origin + Permissions-Policy: geolocation=(), camera=(), microphone=() diff --git a/aktion-detail.html b/aktion-detail.html new file mode 100644 index 0000000..648be41 --- /dev/null +++ b/aktion-detail.html @@ -0,0 +1,86 @@ + + + + + +Aktion — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Aktionen & Projekte +

Aktion wird geladen …

+

+
+
+ +
+
+
Foto folgt
+
+
+
+ +
+ +
+
+ + + + + + + diff --git a/aktionen.html b/aktionen.html new file mode 100644 index 0000000..fb14300 --- /dev/null +++ b/aktionen.html @@ -0,0 +1,61 @@ + + + + + +Aktionen & Projekte — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Aktionen & Projekte +

Was Team Dogi gerade bewegt

+

Von Tierwohl-Aktionen bis Merchandise-Kooperationen.

+
+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..b1fe270 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,450 @@ +/* ===================================================================== + DOGFATHER UNIVERSE — main.css + Gemeinsames Design-System für alle drei Welten (Dogfather / HasiDog / + Manager Dogfather). Farben kommen aus den theme-*.css Dateien über + CSS-Variablen — dieses File ist bewusst themen-neutral. + ===================================================================== */ + +/* ---------- Reset ---------- */ +*, *::before, *::after { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +img, svg { max-width: 100%; display: block; } +a { color: inherit; text-decoration: none; } +button { font: inherit; } +ul { list-style: none; margin: 0; padding: 0; } + +/* ---------- Fallback-Theme (Dogfather) — wird von theme-*.css überschrieben ---------- */ +:root { + --bg: #0b0d10; + --bg-alt: #12151a; + --card-bg: #171b21; + --text: #f3f5f7; + --text-muted: #9aa4b2; + --border: #262c35; + --accent: #8fd9ea; /* Babyblau */ + --accent-2: #8b5cf6; /* Lila */ + --accent-contrast: #0b0d10; + --radius: 14px; + --font-head: "Poppins", "Segoe UI", system-ui, sans-serif; + --font-body: "Inter", "Segoe UI", system-ui, sans-serif; + --shadow: 0 10px 30px rgba(0,0,0,.35); +} + +body { + background: var(--bg); + color: var(--text); + font-family: var(--font-body); + line-height: 1.6; + -webkit-font-smoothing: antialiased; + min-height: 100vh; + position: relative; + overflow-x: hidden; +} + +h1, h2, h3, h4 { + font-family: var(--font-head); + line-height: 1.2; + margin: 0 0 .5em; + font-weight: 700; +} +h1 { font-size: clamp(2rem, 5vw, 3.2rem); } +h2 { font-size: clamp(1.5rem, 3.5vw, 2.3rem); } +h3 { font-size: 1.3rem; } +p { margin: 0 0 1em; color: var(--text-muted); } +.lead { font-size: 1.15rem; color: var(--text); } + +.container { + width: min(1180px, 92vw); + margin: 0 auto; +} + +section { padding: clamp(3rem, 6vw, 5.5rem) 0; } +.section-tight { padding: clamp(1.5rem, 3vw, 2.5rem) 0; } + +.eyebrow { + display: inline-block; + font-size: .78rem; + letter-spacing: .14em; + text-transform: uppercase; + color: var(--accent); + font-weight: 700; + margin-bottom: .8em; +} + +/* ---------- Nebel/Partikel Hintergrund ---------- */ +.fog-layer { + position: fixed; + inset: 0; + pointer-events: none; + z-index: 0; + overflow: hidden; +} +.fog-layer span { + position: absolute; + border-radius: 50%; + background: radial-gradient(circle, var(--accent) 0%, transparent 70%); + opacity: .08; + filter: blur(4px); + animation: drift 26s linear infinite; +} +@keyframes drift { + 0% { transform: translateY(0) translateX(0); } + 50% { transform: translateY(-40px) translateX(20px); } + 100% { transform: translateY(0) translateX(0); } +} +@media (prefers-reduced-motion: reduce) { + .fog-layer span { animation: none; } +} + +/* ---------- Header / Navigation ---------- */ +header.site-header { + position: sticky; + top: 0; + z-index: 50; + background: rgba(11,13,16,.82); + backdrop-filter: blur(10px); + border-bottom: 1px solid var(--border); +} +.nav-bar { + width: min(1180px, 92vw); + margin: 0 auto; + display: flex; + align-items: center; + justify-content: space-between; + padding: .9rem 0; +} +.brand { + display: flex; + align-items: center; + gap: .6rem; + font-family: var(--font-head); + font-weight: 800; + font-size: 1.15rem; + letter-spacing: .02em; +} +.brand .heart { color: var(--accent); } +.brand small { + display: block; + font-size: .6rem; + font-weight: 500; + letter-spacing: .1em; + color: var(--text-muted); + text-transform: uppercase; +} + +.nav-links { + display: flex; + align-items: center; + gap: 1.6rem; +} +.nav-group { position: relative; } +.nav-group > button { + background: none; + border: none; + color: var(--text); + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + gap: .3rem; + padding: .5rem 0; +} +.nav-group > button:hover, .nav-group.open > button { color: var(--accent); } +.nav-flat { font-weight: 600; padding: .5rem 0; } +.nav-flat:hover, .nav-flat.active { color: var(--accent); } +.nav-dropdown { + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%); + min-width: 220px; + background: var(--card-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: .5rem; + box-shadow: var(--shadow); + display: none; + flex-direction: column; +} +.nav-group.open .nav-dropdown { display: flex; } +.nav-dropdown a { + padding: .55rem .7rem; + border-radius: 8px; + font-size: .92rem; + color: var(--text-muted); +} +.nav-dropdown a:hover, .nav-dropdown a.active { background: var(--bg-alt); color: var(--accent); } + +.nav-cta { + padding: .55rem 1.1rem; + border-radius: 999px; + background: var(--accent); + color: var(--accent-contrast); + font-weight: 700; + font-size: .88rem; +} + +.nav-toggle { + display: none; + background: none; + border: 1px solid var(--border); + border-radius: 8px; + color: var(--text); + padding: .5rem .7rem; + cursor: pointer; +} + +@media (max-width: 880px) { + .nav-toggle { display: block; } + .nav-links { + position: fixed; + inset: 62px 0 0 0; + background: var(--bg); + flex-direction: column; + align-items: stretch; + padding: 1.2rem 6vw; + gap: .3rem; + transform: translateY(-110%); + transition: transform .25s ease; + overflow-y: auto; + } + .nav-links.open { transform: translateY(0); } + .nav-group > button { width: 100%; justify-content: space-between; padding: .9rem 0; border-bottom: 1px solid var(--border); } + .nav-flat { display: block; padding: .9rem 0; border-bottom: 1px solid var(--border); } + .nav-dropdown { position: static; transform: none; box-shadow: none; width: 100%; } + .nav-group.open .nav-dropdown { display: flex; } + .nav-cta { align-self: flex-start; margin: 1rem 0; } +} + +/* ---------- Buttons ---------- */ +.btn { + display: inline-flex; + align-items: center; + gap: .5rem; + padding: .8rem 1.5rem; + border-radius: 999px; + font-weight: 700; + font-size: .95rem; + border: 1px solid transparent; + cursor: pointer; + transition: transform .15s ease, opacity .15s ease; +} +.btn:hover { transform: translateY(-2px); } +.btn-primary { background: var(--accent); color: var(--accent-contrast); } +.btn-secondary { background: var(--accent-2); color: #fff; } +.btn-outline { background: transparent; border-color: var(--border); color: var(--text); } +.btn-outline:hover { border-color: var(--accent); color: var(--accent); } +.btn-row { display: flex; gap: 1rem; flex-wrap: wrap; margin-top: 1.5rem; } + +/* ---------- Hero ---------- */ +.hero { + position: relative; + padding: clamp(4rem, 10vw, 7rem) 0; + text-align: center; +} +.hero .worlds { + margin: .6rem 0 1.2rem; + color: var(--text-muted); + font-size: 1.05rem; +} +.hero-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.2rem; + margin-top: 3rem; +} +@media (max-width: 760px) { .hero-grid { grid-template-columns: 1fr; } } + +/* ---------- Cards ---------- */ +.card { + background: var(--card-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.6rem; + box-shadow: var(--shadow); + height: 100%; + transition: border-color .15s ease, transform .15s ease; +} +.card:hover { border-color: var(--accent); transform: translateY(-3px); } +.card h3 { margin-bottom: .4rem; } +.card .tag { + display: inline-block; + font-size: .72rem; + text-transform: uppercase; + letter-spacing: .08em; + color: var(--accent); + border: 1px solid var(--accent); + border-radius: 999px; + padding: .15rem .6rem; + margin-bottom: .8rem; +} + +.grid { display: grid; gap: 1.4rem; } +.grid-2 { grid-template-columns: repeat(2, 1fr); } +.grid-3 { grid-template-columns: repeat(3, 1fr); } +.grid-4 { grid-template-columns: repeat(4, 1fr); } +@media (max-width: 980px) { .grid-3, .grid-4 { grid-template-columns: repeat(2, 1fr); } } +@media (max-width: 620px) { .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } } + +/* ---------- Profil-Karten (Team/Creator) ---------- */ +.profile-card { + background: var(--card-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; + text-align: center; + padding: 1.6rem 1.2rem; +} +.avatar { + width: 96px; + height: 96px; + border-radius: 50%; + margin: 0 auto .9rem; + background: linear-gradient(135deg, var(--accent), var(--accent-2)); + display: flex; + align-items: center; + justify-content: center; + font-family: var(--font-head); + font-weight: 800; + font-size: 1.6rem; + color: var(--accent-contrast); + overflow: hidden; +} +.avatar img { width: 100%; height: 100%; object-fit: cover; } +.profile-card .role { color: var(--accent); font-weight: 600; font-size: .85rem; margin-bottom: .6rem; } +.profile-card .quote { font-style: italic; font-size: .9rem; } +.profile-card .socials { display: flex; justify-content: center; gap: .6rem; margin-top: .8rem; } +.profile-card .socials a { + border: 1px solid var(--border); + border-radius: 999px; + padding: .35rem .8rem; + font-size: .78rem; + color: var(--text-muted); +} +.profile-card .socials a:hover { color: var(--accent); border-color: var(--accent); } + +/* ---------- Placeholder-Bild-Boxen (bis echte Fotos da sind) ---------- */ +.img-placeholder { + aspect-ratio: 4 / 3; + border-radius: var(--radius); + background: repeating-linear-gradient(135deg, var(--bg-alt), var(--bg-alt) 10px, var(--card-bg) 10px, var(--card-bg) 20px); + border: 1px dashed var(--border); + display: flex; + align-items: center; + justify-content: center; + color: var(--text-muted); + font-size: .8rem; + text-align: center; + padding: 1rem; +} + +/* ---------- Timeline (Zeitreise) ---------- */ +.timeline { position: relative; margin: 2rem 0; padding-left: 2rem; border-left: 2px solid var(--border); } +.timeline-item { position: relative; padding-bottom: 2.4rem; } +.timeline-item::before { + content: ""; + position: absolute; + left: -2.45rem; + top: .2rem; + width: 14px; height: 14px; + border-radius: 50%; + background: var(--accent); + box-shadow: 0 0 0 4px var(--bg); +} +.timeline-item .date { color: var(--accent); font-weight: 700; font-size: .85rem; } + +/* ---------- Gallery / Lightbox ---------- */ +.filter-bar { display: flex; gap: .6rem; flex-wrap: wrap; margin-bottom: 1.6rem; } +.filter-btn { + border: 1px solid var(--border); + background: transparent; + color: var(--text-muted); + padding: .5rem 1rem; + border-radius: 999px; + cursor: pointer; + font-size: .85rem; +} +.filter-btn.active, .filter-btn:hover { border-color: var(--accent); color: var(--accent); } +.gallery-item { cursor: pointer; } +.lightbox { + position: fixed; inset: 0; background: rgba(0,0,0,.85); + display: none; align-items: center; justify-content: center; z-index: 200; padding: 5vh 5vw; +} +.lightbox.open { display: flex; } +.lightbox img, .lightbox .img-placeholder { max-height: 85vh; max-width: 90vw; } +.lightbox-close { + position: absolute; top: 20px; right: 30px; color: #fff; font-size: 2rem; cursor: pointer; background: none; border: none; +} + +/* ---------- Formulare ---------- */ +form.app-form { display: grid; gap: 1rem; max-width: 640px; } +.field { display: grid; gap: .4rem; } +.field label { font-weight: 600; font-size: .9rem; } +.field input, .field select, .field textarea { + background: var(--bg-alt); + border: 1px solid var(--border); + border-radius: 10px; + padding: .75rem .9rem; + color: var(--text); + font-family: var(--font-body); +} +.field textarea { min-height: 120px; resize: vertical; } +.field .error-msg { color: #ff6b6b; font-size: .8rem; display: none; } +.field.has-error input, .field.has-error select, .field.has-error textarea { border-color: #ff6b6b; } +.field.has-error .error-msg { display: block; } +.form-status { padding: .9rem 1.1rem; border-radius: 10px; font-size: .9rem; display: none; } +.form-status.show { display: block; } +.form-status.success { background: rgba(143,217,234,.12); border: 1px solid var(--accent); } +.form-status.error { background: rgba(255,107,107,.1); border: 1px solid #ff6b6b; } +.tabs { display: flex; gap: .6rem; margin-bottom: 1.8rem; flex-wrap: wrap; } +.tab-btn { + border: 1px solid var(--border); background: var(--card-bg); color: var(--text-muted); + padding: .7rem 1.3rem; border-radius: 999px; cursor: pointer; font-weight: 600; +} +.tab-btn.active { border-color: var(--accent); color: var(--accent); } +.tab-panel { display: none; } +.tab-panel.active { display: block; } + +/* ---------- Footer ---------- */ +footer.site-footer { + border-top: 1px solid var(--border); + padding: 3rem 0 2rem; + margin-top: 4rem; + position: relative; + z-index: 1; +} +.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 2rem; } +@media (max-width: 760px) { .footer-grid { grid-template-columns: 1fr 1fr; } } +.footer-grid h4 { font-size: .85rem; text-transform: uppercase; letter-spacing: .08em; color: var(--accent); } +.footer-grid ul { display: grid; gap: .5rem; } +.footer-grid a { color: var(--text-muted); font-size: .9rem; } +.footer-grid a:hover { color: var(--accent); } +.footer-bottom { + margin-top: 2.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border); + display: flex; justify-content: space-between; flex-wrap: wrap; gap: .8rem; + font-size: .8rem; color: var(--text-muted); +} + +/* ---------- Badges / Hierarchy ---------- */ +.badge { display: inline-block; font-size: .7rem; text-transform: uppercase; letter-spacing: .06em; padding: .2rem .6rem; border-radius: 999px; background: var(--bg-alt); border: 1px solid var(--border); color: var(--text-muted); } +.badge.rank-1 { border-color: var(--accent); color: var(--accent); } + +/* ---------- QR ---------- */ +.qr-card { text-align: center; } +.qr-card .img-placeholder { width: 160px; height: 160px; margin: 0 auto 1rem; aspect-ratio: auto; } + +/* ---------- Utility ---------- */ +.text-center { text-align: center; } +.mt-0 { margin-top: 0; } +.muted { color: var(--text-muted); } +.small { font-size: .85rem; } +.todo-note { + border: 1px dashed var(--accent-2); + background: rgba(139,92,246,.08); + padding: 1rem 1.2rem; + border-radius: 10px; + font-size: .85rem; + color: var(--text-muted); + margin: 1.5rem 0; +} +.todo-note strong { color: var(--accent-2); } diff --git a/assets/css/theme-dogfather.css b/assets/css/theme-dogfather.css new file mode 100644 index 0000000..829c4e0 --- /dev/null +++ b/assets/css/theme-dogfather.css @@ -0,0 +1,16 @@ +/* ===================================================================== + theme-dogfather.css — Welt 1: DOGFATHER (Streamer/Person) + Babyblau / Schwarz / Lila — die "Core"-Welt, sitzt auch als globaler + Default darunter (main.css Fallback = diese Werte). + ===================================================================== */ +:root[data-theme="dogfather"] { + --bg: #0a0c10; + --bg-alt: #12151b; + --card-bg: #171b22; + --text: #f4f6f8; + --text-muted: #9aa4b3; + --border: #262b35; + --accent: #8fd9ea; /* Babyblau — Markenfarbe */ + --accent-2: #8b5cf6; /* Lila */ + --accent-contrast: #0a0c10; +} diff --git a/assets/css/theme-hasidog.css b/assets/css/theme-hasidog.css new file mode 100644 index 0000000..b098263 --- /dev/null +++ b/assets/css/theme-hasidog.css @@ -0,0 +1,15 @@ +/* ===================================================================== + theme-hasidog.css — Welt 2: HASIDOG (Community/Maskottchen/Kasper) + Babyblau / Silber / Nachtblau — verspielt, weicher, "Familie"-Gefühl. + ===================================================================== */ +:root[data-theme="hasidog"] { + --bg: #0d1420; /* Nachtblau */ + --bg-alt: #131b29; + --card-bg: #182233; + --text: #f2f6fa; + --text-muted: #a9b6c9; + --border: #263248; + --accent: #8fd9ea; /* Babyblau */ + --accent-2: #c7ccd1; /* Silber */ + --accent-contrast: #0d1420; +} diff --git a/assets/css/theme-spicymedia.css b/assets/css/theme-spicymedia.css new file mode 100644 index 0000000..6f78800 --- /dev/null +++ b/assets/css/theme-spicymedia.css @@ -0,0 +1,15 @@ +/* ===================================================================== + theme-spicymedia.css — Welt 3: MANAGER DOGFATHER (Spicy Media) + Schwarz / Rot / Orange — professionell, Agentur-Charakter. + ===================================================================== */ +:root[data-theme="spicymedia"] { + --bg: #0a0a0a; + --bg-alt: #131313; + --card-bg: #191717; + --text: #f6f5f4; + --text-muted: #ab9f9c; + --border: #2c2726; + --accent: #e0263f; /* Rot */ + --accent-2: #ff7a1a; /* Orange */ + --accent-contrast: #0a0a0a; +} diff --git a/assets/js/data-aktionen.js b/assets/js/data-aktionen.js new file mode 100644 index 0000000..3d16061 --- /dev/null +++ b/assets/js/data-aktionen.js @@ -0,0 +1,70 @@ +/* ===================================================================== + data-aktionen.js — Aktionen & Projekte-Datenobjekt + + aktionen.html rendert daraus die Übersichtskarten, aktion-detail.html + liest per URL-Parameter (?id=slug) den passenden Eintrag aus und + zeigt die Detailansicht — so gibt es EIN Template für alle Aktionen, + ohne für jede neue Aktion eine neue HTML-Datei zu brauchen. + + Felder: + id – eindeutiger Slug (für aktion-detail.html?id=...) + title, summary, description (Array von Absätzen) + status – "geplant" | "läuft" | "abgeschlossen" + tag – kurzer Kategorie-Text fürs Badge + photo – Pfad zu assets/img/... oder "" für Platzhalter + ===================================================================== */ + +const AKTIONEN = [ + { + id: "weihnachtsaktion-portugal", + title: "Weihnachtsaktion & Portugal-Trip", + tag: "Tierwohl", + status: "geplant", + summary: "Weihnachtsaktion für Tierheime in Portugal — Team Dogi hilft Tieren in Not.", + description: [ + "Jedes Jahr organisiert Team Dogi eine Weihnachtsaktion zugunsten von Tierheimen in Portugal.", + // TODO: genaue Details (Spendenziel, Ablauf, Partner-Tierheime, Termin) ergänzen. + ], + photo: "", + }, + { + id: "community-treffen", + title: "Community-Treffen (Geburtstag)", + tag: "Community", + status: "geplant", + summary: "Ein persönliches Treffen mit der Community rund um Dogfathers Geburtstag.", + description: [ + "Team Dogi ist Familie — deshalb gibt es ein reales Treffen mit der Community.", + // TODO: Ort, Datum, Anmeldeprozess ergänzen. + ], + photo: "", + }, + { + id: "vanvan-teddys", + title: "Kooperation: VanVan Teddys", + tag: "Merchandise", + status: "läuft", + summary: "Merchandise-Kooperation rund um VanVan — Teddys für die Community.", + description: [ + "Gemeinsam mit VanVan entstehen limitierte Teddys als Teil des Merchandise-Angebots.", + // TODO: Preis, Verfügbarkeit, Bestellweg ergänzen. + ], + photo: "", + }, + { + id: "online-shop", + title: "Online-Shop (in Planung)", + tag: "Merchandise", + status: "geplant", + summary: "Der eigene Online-Shop für Tassen, Decken, Popsockets, Schlüsselanhänger, Sticker & mehr.", + description: [ + "Aktuell läuft der Merchandise-Vertrieb nur über private Einzelbestellungen.", + "Ziel: ein eigener Online-Shop, damit die Community jederzeit bestellen kann.", + // TODO: Launch-Termin, Plattform (z.B. Shopify) ergänzen. + ], + photo: "", + }, + // TODO: weitere Aktionen/Projekte hier nach gleichem Muster ergänzen. +]; + +if (typeof window !== "undefined") window.AKTIONEN = AKTIONEN; diff --git a/assets/js/data-creator.js b/assets/js/data-creator.js new file mode 100644 index 0000000..45020b2 --- /dev/null +++ b/assets/js/data-creator.js @@ -0,0 +1,27 @@ +/* ===================================================================== + data-creator.js — Creator-Datenobjekt (Creator im Spicy-Media-Team) + + TODO: Noch keine Creator-Profile final geklärt (siehe Masterplan- + Fragenkatalog, Block Creator/Team). Sobald Namen + Infos da sind, + einfach nach dem Muster unten Objekte ins Array einfügen — + creator.html liest automatisch aus und rendert Filter/Karten. + + Felder: + name, category (z.B. "Gaming", "Lifestyle", "Comedy" ...), + role, photo, quote, social, status + ===================================================================== */ + +const CREATORS = [ + // Beispiel-Struktur (auskommentiert, zur Orientierung beim Befüllen): + // { + // name: "Name", + // category: "Comedy", + // role: "Creator bei Spicy Media", + // photo: "assets/img/creator-name.jpg", + // quote: "Kurzes Zitat", + // social: { tiktok: "https://tiktok.com/@handle" }, + // status: "aktiv", + // }, +]; + +if (typeof window !== "undefined") window.CREATORS = CREATORS; diff --git a/assets/js/data-modis.js b/assets/js/data-modis.js new file mode 100644 index 0000000..4bf9fb8 --- /dev/null +++ b/assets/js/data-modis.js @@ -0,0 +1,94 @@ +/* ===================================================================== + data-modis.js — Modi-/Core-Team-Datenobjekt + + Hierarchie (wichtig, bitte bei Änderungen respektieren): + VanVan (rechte Hand, eigene Seite vanvan.html) + > Diene (rechte Hand von VanVan) + > Funny (Modi) + > Miss (Modi + Cutterin) + > Marina / Michi (Kommentare auf Clip-Accounts) + + Feld "rank" steuert nur die Sortier-/Anzeigereihenfolge (1 = höchste + Stufe). VanVan wird auf team-modis.html separat hervorgehoben UND hat + eine eigene exklusive Seite (vanvan.html) — hier trotzdem gelistet, + damit die Hierarchie an einer Stelle vollständig bleibt. + + Felder: name, role, rank, photo, quote, social, page (optionale eigene + Unterseite), status + ===================================================================== */ + +const MODIS = [ + { + name: "VanVan", + role: "Rechte Hand von Dogfather · Musik-Produzentin (Van-Van, Spotify)", + rank: 1, + photo: "", + quote: "", // TODO: Zitat von VanVan einholen + social: {}, + page: "vanvan.html", + status: "aktiv", + }, + { + name: "Diene", + role: "Organisiert & plant gemeinsam mit VanVan", + rank: 2, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + { + name: "Funny", + role: "Modi", + rank: 3, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + { + name: "Miss", + role: "Modi & Cutterin", + rank: 4, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + { + name: "Marina", + role: "Kommentare auf den Clip-Accounts", + rank: 5, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + { + name: "Michi", + role: "Kommentare auf den Clip-Accounts", + rank: 5, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + { + name: "Dan", + role: "Team Dogi — Rolle noch zu klären", // TODO: genaue Rolle von Dan im Team klären + rank: 6, + photo: "", + quote: "", + social: {}, + page: "", + status: "aktiv", + }, + // TODO: weitere Modis/Team-Mitglieder hier nach gleichem Muster ergänzen. +]; + +if (typeof window !== "undefined") window.MODIS = MODIS; diff --git a/assets/js/data-scouts.js b/assets/js/data-scouts.js new file mode 100644 index 0000000..e731622 --- /dev/null +++ b/assets/js/data-scouts.js @@ -0,0 +1,42 @@ +/* ===================================================================== + data-scouts.js — Scout-Datenobjekt + Scouts arbeiten mit Dogfather als Manager zusammen (Spicy Media), + 50/50 Gewinn-Sharing-Modell (Details siehe manager.html / TODO). + + NEUEN SCOUT HINZUFÜGEN: einfach ein neues Objekt unten ins Array + kopieren und Felder ausfüllen. Kein Code-Umbau nötig — team-scouts.html + liest dieses Array automatisch aus. + + Felder: + name – Anzeigename (Groß-/Kleinschreibung korrekt!) + role – Kurzrolle / Fokus + photo – Pfad zu assets/img/... oder "" für Platzhalter-Avatar + quote – kurzes Zitat/Motto (optional, "" wenn keins) + social – { platform: "url", ... } optional + status – "aktiv" | "neu" | "pausiert" + ===================================================================== */ + +const SCOUTS = [ + { + name: "Patrick", + role: "Scout — Team Dogi", + photo: "", + quote: "", // TODO: Zitat von Patrick einholen + social: {}, + status: "aktiv", + }, + { + name: "Bananenstift", + role: "Scout — Team Dogi", + photo: "", + quote: "", // TODO: Zitat von Bananenstift einholen + social: {}, + status: "aktiv", + }, + // TODO: Dogi liefert die vollständige, aktuelle Scout-Liste (Namen + + // Kurzrolle) per Text nach — hier weitere Objekte nach obigem Muster + // ergänzen. Struktur bleibt gleich, egal wie viele dazukommen. +]; + +// Für + + + diff --git a/cloudflare-worker/README.md b/cloudflare-worker/README.md new file mode 100644 index 0000000..c609de2 --- /dev/null +++ b/cloudflare-worker/README.md @@ -0,0 +1,72 @@ +# DOGFATHER UNIVERSE — Bewerbungs-Postfach (Cloudflare Worker) + +Dieser Worker nimmt Bewerbungen von `bewerben.html` entgegen und speichert sie in Cloudflare KV. +Nur wer den richtigen Code kennt, kann sie über `postfach.html` einsehen — der Code wird +**serverseitig** geprüft (nicht im Browser-Code sichtbar), das ist der eigentliche Schutz. + +Kosten: läuft im kostenlosen Cloudflare-Tier (Workers Free + KV Free reichen für dieses Volumen locker). + +## Voraussetzungen + +- Ein (kostenloser) Cloudflare-Account +- Node.js installiert (für `npx wrangler`) + +## Deploy in 5 Schritten + +Alles im Ordner `cloudflare-worker/` ausführen: + +```bash +cd cloudflare-worker + +# 1. Bei Cloudflare einloggen (öffnet Browser zur Anmeldung) +npx wrangler login + +# 2. KV-Namespace anlegen (Speicher für die Bewerbungen) +npx wrangler kv namespace create BEWERBUNGEN +``` + +Die Ausgabe von Schritt 2 enthält eine `id = "..."`. Diese `id` in `wrangler.toml` bei +`REPLACE_ME` eintragen. + +```bash +# 3. Geheimen Zugangscode für das Postfach festlegen +# (wird abgefragt, nirgends im Code sichtbar — frei wählbar, z.B. ein langes Passwort) +npx wrangler secret put POSTFACH_CODE + +# 4. Worker deployen +npx wrangler deploy +``` + +Schritt 4 gibt eine URL aus, z.B. `https://dogfather-universe-postfach..workers.dev`. + +```bash +# 5. Kurz testen +curl https://dogfather-universe-postfach..workers.dev/health +# sollte {"ok":true,"service":"dogfather-universe-postfach"} zurückgeben +``` + +## Website mit dem Worker verbinden + +Nach dem Deploy die Worker-URL an zwei Stellen eintragen: + +1. `assets/js/forms.js` → Konstante `API_BASE_URL` ganz oben auf die Worker-URL setzen + (ohne abschließenden Slash). +2. `postfach.html` → Konstante `API_BASE_URL` im ` + + diff --git a/creator.html b/creator.html new file mode 100644 index 0000000..27ce59d --- /dev/null +++ b/creator.html @@ -0,0 +1,93 @@ + + + + + +Creator im Team — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Manager Dogfather — Team +

Creator im Team

+

Content Creator, die bei Spicy Media / Team Dogi mitmachen.

+
+
+ +
+
+
+
+
+ TODO: Noch keine Creator-Profile final geklärt. Sobald Namen/Infos feststehen, in assets/js/data-creator.js ergänzen — diese Seite rendert automatisch. +
+ +
+
+
+ + + + + + + diff --git a/dogfather.html b/dogfather.html new file mode 100644 index 0000000..6056715 --- /dev/null +++ b/dogfather.html @@ -0,0 +1,99 @@ + + + + + +Die Person hinter Dogfather — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 1 — Dogfather +

Die Person hinter Dogfather

+

Dogi, Hasidog — der Mensch hinter der Kamera.

+
+
+ +
+
+
+ Profilbild Dogfather
Foto folgt (assets/img/dogfather-portrait.jpg) +
+
+

Wer ist Dogfather?

+

Content Creator, Streamer auf TikTok (@dogfather0804) und das Herz einer wachsenden Community.

+

An seiner Seite: Husky Casper und Kater Simba — treue Begleiter, die längst Teil der Marke geworden sind. Mit seinem Core-Team baut Dogfather jeden Tag daran, dass sich Menschen in seiner Community nicht allein fühlen.

+
+ Hinweis zur Privatsphäre: Auf dieser Website wird ausschließlich der Persona-Name „Dogfather / Dogi" veröffentlicht — keine echten bürgerlichen Daten (kein Nachname, kein genaues Alter, keine genaue Herkunft). +
+
+
+
+ +
+
+

Persönlichkeit

+
+

Loyal

Passt auf jeden in seinem Team und seiner Community auf.

+

Witzig

Humor ist seine Sprache — auf und abseits der Kamera.

+

Immer erreichbar

Ein offenes Ohr für die Community, jederzeit.

+

Verpeilt & lustig

Chaotisch-kreativ, aber mit viel Herz — genau das macht den Charme aus.

+
+
+
+ +
+
+

Werte & Antrieb

+
+
+

🩵 Mission

+

Jeder soll lächeln und sich nicht allein fühlen. Das ist der Antrieb hinter allem, was Dogfather macht.

+
+
+

🐾 Team Dogi ist Familie

+

Nicht nur Content, sondern echte Beziehungen. Entertainer, Vertrauter, Zuhörer — mit Herz und Ehrlichkeit.

+
+
+
+
+ +
+
+

Nebenprojekte & Leidenschaften

+
+

🎵 Musik-Produzent

Eigene Songs unter dem Namen „Hasidog" auf Spotify.

+

🧸 Merchandise-Creator

Tassen, Decken, Popsockets, Schlüsselanhänger, Sticker.

+

📖 Autor

Ein Buch über Hasidog & Casper.

+
+
+ TODO: Weitere persönliche Details, Anekdoten und Insider-Fragen aus dem Masterplan-Fragenkatalog (Block „Über Dogfather") werden hier iterativ ergänzt, sobald sie mit Dogi geklärt sind. +
+
+
+
+ + + + + diff --git a/hasidog.html b/hasidog.html new file mode 100644 index 0000000..91c8354 --- /dev/null +++ b/hasidog.html @@ -0,0 +1,71 @@ + + + + + +HasiDog-Welt — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 2 — HasiDog +

Willkommen in der HasiDog-Welt

+

Babyblau, Silber, Nachtblau — verspielt, warm und familiär.

+
+
+ +
+
+
+ HasiDog Logo / Maskottchen
Foto folgt (assets/img/hasidog-logo.jpg) +
+
+

Was ist HasiDog?

+

HasiDog ist mehr als ein Spitzname — es ist die verspielte, familiäre Marke rund um Dogfathers Community. Unter dem Namen „Hasidog" erscheint auch die eigene Musik auf Spotify.

+ +
+
+
+ +
+
+

Die HasiDog-Familie

+
+

🎵 Musik

Songs unter dem Namen „Hasidog" auf Spotify.

+

🐕 Casper

Der Husky, der zum Gesicht der HasiDog-Welt wurde — eigene Seite: Kasper.

+

📖 Buch

„Hasidog & Casper" — die Geschichte in Buchform.

+
+
+ TODO: Herkunftsgeschichte des Maskottchens, Design-Beschreibung des Logos und weitere HasiDog-Lore aus dem Masterplan werden hier ergänzt. +
+
+
+
+ + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..ec1c1f2 --- /dev/null +++ b/index.html @@ -0,0 +1,94 @@ + + + + + +DOGFATHER UNIVERSE — Streamer. Community. HasiDog. Manager. + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+
+

🐾 Team Dogi ist Familie

+

Unsere Mission: Jeder soll lächeln und sich nicht allein fühlen.

+
+
+

🎥 TikTok @dogfather0804

+

Halligalli, Eindeutig Zweideutig & Hasencontent — Content mit Herz und Humor.

+
+
+

🎵 Musik: Hasidog & Van-Van

+

Eigene Musikprojekte auf Spotify — von Dogfather und VanVan.

+
+
+
+
+ +
+
+ Neu in der Community? +

Schau dir an, wer Team Dogi ausmacht

+

Von den Scouts über die Modis bis zu VanVan — lerne die Menschen hinter Dogfather kennen.

+ +
+
+
+ + + + + diff --git a/kasper.html b/kasper.html new file mode 100644 index 0000000..9db6c7a --- /dev/null +++ b/kasper.html @@ -0,0 +1,72 @@ + + + + + +Kasper — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 2 — HasiDog +

Kasper 🐾

+

Der Husky an Dogfathers Seite — Namensgeber vieler Herzen in der Community.

+
+
+ +
+
+
+ Foto: Casper
Foto folgt (assets/img/casper-1.jpg — ggf. aus HEIC konvertieren) +
+
+

Wer ist Kasper?

+

Husky Casper ist einer von Dogfathers treuen Begleitern und längst Teil der Marke geworden. Zusammen mit Kater Simba gehört er zur „Familie" hinter der Kamera.

+

Die gemeinsame Geschichte von Dogfather und Casper gibt es sogar als Buch: „Hasidog & Casper".

+
+
+
+ +
+
+

Casper-Galerie

+
+
Casper Foto 1
+
Casper Foto 2
+
Casper Foto 3
+
Casper & Simba
+
+
+ TODO: Echte Casper-Fotos einbinden (HEIC → JPG/WebP konvertieren, dann in assets/img/ ablegen und hier bzw. in gallery.js verlinken). +
+ +
+
+
+ + + + + diff --git a/kontakt.html b/kontakt.html new file mode 100644 index 0000000..a2ebed0 --- /dev/null +++ b/kontakt.html @@ -0,0 +1,89 @@ + + + + + +Kontakt & Rechtliches — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Kontakt +

Kontakt & Rechtliches

+
+
+ +
+
+
+

Kontakt

+

Für Anfragen zu Kooperationen, Presse oder allgemeine Fragen:

+

kontakt@dogfather-universe.example

+

TODO: echte Kontakt-E-Mail eintragen (auch in assets/js/forms.jsCONTACT_EMAIL anpassen).

+
+
+

Social

+

Alle Kanäle findest du gesammelt auf der Links-Seite.

+
+
+
+ +
+
+

Impressum

+
+ WICHTIG — offene rechtliche Frage: Ein Impressum ist in Deutschland/EU für + geschäftlich genutzte Websites gesetzlich vorgeschrieben (§5 TMG bzw. Nachfolgeregelungen) + und verlangt Angaben wie Name, ladungsfähige Anschrift und Kontakt des Betreibers. Das steht + im Spannungsfeld zur Entscheidung „nur Persona-Name, keine echten bürgerlichen Daten + öffentlich". Mögliche Lösungswege (mit Dogi klären, bevor die Seite live geht): +
1) Impressum über die Spicy-Media-Firmendaten statt Privatperson, +
2) rechtliche Beratung einholen, welche Mindestangaben nötig sind, +
3) vorerst nur lokal/offline nutzen, bis das geklärt ist. +
+

Platzhalter-Struktur (mit echten Daten zu befüllen, sobald geklärt):

+

+ Angaben gemäß § 5 TMG
+ [Firmenname / Betreiber] — TODO
+ [Anschrift] — TODO
+ [Kontakt] — TODO
+ Vertreten durch: [Name] — TODO +

+
+
+ +
+
+

Datenschutz

+

Diese Website wird aktuell lokal/offline entwickelt und ist noch nicht öffentlich gehostet. Sobald ein Hosting-Anbieter feststeht und Formulare (z.B. Bewerbung) echte Daten versenden, wird hier eine vollständige Datenschutzerklärung ergänzt (Verarbeitungszwecke, Rechtsgrundlage, Speicherdauer, Empfänger, Rechte der Nutzer:innen).

+
+ TODO: Datenschutzerklärung final ausformulieren, sobald Hosting/Formular-Backend feststehen. +
+
+
+
+ + + + + diff --git a/links.html b/links.html new file mode 100644 index 0000000..a3b4656 --- /dev/null +++ b/links.html @@ -0,0 +1,95 @@ + + + + + +Alle Links — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ 🩵 Alle Links +

Alles an einem Ort

+

Ersatz für die Wonderlink-Seite — direkt Teil vom DOGFATHER UNIVERSE.

+
+
+ +
+ +
+ +
+
+

QR-Codes

+
+
+
QR: Scout-Bewerbung
assets/qr/scout-bewerbung-qr.png
+

Scout-Bewerbung

+
+
+
QR: DOGFATHER UNIVERSE
assets/qr/universe-qr.png
+

Diese Seite teilen

+
+
+
QR: Deine eigene Teilen-Seite
assets/qr/dogi-share-qr.png
+

Dogis persönlicher Teilen-Baustein

+
+
+
+ TODO: Vorhandenen QR-Code scout-qr-1785422377936.png nach assets/qr/scout-bewerbung-qr.png kopieren, sobald die Datei bereitsteht. Restliche Links (Spotify, Discord, Shop) mit echten URLs befüllen. +
+
+
+
+ + + + + diff --git a/manager.html b/manager.html new file mode 100644 index 0000000..2c59b0f --- /dev/null +++ b/manager.html @@ -0,0 +1,89 @@ + + + + + +Manager Dogfather — Spicy Media — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 3 — Manager Dogfather +

Manager Dogfather bei Spicy Media

+

Professionell. Fair. Auf Augenhöhe mit Scouts und Creator.

+ +
+
+ +
+
+
+

Spicy Media Agency

+

Neben seiner Arbeit als Streamer ist Dogfather Manager bei der Spicy Media Agency. Er unterstützt Scouts und Creator dabei, gemeinsam zu wachsen — professionell, aber mit demselben Herz wie im restlichen DOGFATHER UNIVERSE.

+

Scouts arbeiten in einem 50/50 Gewinn-Sharing-Modell mit Dogfather zusammen.

+
+ TODO / zu bestätigen: Genaue Kommissions-/Gewinnbeteiligungs-Details sollen so öffentlich stehen? Bitte mit Dogi final absegnen, bevor die Seite live geht. +
+
+
+ Spicy Media Logo
Foto folgt (assets/img/spicy-media-logo.jpg) +
+
+
+ +
+ +
+ +
+
+

Willst du dazugehören?

+

Als Creator, Scout oder Kooperationspartner — bewirb dich direkt.

+ Zur Bewerbung +
+
+
+ + + + + diff --git a/medien.html b/medien.html new file mode 100644 index 0000000..d469b36 --- /dev/null +++ b/medien.html @@ -0,0 +1,57 @@ + + + + + +Medien-Galerie — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Medien +

Galerie

+

Bilder aus allen drei Welten — filterbar nach Kategorie.

+
+
+ +
+
+ + +
+ TODO: Echte Fotos aus den vom User gelieferten Assets in assets/img/ ablegen und Pfade in assets/js/gallery.js (MEDIA-Array) eintragen. HEIC-Dateien (z.B. Casper-Fotos) vorher nach JPG/WebP konvertieren. +
+
+
+
+ + + + + + + + diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..1650c21 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,13 @@ +# DOGFATHER UNIVERSE — Netlify-Konfiguration +# Nur relevant, falls Netlify als Hosting gewählt wird (siehe DEPLOY.md). +# GitHub Pages / Cloudflare Pages brauchen diese Datei nicht. + +[build] + publish = "." + +[[redirects]] + from = "/*" + to = "/404.html" + status = 404 + +# Sicherheits-Header liegen in _headers (funktioniert auch auf Cloudflare Pages) diff --git a/postfach.html b/postfach.html new file mode 100644 index 0000000..089cff0 --- /dev/null +++ b/postfach.html @@ -0,0 +1,156 @@ + + + + + + +Postfach — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ 🔒 Intern +

Bewerbungs-Postfach

+

Nur für Dogfather & ausgewählte Personen mit Code.

+
+
+ +
+
+
+
+ + +
+ +
+
+ +
+ Noch nicht aktiv: Dieses Postfach ist erst nutzbar, sobald der + Cloudflare-Worker deployed und die Worker-URL in dieser Datei + (API_BASE_URL, ganz unten im Script) sowie in + assets/js/forms.js eingetragen ist. Anleitung: + cloudflare-worker/README.md. +
+
+
+ + +
+ + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..9a65a83 --- /dev/null +++ b/robots.txt @@ -0,0 +1,10 @@ +# DOGFATHER UNIVERSE — robots.txt +# TODO: sobald die Domain feststeht, die Sitemap-Zeile unten mit der +# echten Domain aktivieren (siehe sitemap.xml TODO). + +User-agent: * +Allow: / +Disallow: /postfach.html +Disallow: /cloudflare-worker/ + +Sitemap: https://REPLACE-WITH-YOUR-DOMAIN.tld/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..8671383 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,25 @@ + + + + https://REPLACE-WITH-YOUR-DOMAIN.tld/index.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/dogfather.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/streamer.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/streamplan.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/community.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/hasidog.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/kasper.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/aktionen.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/zeitreise.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/medien.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/videos.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/links.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/manager.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/werte.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/team-scouts.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/team-modis.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/vanvan.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/creator.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/stimmen.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/bewerben.html2026-07-30 + https://REPLACE-WITH-YOUR-DOMAIN.tld/kontakt.html2026-07-30 + diff --git a/stimmen.html b/stimmen.html new file mode 100644 index 0000000..6dc134f --- /dev/null +++ b/stimmen.html @@ -0,0 +1,61 @@ + + + + + +Stimmen über Dogfather — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 2 — HasiDog +

Stimmen über Dogfather

+

Was Community und Team sagen.

+
+
+ +
+
+
+

„Platzhalter-Zitat — echtes Testimonial folgt."

+

— Community-Mitglied (TODO: Name/Erlaubnis einholen)

+
+
+

„Platzhalter-Zitat — echtes Testimonial folgt."

+

— Team-Mitglied (TODO)

+
+
+

„Platzhalter-Zitat — echtes Testimonial folgt."

+

— Scout/Creator (TODO)

+
+
+
+ TODO: Echte Testimonials von Community, Team, Scouts und Creator sammeln (mit Einverständnis zur Veröffentlichung). Bis dahin bleiben hier Platzhalter stehen. +
+
+
+ + + + + diff --git a/streamer.html b/streamer.html new file mode 100644 index 0000000..3615461 --- /dev/null +++ b/streamer.html @@ -0,0 +1,93 @@ + + + + + +Dogfather als Streamer — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 1 — Dogfather +

Dogfather als Streamer

+

TikTok @dogfather0804 — Halligalli, Humor und ganz viel Community.

+ +
+
+ +
+
+

Content-Säulen

+
+
+ Kern +

Halligalli, Spaß & Humor

+

Content der Menschen zum Lachen bringt — der Kern von allem, was Dogfather macht.

+
+
+ Frech +

Eindeutig Zweideutig

+

Suggestiver, frecher Humor, der bewusst mit Grenzen spielt.

+
+
+ Chaos +

Hasencontent

+

Pranks, Überraschungen und lustig-verpeilte Vibes — Leute werden liebevoll „hops genommen".

+
+
+
+
+ +
+
+
+

Warum schauen Menschen zu?

+

Weil hier niemand nur zuschaut, sondern dazugehört. Dogfather ist loyal, witzig, konfliktscheu aber direkt wenn es drauf ankommt — und immer erreichbar für seine Community.

+
+ TODO (Masterplan Block D — Streamformate/Insider): Konkrete Streamformate, wiederkehrende Segmente, Running Gags und Insider-Begriffe werden hier ergänzt, sobald die entsprechenden Fragen aus dem 110-Fragen-Katalog mit Dogi geklärt sind. +
+
+
+ Stream-Szene / Highlight-Bild
Foto folgt (assets/img/streamer-highlight.jpg) +
+
+
+ +
+
+

Mehr sehen

+ +
+
+
+ + + + + diff --git a/streamplan.html b/streamplan.html new file mode 100644 index 0000000..6655a1b --- /dev/null +++ b/streamplan.html @@ -0,0 +1,59 @@ + + + + + +Streamplan & Livebereich — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 1 — Dogfather +

Streamplan & Livebereich

+

Wann ist Dogfather live?

+ +
+
+ +
+
+

Wochenplan

+
+

Montag

TODO: Uhrzeit/Format

+

Mittwoch

TODO: Uhrzeit/Format

+

Freitag

TODO: Uhrzeit/Format

+

Sonntag

TODO: Uhrzeit/Format

+
+
+ TODO: Echte Streamtage/-zeiten und Formate mit Dogi klären (Masterplan Block D) und hier eintragen. +
+
+
+
+ + + + + diff --git a/team-modis.html b/team-modis.html new file mode 100644 index 0000000..2f9c40e --- /dev/null +++ b/team-modis.html @@ -0,0 +1,83 @@ + + + + + +Modi-Team — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Manager Dogfather — Team +

Das Modi-Team

+

Das Rückgrat von Team Dogi — von VanVan bis Michi.

+
+
+ +
+
+
+ Hervorgehoben +
+
+

VanVan 🩵

+

Rechte Hand von Dogfather · Musik-Produzentin

+

VanVan ist nicht nur die rechte Hand von Dogfather, sondern auch seine beste Freundin. Sie bekommt täglich alle Neuigkeiten und Aufgaben und delegiert oder organisiert gemeinsam mit Diene.

+ VanVans exklusive Seite → +
+
+ VanVan Profilbild
Foto folgt +
+
+
+ +

Team-Hierarchie

+
+ +
+ Hinweis: Reihenfolge/Rollen basieren auf: VanVan (rechte Hand) → Diene (rechte Hand von VanVan) → Funny (Modi) → Miss (Modi + Cutterin) → Marina/Michi (Clip-Account-Kommentare). Änderungen einfach in assets/js/data-modis.js pflegen. +
+
+
+
+ + + + + + + diff --git a/team-scouts.html b/team-scouts.html new file mode 100644 index 0000000..e22cd30 --- /dev/null +++ b/team-scouts.html @@ -0,0 +1,67 @@ + + + + + +Scout-Team — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Manager Dogfather — Spicy Media +

Unser Scout-Team

+

Sie finden und begleiten neue Talente für Team Dogi — mit 50/50 Gewinn-Sharing.

+
+
+ +
+
+
+
+ TODO: Dogi liefert die vollständige, aktuelle Scout-Liste per Text nach — assets/js/data-scouts.js ist so gebaut, dass neue Scouts einfach als Objekt ergänzt werden können, ohne dass diese Seite verändert werden muss. +
+ +
+
+
+ + + + + + + diff --git a/vanvan.html b/vanvan.html new file mode 100644 index 0000000..7cc1c35 --- /dev/null +++ b/vanvan.html @@ -0,0 +1,71 @@ + + + + + +VanVan — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ 🩵 Exklusive Seite +

VanVan

+

Rechte Hand von Dogfather. Beste Freundin. Musik-Produzentin.

+
+
+ +
+
+
+ VanVan Profilbild
Foto folgt (assets/img/vanvan-portrait.jpg) +
+
+

Wer ist VanVan?

+

VanVan ist die rechte Hand von Dogfather — und seine beste Freundin. Sie bekommt täglich die Neuigkeiten, Aufgaben und Infos direkt von ihm und verteilt bzw. delegiert sie im Team, oder organisiert gemeinsam mit Diene.

+

Neben ihrer Rolle im Team ist VanVan auch Musik-Produzentin — ihre Songs erscheinen unter dem Namen Van-Van auf Spotify.

+
+
+
+ +
+
+

Was VanVan ausmacht

+
+

🩵 Vertrauen

Die engste Vertraute von Dogfather im Team.

+

🗂️ Organisation

Behält den Überblick und delegiert an das richtige Teammitglied.

+

🎵 Musik

Produziert eigene Songs als „Van-Van" auf Spotify.

+
+
+ TODO: Persönliches Zitat, Story und Social-Links von VanVan noch einholen (siehe Masterplan-Fragenkatalog, Block Team). +
+ +
+
+
+ + + + + diff --git a/videos.html b/videos.html new file mode 100644 index 0000000..5b00327 --- /dev/null +++ b/videos.html @@ -0,0 +1,63 @@ + + + + + +Video-Highlights — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Medien +

Video-Highlights

+

Die besten Momente von TikTok & Co.

+
+
+ +
+
+
+
+
Video folgt
TikTok-Embed / Link TODO
+

Highlight #1

+
+
+
Video folgt
TikTok-Embed / Link TODO
+

Highlight #2

+
+
+
Video folgt
TikTok-Embed / Link TODO
+

Highlight #3

+
+
+
+ TODO: Echte TikTok-Video-Links/Embeds ergänzen, sobald ausgewählt. Struktur ist bereit für TikTok-Embed-Code oder direkte Video-Dateien. +
+
+
+
+ + + + + diff --git a/werte.html b/werte.html new file mode 100644 index 0000000..b08ed10 --- /dev/null +++ b/werte.html @@ -0,0 +1,78 @@ + + + + + +Werte als Manager — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 3 — Manager Dogfather +

Werte als Manager

+

Professionell. Fair. Mit Herz — auch im Business.

+
+
+ +
+
+
+
+

🤝 Fairness

+

Zusammenarbeit auf Augenhöhe — z.B. das 50/50 Gewinn-Sharing-Modell mit Scouts.

+
+
+

📈 Wachstum ermöglichen

+

Scouts und Creator werden aktiv unterstützt, statt allein gelassen.

+
+
+

🩵 Loyalität

+

Dieselbe Loyalität, die Dogfather für seine Community lebt, gilt auch fürs Team bei Spicy Media.

+
+
+

🎯 Direktheit

+

Konfliktscheu, aber wenn nötig klar und direkt — für ehrliche, verlässliche Zusammenarbeit.

+
+
+

🧭 Professionalität

+

Trotz lockerem Ton: klare Prozesse, verlässliche Kommunikation, echtes Engagement.

+
+
+

🐾 Familie im Business

+

Team Dogi ist Familie — dieses Prinzip gilt auch im geschäftlichen Teil des Universums.

+
+
+
+ TODO: Weitere konkrete Grundsätze/Richtlinien aus dem Masterplan (Block Manager-Werte) ergänzen. +
+ +
+
+
+ + + + + diff --git a/zeitreise.html b/zeitreise.html new file mode 100644 index 0000000..b148380 --- /dev/null +++ b/zeitreise.html @@ -0,0 +1,81 @@ + + + + + +Zeitreise — DOGFATHER UNIVERSE + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Welt 1 — Dogfather +

Zeitreise

+

Die Geschichte von Dogfather & Team Dogi.

+
+
+ +
+
+
+
+
TODO: Datum
+

Start als Content Creator

+

Die ersten Schritte auf TikTok. TODO: genaues Datum & Story ergänzen.

+
+
+
TODO: Datum
+

HasiDog entsteht

+

Aus dem Spitznamen wird eine eigene Marke — inkl. Musikprojekt auf Spotify.

+
+
+
TODO: Datum
+

Start als Manager bei Spicy Media

+

Dogfather übernimmt die Manager-Rolle, erste Scouts und Creator kommen dazu.

+
+
+
TODO: Datum
+

Buch „Hasidog & Casper"

+

Die Geschichte von Dogfather und seinem Husky wird zum Buch.

+
+
+
TODO: Datum
+

Kooperation VanVan Teddys

+

Merchandise-Kooperation rund um VanVan startet.

+
+
+
2026
+

DOGFATHER UNIVERSE geht online

+

Die eigene Website vereint alle drei Welten erstmals an einem Ort.

+
+
+
+ TODO: Echte Meilensteine & Daten aus dem Masterplan-Fragenkatalog (Block Zeitreise) ergänzen — Struktur/Timeline-Komponente steht bereits. +
+
+
+
+ + + + +