Compare commits
5 commits
f378edab5d
...
062794c61a
| Author | SHA1 | Date | |
|---|---|---|---|
| 062794c61a | |||
| da1146b047 | |||
| b3bd34c76a | |||
| d5e408528b | |||
| 8561cffc80 |
7 changed files with 164 additions and 84 deletions
|
|
@ -169,6 +169,9 @@
|
|||
<div class="sidebar-item" data-page="events">
|
||||
<svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor.svg#calendar-dots"></use></svg> Events
|
||||
</div>
|
||||
<div class="sidebar-item" data-page="jobs">
|
||||
<svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor.svg#sparkle"></use></svg> Jobs
|
||||
</div>
|
||||
|
||||
<span class="sidebar-section-label">Soziales</span>
|
||||
<div class="sidebar-item" data-page="friends">
|
||||
|
|
@ -452,6 +455,10 @@
|
|||
<div class="page-body page-container"></div>
|
||||
</section>
|
||||
|
||||
<section class="page" id="page-jobs">
|
||||
<div class="page-body page-container"></div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- MOBILE BOTTOM NAVIGATION -->
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Router, State-Management, Navigation, Initialisierung.
|
||||
============================================================ */
|
||||
|
||||
const APP_VER = '554'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VER = '583'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VERSION = '1.2.1'; // ← semantische Version, wird bei make release gesetzt
|
||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||
|
||||
|
|
|
|||
|
|
@ -2388,7 +2388,11 @@ window.Page_admin = (() => {
|
|||
<div style="display:flex;gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;align-items:center">
|
||||
${['pending','reviewing','accepted','rejected','alle'].map(s => `
|
||||
<button class="btn btn-sm ${s===_statusFilter?'btn-primary':'btn-ghost'} adm-bew-filter" data-s="${s}">
|
||||
${s==='pending'?'⏳ Neu':s==='reviewing'?'🔍 In Prüfung':s==='accepted'?'✅ Angenommen':s==='rejected'?'❌ Abgelehnt':'Alle'}
|
||||
${s==='pending' ? `${UI.icon('clock')} Neu`
|
||||
: s==='reviewing' ? `${UI.icon('magnifying-glass')} In Prüfung`
|
||||
: s==='accepted' ? `${UI.icon('check-circle')} Angenommen`
|
||||
: s==='rejected' ? `${UI.icon('x')} Abgelehnt`
|
||||
: 'Alle'}
|
||||
</button>`).join('')}
|
||||
</div>
|
||||
<div id="adm-bew-list">${UI.skeleton(3)}</div>`;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,10 @@ window.Page_jobs = (() => {
|
|||
let _container = null;
|
||||
let _appState = null;
|
||||
|
||||
const _esc = s => UI.escape(s ?? '');
|
||||
const _ph = (name, size = 22) =>
|
||||
`<svg class="ph-icon" aria-hidden="true" style="width:${size}px;height:${size}px;flex-shrink:0;color:var(--c-primary)"><use href="/icons/phosphor.svg#${name}"></use></svg>`;
|
||||
|
||||
async function init(container, appState) {
|
||||
_container = container;
|
||||
_appState = appState;
|
||||
|
|
@ -44,11 +48,11 @@ window.Page_jobs = (() => {
|
|||
<div style="padding:var(--space-5)">
|
||||
<h2 style="font-size:var(--text-lg);font-weight:700;margin:0 0 var(--space-4);color:var(--c-primary)">Die Stelle</h2>
|
||||
<div style="display:grid;gap:var(--space-3)">
|
||||
${_infoRow('📍', 'Remote', '100 % flexibel — du arbeitest wann und wie du willst')}
|
||||
${_infoRow('📅', 'Umfang', '1–2 Posts pro Woche auf Instagram & TikTok')}
|
||||
${_infoRow('💶', 'Vergütung', '50 € / Monat — wächst mit der Community')}
|
||||
${_infoRow('🤖', 'Luna an deiner Seite', 'Unser KI-Assistent schreibt Captions, generiert Post-Ideen und Hashtags — du wählst aus und postest')}
|
||||
${_infoRow('⭐', 'Gründer-Status', 'Du wirst Teil der ersten 100 Gründer — für immer')}
|
||||
${_infoRow(_ph('map-pin'), 'Remote', '100 % flexibel — du arbeitest wann und wie du willst')}
|
||||
${_infoRow(_ph('calendar-dots'), 'Umfang', '1–2 Posts pro Woche auf Instagram & TikTok')}
|
||||
${_infoRow(_ph('tag'), 'Vergütung', '50 € / Monat — wächst mit der Community')}
|
||||
${_infoRow(_ph('robot'), 'Luna an deiner Seite', 'Unser KI-Assistent schreibt Captions, generiert Post-Ideen und Hashtags — du wählst aus und postest')}
|
||||
${_infoRow(_ph('star'), 'Gründer-Status', 'Du wirst Teil der ersten 100 Gründer — für immer')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -56,8 +60,9 @@ window.Page_jobs = (() => {
|
|||
<!-- Luna-Probezugang Teaser -->
|
||||
<div style="background:linear-gradient(135deg,var(--c-primary),#e8a857);border-radius:var(--radius-lg);
|
||||
padding:var(--space-5);margin-bottom:var(--space-4);color:#fff">
|
||||
<div style="font-size:var(--text-lg);font-weight:800;margin-bottom:var(--space-2)">
|
||||
🤖 Luna 14 Tage kostenlos testen
|
||||
<div style="font-size:var(--text-lg);font-weight:800;margin-bottom:var(--space-2);display:flex;align-items:center;gap:var(--space-2)">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:24px;height:24px"><use href="/icons/phosphor.svg#robot"></use></svg>
|
||||
Luna 14 Tage kostenlos testen
|
||||
</div>
|
||||
<p style="margin:0;opacity:.9;font-size:var(--text-sm)">
|
||||
Mit deiner Bewerbung schalten wir dir sofort den vollen Zugang zu Luna frei —
|
||||
|
|
@ -66,7 +71,8 @@ window.Page_jobs = (() => {
|
|||
</p>
|
||||
${trialStatus?.active ? `<div style="margin-top:var(--space-3);background:rgba(255,255,255,.2);
|
||||
border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-weight:700;font-size:var(--text-sm)">
|
||||
✅ Dein Probezugang läuft noch ${trialStatus.remaining_days} Tage</div>` : ''}
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:16px;height:16px;vertical-align:middle"><use href="/icons/phosphor.svg#check-circle"></use></svg>
|
||||
Dein Probezugang läuft noch ${trialStatus.remaining_days} Tage</div>` : ''}
|
||||
</div>
|
||||
|
||||
<!-- Wen wir suchen -->
|
||||
|
|
@ -97,7 +103,7 @@ window.Page_jobs = (() => {
|
|||
function _infoRow(icon, label, text) {
|
||||
return `
|
||||
<div style="display:flex;gap:var(--space-3);align-items:flex-start">
|
||||
<span style="font-size:20px;line-height:1.4">${icon}</span>
|
||||
<div style="margin-top:1px">${icon}</div>
|
||||
<div>
|
||||
<div style="font-weight:700;font-size:var(--text-sm)">${label}</div>
|
||||
<div style="color:var(--c-text-secondary);font-size:var(--text-sm)">${text}</div>
|
||||
|
|
@ -107,22 +113,24 @@ window.Page_jobs = (() => {
|
|||
|
||||
function _renderStatus(app) {
|
||||
const statusMap = {
|
||||
pending: { icon: '⏳', text: 'Deine Bewerbung ist eingegangen — wir melden uns bald!', color: 'var(--c-text-secondary)' },
|
||||
reviewing: { icon: '🔍', text: 'Wir schauen uns deine Bewerbung gerade genauer an.', color: '#0284c7' },
|
||||
accepted: { icon: '🎉', text: 'Herzlichen Glückwunsch — du bist dabei!', color: 'var(--c-success)' },
|
||||
rejected: { icon: '😔', text: 'Es hat diesmal leider nicht geklappt.', color: 'var(--c-danger)' },
|
||||
pending: { icon: 'clock', text: 'Deine Bewerbung ist eingegangen — wir melden uns bald!', color: 'var(--c-text-secondary)' },
|
||||
reviewing: { icon: 'magnifying-glass', text: 'Wir schauen uns deine Bewerbung gerade genauer an.', color: '#0284c7' },
|
||||
accepted: { icon: 'check-circle', text: 'Herzlichen Glückwunsch — du bist dabei!', color: 'var(--c-success)' },
|
||||
rejected: { icon: 'x', text: 'Es hat diesmal leider nicht geklappt.', color: 'var(--c-danger)' },
|
||||
};
|
||||
const s = statusMap[app.status] || statusMap.pending;
|
||||
return `
|
||||
<div class="card" style="padding:var(--space-5);text-align:center">
|
||||
<div style="font-size:40px;margin-bottom:var(--space-3)">${s.icon}</div>
|
||||
<div style="margin-bottom:var(--space-3)">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:48px;height:48px;color:${s.color}"><use href="/icons/phosphor.svg#${s.icon}"></use></svg>
|
||||
</div>
|
||||
<div style="font-weight:700;color:${s.color};font-size:var(--text-lg);margin-bottom:var(--space-2)">${s.text}</div>
|
||||
<div style="color:var(--c-text-muted);font-size:var(--text-xs)">
|
||||
Bewerbung eingereicht: ${app.created_at?.slice(0,10)}
|
||||
</div>
|
||||
${app.admin_note ? `<div style="margin-top:var(--space-3);background:var(--c-surface-2);
|
||||
border-radius:var(--radius-md);padding:var(--space-3);font-size:var(--text-sm);
|
||||
color:var(--c-text-secondary);text-align:left">${UI.esc(app.admin_note)}</div>` : ''}
|
||||
color:var(--c-text-secondary);text-align:left">${_esc(app.admin_note)}</div>` : ''}
|
||||
</div>`;
|
||||
}
|
||||
|
||||
|
|
@ -139,13 +147,13 @@ window.Page_jobs = (() => {
|
|||
<div class="form-group">
|
||||
<label class="form-label">Dein Name *</label>
|
||||
<input class="form-control" type="text" name="name"
|
||||
value="${u ? UI.esc(u.name) : ''}" placeholder="Vorname oder Nickname" required>
|
||||
value="${u ? _esc(u.name) : ''}" placeholder="Vorname oder Nickname" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label">E-Mail *</label>
|
||||
<input class="form-control" type="email" name="email"
|
||||
value="${u ? UI.esc(u.email || '') : ''}" placeholder="deine@email.de" required>
|
||||
value="${u ? _esc(u.email || '') : ''}" placeholder="deine@email.de" required>
|
||||
</div>
|
||||
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)">
|
||||
|
|
@ -201,8 +209,9 @@ window.Page_jobs = (() => {
|
|||
bekommst du sofort den 14-tägigen Luna-Probezugang.
|
||||
</div>` : ''}
|
||||
|
||||
<button type="submit" class="btn btn-primary w-full" style="margin-top:var(--space-2)">
|
||||
Bewerbung absenden + Luna freischalten 🚀
|
||||
<button type="submit" class="btn btn-primary w-full" style="margin-top:var(--space-2);display:flex;align-items:center;justify-content:center;gap:var(--space-2)">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:18px;height:18px"><use href="/icons/phosphor.svg#sparkle"></use></svg>
|
||||
Bewerbung absenden + Luna freischalten
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -93,13 +93,13 @@ window.Page_movies = (() => {
|
|||
<button class="movies-filter-btn${_filter === 'top' ? ' movies-filter-btn--active' : ''}" data-filter="top"><svg class="ph-icon" aria-hidden="true" style="width:14px;height:14px"><use href="/icons/phosphor.svg#star"></use></svg> Top</button>
|
||||
</div>
|
||||
<div class="movies-filter-row" style="margin-top:var(--space-2)">
|
||||
<button class="movies-type-btn${_typ === 'alle' ? ' movies-filter-btn--active' : ''}" data-typ="alle">Alle Typen</button>
|
||||
<button class="movies-type-btn${_typ === 'film' ? ' movies-filter-btn--active' : ''}" data-typ="film">🎬 Filme</button>
|
||||
<button class="movies-type-btn${_typ === 'serie' ? ' movies-filter-btn--active' : ''}" data-typ="serie">📺 Serien</button>
|
||||
<button class="movies-type-btn${_typ === 'doku' ? ' movies-filter-btn--active' : ''}" data-typ="doku">🎥 Dokus</button>
|
||||
<button class="movies-filter-btn movies-type-btn${_typ === 'alle' ? ' movies-filter-btn--active' : ''}" data-typ="alle">Alle</button>
|
||||
<button class="movies-filter-btn movies-type-btn${_typ === 'film' ? ' movies-filter-btn--active' : ''}" data-typ="film"><svg class="ph-icon" aria-hidden="true" style="width:15px;height:15px"><use href="/icons/phosphor.svg#film-slate"></use></svg> Filme</button>
|
||||
<button class="movies-filter-btn movies-type-btn${_typ === 'serie' ? ' movies-filter-btn--active' : ''}" data-typ="serie"><svg class="ph-icon" aria-hidden="true" style="width:15px;height:15px"><use href="/icons/phosphor.svg#list"></use></svg> Serien</button>
|
||||
<button class="movies-filter-btn movies-type-btn${_typ === 'doku' ? ' movies-filter-btn--active' : ''}" data-typ="doku"><svg class="ph-icon" aria-hidden="true" style="width:15px;height:15px"><use href="/icons/phosphor.svg#camera"></use></svg> Dokus</button>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-2)">
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:16px;height:16px;color:var(--c-text-muted)"><use href="/icons/phosphor.svg#sort-ascending"></use></svg>
|
||||
<svg class="ph-icon" aria-hidden="true" style="width:16px;height:16px;color:var(--c-text-muted)"><use href="/icons/phosphor.svg#list"></use></svg>
|
||||
<select id="movies-sort" class="form-control" style="flex:1;font-size:var(--text-sm);padding:var(--space-2) var(--space-3)">
|
||||
<option value="default" ${_sort==='default' ?'selected':''}>Empfohlen</option>
|
||||
<option value="bewertung" ${_sort==='bewertung' ?'selected':''}>Community-Bewertung</option>
|
||||
|
|
@ -182,7 +182,8 @@ window.Page_movies = (() => {
|
|||
? `<div class="movie-tag-stirbt"><svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor.svg#warning"></use></svg> Hund stirbt</div>`
|
||||
: `<div class="movie-tag-ueberlebt"><svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor.svg#check-circle"></use></svg> Hund überlebt</div>`;
|
||||
const stars = _starsHtml(film.bewertung_avg, film.id, film.user_rating, false);
|
||||
const typLabel = film.typ === 'serie' ? '📺 Serie' : film.typ === 'doku' ? '🎥 Doku' : '';
|
||||
const _ico = name => `<svg class="ph-icon" aria-hidden="true" style="width:12px;height:12px;vertical-align:middle"><use href="/icons/phosphor.svg#${name}"></use></svg>`;
|
||||
const typLabel = film.typ === 'serie' ? `${_ico('list')} Serie` : film.typ === 'doku' ? `${_ico('camera')} Doku` : '';
|
||||
const imdb = film.imdb_rating ? `<span style="font-size:var(--text-xs);color:var(--c-text-muted)">IMDb ${film.imdb_rating}</span>` : '';
|
||||
const streaming = film.streaming ? `<span style="font-size:var(--text-xs);color:var(--c-text-muted)">${_esc(film.streaming)}</span>` : '';
|
||||
|
||||
|
|
|
|||
|
|
@ -3,16 +3,16 @@
|
|||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Ban Yaro — Hunde-App für Besitzer, Züchter & Welpen-Käufer</title>
|
||||
<meta name="description" content="Ban Yaro: Die kostenlose All-in-One Hunde-App für Deutschland, Österreich und die Schweiz. Tagebuch, Impfpass, Wurfbörse, Stammbaum, Inzucht-Check, Giftköder-Alarm — DSGVO-konform, ohne App Store.">
|
||||
<meta name="keywords" content="Hunde App, Wurfbörse, Züchter, Welpen kaufen, Stammbaum Hund, Inzuchtkoeffizient, Hundezucht, Impfpass Hund, Giftköder Alarm, Gassi Community">
|
||||
<title>Ban Yaro — Die Hunde-App für Deutschland, Österreich & Schweiz</title>
|
||||
<meta name="description" content="Ban Yaro: Die kostenlose All-in-One Hunde-App für DACH. Tagebuch, Giftköder-Alarm, Training mit KI, Forum, Wurfbörse, Stammbaum, Inzucht-Check — DSGVO-konform, offline-fähig, ohne App Store.">
|
||||
<meta name="keywords" content="Hunde App, Hunde Community, Wurfbörse, Züchter, Welpen kaufen, Stammbaum Hund, Inzuchtkoeffizient, Hundezucht, Impfpass Hund, Giftköder Alarm, Gassi Community, Hundetraining App, Hunde Forum, Hunde KI, Hundefilm Datenbank, Welpen Marktplatz">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="https://banyaro.app/info">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Ban Yaro — Hunde-App für Besitzer, Züchter & Welpen-Käufer">
|
||||
<meta property="og:description" content="Tagebuch, Impfpass, Wurfbörse, Stammbaum, Inzucht-Koeffizient, Giftköder-Alarm, Gassi-Community — alles in einer DSGVO-konformen App ohne App Store.">
|
||||
<meta property="og:title" content="Ban Yaro — Die Hunde-App für Deutschland, Österreich & Schweiz">
|
||||
<meta property="og:description" content="Tagebuch, Giftköder-Alarm, KI-Training, Forum, Wurfbörse, Stammbaum, Inzucht-Check — alles in einer DSGVO-konformen App ohne App Store. Kostenlos.">
|
||||
<meta property="og:url" content="https://banyaro.app/info">
|
||||
<meta property="og:image" content="https://banyaro.app/icons/icon-512.png">
|
||||
<meta property="og:locale" content="de_DE">
|
||||
|
|
@ -20,8 +20,8 @@
|
|||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Ban Yaro — Hunde-App für Besitzer, Züchter & Welpen-Käufer">
|
||||
<meta name="twitter:description" content="Wurfbörse, Stammbaum, Inzucht-Koeffizient, Tierschutz-Check — und alles rund um deinen Hund. Kostenlos, DSGVO-konform.">
|
||||
<meta name="twitter:title" content="Ban Yaro — Die Hunde-App für DACH">
|
||||
<meta name="twitter:description" content="Giftköder-Alarm, KI-Training, Forum, Wurfbörse, Stammbaum, Inzucht-Check — kostenlos, DSGVO-konform, ohne App Store.">
|
||||
<meta name="twitter:image" content="https://banyaro.app/icons/icon-512.png">
|
||||
|
||||
<!-- Structured Data -->
|
||||
|
|
@ -50,42 +50,53 @@
|
|||
"url": "https://banyaro.app"
|
||||
},
|
||||
"featureList": [
|
||||
"Digitales Hunde-Tagebuch mit Fotos und GPS",
|
||||
"Digitales Hunde-Tagebuch mit Fotos, Videos und GPS",
|
||||
"Kalender-, Karten- und Medien-Ansicht im Tagebuch",
|
||||
"Digitaler Impfpass und Gesundheitsakte",
|
||||
"Pflege-System mit 43 rassenspezifischen Tipps in 10 Kategorien",
|
||||
"Giftköder-Alarm mit Push-Benachrichtigungen",
|
||||
"Zecken-Warnung regelbasiert (Saison + Temperatur)",
|
||||
"Giftköder-Alarm mit GPS und Push-Benachrichtigungen",
|
||||
"Zecken-Warnung regelbasiert (Saison und Temperatur)",
|
||||
"Wetter-Chip in der App (Open-Meteo, ohne API-Key)",
|
||||
"Gassi-Community und GPS-Routen",
|
||||
"Hundesitting-Vermittlung",
|
||||
"NFC-Halsband-Tags",
|
||||
"Gassi-Community und GPS-Routen aufzeichnen",
|
||||
"Täglicher Routenvorschlag (2, 4 oder 6 km via OpenRouteService)",
|
||||
"Hundesitting-Vermittlung (nur 8% Provision)",
|
||||
"NFC-Halsband-Tags mit öffentlichem Hunde-Profil",
|
||||
"Forum öffentlich lesbar, schreiben nach E-Mail-Verifikation",
|
||||
"1003 Hunderassen Wikipedia-grounded und KI-angereichert",
|
||||
"Community-Fotos im Rassen-Wiki mit Bildrechte-Bestätigung und Moderation",
|
||||
"Rassen-Quiz Passt diese Rasse zu mir?",
|
||||
"Verlorener Hund Alarm",
|
||||
"Forum für Hundebesitzer",
|
||||
"Offline-Modus via Service Worker",
|
||||
"Rassen-Wiki mit Community-Fotos und Moderation",
|
||||
"Verlorener Hund Alarm mit GPS-Position",
|
||||
"Offline-Modus via Service Worker (3 Stufen)",
|
||||
"Symptom-Checker (KI, kostenlos)",
|
||||
"Trainings-Tagebuch mit Einheiten-Logging (Wiederholungen, Erfolgsquote, Stimmung)",
|
||||
"Virtueller KI-Trainer mit täglichen Übungsempfehlungen und Fortschrittsprognose",
|
||||
"Wöchentlicher KI-Lober — jeden Montag 2-3 Sätze Lob für die Vorwoche",
|
||||
"Trainings-Gamification: Streaks, Abzeichen, Trainingskalender",
|
||||
"Kommandos & Fähigkeiten im Hundeprofil — praktisch für Hundesitter",
|
||||
"Wurfbörse — öffentliche Wurfankündigungen mit Filtersuche nach Rasse und Status",
|
||||
"104 Trainingsübungen in Datenbank mit Schwierigkeitsgraden",
|
||||
"Trainings-Logging: Wiederholungen, Erfolgsquote, Stimmung",
|
||||
"Virtueller KI-Trainer mit täglichen Übungsempfehlungen",
|
||||
"Wöchentlicher KI-Lober jeden Montag",
|
||||
"Trainings-Streaks und Trainingskalender",
|
||||
"Kommandos und Fähigkeiten im Hundeprofil",
|
||||
"Events-Kalender (Agility, Ausstellungen, lokale Veranstaltungen)",
|
||||
"Wurfbörse mit Filtersuche nach Rasse und Status",
|
||||
"Züchter-Profile mit verifizierten Gesundheitstests und Gentests",
|
||||
"Stammbaum-Visualisierung bis 4 Generationen",
|
||||
"Inzucht-Koeffizient nach Wright's Formel mit Ampel-Bewertung",
|
||||
"Probeverpaarung mit IK-Simulation und genetischer Risikoanalyse",
|
||||
"Tierschutz-Check automatisch bei jeder Verpaarung — nicht abschaltbar",
|
||||
"KI-Züchter-Assistenz: Wurfankündigungen, Genetik-Erklärung, Paarungsanalyse",
|
||||
"Datenexport als HTML und ODS — keine Datenfalle",
|
||||
"Personalisierte Tagesroute via OpenRouteService — täglich neue Gassirunde mit 2/4/6 km Wahl",
|
||||
"Übung des Tages — personalisiert aus dem persönlichen Trainingsfortschritt",
|
||||
"Dashboard-Startseite mit Hundebild-Hero, Statistik-Chips und Feature-Karten"
|
||||
"Tierschutz-Check automatisch bei jeder Verpaarung",
|
||||
"KI-Züchter-Assistenz: Wurfankündigungen, Genetik, Paarungsanalyse",
|
||||
"Datenexport als HTML und ODS",
|
||||
"Hunde-Filmdatenbank: 68 Filme, Serien und Dokumentationen sortier- und filterbar",
|
||||
"Filmdatenbank-Feature: Stirbt der Hund? — Taschentuch-Warnung",
|
||||
"Berühmte Hunde der Geschichte",
|
||||
"Hund des Monats Community-Abstimmung",
|
||||
"Push-Benachrichtigungen (VAPID, ohne Drittanbieter)",
|
||||
"Freundschaften und Direktnachrichten",
|
||||
"Social-Media-Manager Luna (KI-generierte Posts für Instagram und TikTok)",
|
||||
"Notizblock mit KI-Analyse-Funktion",
|
||||
"Erste-Hilfe-Ratgeber für häufige Notfälle",
|
||||
"Hunde-Knigge (Begegnungen, ÖPNV, Leinenpflicht, Haftpflicht)",
|
||||
"Admin-Panel mit Moderation, Outreach-Mailing und Statistiken"
|
||||
],
|
||||
"screenshot": "https://banyaro.app/icons/icon-512.png",
|
||||
"softwareVersion": "2.2",
|
||||
"datePublished": "2026-04-29",
|
||||
"softwareVersion": "1.2.1",
|
||||
"datePublished": "2026-05-01",
|
||||
"areaServed": ["DE", "AT", "CH"],
|
||||
"audience": {
|
||||
"@type": "Audience",
|
||||
|
|
@ -510,7 +521,7 @@
|
|||
</div>
|
||||
<div class="feature-card">
|
||||
<span class="feature-icon">💬</span>
|
||||
<div><h3>Forum</h3><p>Rassen-basierte Foren, KI-Zusammenfassungen langer Threads, Experten-Badge für Tierärzte und Trainer.</p><span class="feature-tag">Kostenlos</span></div>
|
||||
<div><h3>Forum</h3><p>Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung. Schreiben nach E-Mail-Verifikation — für Qualität statt Spam.</p><span class="feature-tag">Kostenlos</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -528,7 +539,7 @@
|
|||
</div>
|
||||
<div class="feature-card">
|
||||
<span class="feature-icon">🎬</span>
|
||||
<div><h3>Hundefilme</h3><p>Filmdatenbank mit der wichtigsten Frage: "Stirbt der Hund?" Nie wieder unvorbereitet in einen Film stolpern.</p><span class="feature-tag">Kostenlos</span></div>
|
||||
<div><h3>Hunde-Filmdatenbank</h3><p>68 Filme, Serien und Dokumentationen — sortierbar nach Jahr, IMDb-Bewertung oder Community-Rating. Mit der wichtigsten Frage: "Stirbt der Hund?" Nie wieder unvorbereitet stolpern.</p><span class="feature-tag">Kostenlos</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<span class="feature-icon">🩹</span>
|
||||
|
|
@ -604,13 +615,14 @@
|
|||
<section id="vergleich">
|
||||
<div class="container">
|
||||
<h2>Ban Yaro vs. Konkurrenz</h2>
|
||||
<p class="section-intro">Andere Apps decken einzelne Bereiche ab — Ban Yaro vereint alles in einer DSGVO-konformen Plattform ohne US-Datenweitergabe.</p>
|
||||
<p class="section-intro">Andere Apps decken einzelne Bereiche ab — Ban Yaro vereint alles in einer DSGVO-konformen Plattform. Kein anderer Anbieter kombiniert Community, Training, Zucht und KI auf Deutsch.</p>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Funktion</th>
|
||||
<th>Ban Yaro</th>
|
||||
<th>Hundeo (DE)</th>
|
||||
<th>Dogorama</th>
|
||||
<th>Tractive</th>
|
||||
<th>PetDesk</th>
|
||||
|
|
@ -621,12 +633,14 @@
|
|||
<td>Kostenlos nutzbar</td>
|
||||
<td class="check">✓ Ja</td>
|
||||
<td>Begrenzt</td>
|
||||
<td>Begrenzt</td>
|
||||
<td class="cross">✗ Abo</td>
|
||||
<td class="cross">✗ Nein</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DSGVO / EU-Hosting</td>
|
||||
<td class="check">✓ Ja</td>
|
||||
<td class="check">✓ DE</td>
|
||||
<td class="check">✓ DE</td>
|
||||
<td class="cross">✗ Nein</td>
|
||||
<td>Teilweise</td>
|
||||
<td class="cross">✗ USA</td>
|
||||
|
|
@ -637,6 +651,15 @@
|
|||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>KI-Hundetrainer</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Giftköder-Alarm</td>
|
||||
|
|
@ -644,54 +667,70 @@
|
|||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Digitaler Impfpass</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="check">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gassi-Community</td>
|
||||
<td>Forum & Community</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gassi-Treffen & Community</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Wurfbörse & Zucht-Management</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Stammbaum & Inzucht-Check</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hundesitting</td>
|
||||
<td class="check">✓ (8%)</td>
|
||||
<td class="check">✓ 8%</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NFC-Halsband-Tag</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Verlorener Hund Alarm</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="check">✓ (GPS)</td>
|
||||
<td class="check">✓ GPS</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rassen-Wiki (1003 Rassen, KI-angereichert)</td>
|
||||
<td>Rassen-Wiki (1003 Rassen, KI)</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Pflege-Tipps rassenspezifisch</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -700,13 +739,15 @@
|
|||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Täglicher Routenvorschlag (Gassirunde)</td>
|
||||
<td>Täglicher Routenvorschlag</td>
|
||||
<td class="check">✓</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
<td class="cross">✗</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -809,6 +850,20 @@
|
|||
<p>Karten von OpenStreetMap statt Google — keine Tracking-Cookies, kein API-Lock-in, günstiger für alle.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🔐</span>
|
||||
<div>
|
||||
<h3>Aktive Sicherheit</h3>
|
||||
<p>HSTS, Content-Security-Policy, Rate Limiting auf allen Endpunkten, Account-Lockout nach Fehlversuchen, E-Mail-Verifikation. Sicherheit by Default, nicht als Nachgedanke.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🤖</span>
|
||||
<div>
|
||||
<h3>KI Made in Europe</h3>
|
||||
<p>Alle KI-Funktionen laufen über Claude (Anthropic) — kein Training mit deinen Daten, kein Opt-out nötig, volle DSGVO-Konformität.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -824,12 +879,16 @@
|
|||
<footer>
|
||||
<div class="container">
|
||||
<p><strong style="color:white">Ban Yaro</strong> — Die deutschsprachige Hunde-Plattform</p>
|
||||
<p style="margin-top:0.5rem">banyaro.app · banyaro.de · DSGVO-konform · Hosting in Deutschland</p>
|
||||
<p style="margin-top:0.5rem">banyaro.app · DSGVO-konform · Hosting in Deutschland · Made with 🐾</p>
|
||||
<div class="footer-links">
|
||||
<a href="/">App öffnen</a>
|
||||
<a href="/info">Über Ban Yaro</a>
|
||||
<a href="/api/wiki/rassen">Hunde-Rassen</a>
|
||||
<a href="/api/events">Events</a>
|
||||
<a href="/wiki/rassen">Hunde-Rassen</a>
|
||||
<a href="/knigge">Hunde-Knigge</a>
|
||||
<a href="https://instagram.com/banyaro.app" rel="noopener" target="_blank">Instagram</a>
|
||||
<a href="https://tiktok.com/@banyaro.app" rel="noopener" target="_blank">TikTok</a>
|
||||
<a href="/#impressum">Impressum</a>
|
||||
<a href="/#datenschutz">Datenschutz</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Offline-Cache + Push Notifications + Tile-Cache
|
||||
============================================================ */
|
||||
|
||||
const CACHE_VERSION = 'by-v577';
|
||||
const CACHE_VERSION = 'by-v583';
|
||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue