Session 2026-04-21: SEO, Wiki-Anreicherung, Training, Lober
SEO & Crawler:
- robots.txt, llms.txt, sitemap.xml (508 Seiten bei Google)
- SSR-Seiten: /info, /wiki/rassen, /wiki/rasse/{slug}, /knigge
- Open Graph, JSON-LD, Breadcrumbs in index.html
Navigation:
- Training unter "Mein Hund", Wissen collapsible
- Welcome-Seite und Landing-Page auf 5-Gruppen-Struktur
Wiki:
- KI-Anreicherung (Claude API): beschreibung, vorkommen_de, Steckbrief
- "So einen hab ich" / Züchter-Verzeichnis
- Scheduler: 50 Rassen beim Start, 20/Nacht
Training:
- Session-Logging (Erfolgsquote, Stimmung, Zufriedenheit)
- Virtueller KI-Trainer (6h-Cache)
- Trainingskalender (Habit-Tracker)
- Top-Training → automatischer Tagebucheintrag
- Gamification ohne Druck: Badges, Streak, Stats
Fortschritts-Lober:
- Jeden Montag 09:00: Claude schreibt Lob-Text pro Hund
- Push + Karte im Tagebuch
Monitoring:
- 4× täglich Status-Mail mit Scheduler-Status + Wiki-Fortschritt
This commit is contained in:
parent
65d1cf6c7f
commit
180de32e57
22 changed files with 4351 additions and 189 deletions
|
|
@ -3,7 +3,7 @@
|
|||
Router, State-Management, Navigation, Initialisierung.
|
||||
============================================================ */
|
||||
|
||||
const APP_VER = '262'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
const APP_VER = '267'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||
|
||||
const App = (() => {
|
||||
|
||||
|
|
@ -103,6 +103,7 @@ const App = (() => {
|
|||
|
||||
state.page = pageId;
|
||||
UI.scrollTop();
|
||||
_expandWissenIfActive(pageId);
|
||||
|
||||
// Seiten-Modul lazy laden (einmalig)
|
||||
_loadPage(pageId, params);
|
||||
|
|
@ -309,6 +310,12 @@ const App = (() => {
|
|||
return;
|
||||
}
|
||||
|
||||
// Wissen-Toggle aufklappen/zuklappen
|
||||
if (e.target.closest('#wissen-toggle')) {
|
||||
_toggleWissen();
|
||||
return;
|
||||
}
|
||||
|
||||
// Sidebar-Item auf Mobile → schließen nach Navigation
|
||||
if (e.target.closest('#sidebar .sidebar-item')) {
|
||||
_closeSidebar();
|
||||
|
|
@ -346,6 +353,22 @@ const App = (() => {
|
|||
document.getElementById('sidebar-backdrop')?.classList.remove('visible');
|
||||
}
|
||||
|
||||
const _WISSEN_PAGES = new Set(['wiki', 'knigge', 'movies', 'erste-hilfe']);
|
||||
|
||||
function _toggleWissen(force) {
|
||||
const toggle = document.getElementById('wissen-toggle');
|
||||
const body = document.getElementById('wissen-body');
|
||||
if (!toggle || !body) return;
|
||||
const open = force !== undefined ? force : toggle.getAttribute('aria-expanded') !== 'true';
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
body.classList.toggle('open', open);
|
||||
try { localStorage.setItem('by_wissen_open', open ? '1' : '0'); } catch (_) {}
|
||||
}
|
||||
|
||||
function _expandWissenIfActive(page) {
|
||||
if (_WISSEN_PAGES.has(page)) _toggleWissen(true);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// SCHNELL-HINZUFÜGEN (+ Button)
|
||||
// ----------------------------------------------------------
|
||||
|
|
@ -744,6 +767,12 @@ const App = (() => {
|
|||
}
|
||||
|
||||
_bindNavigation();
|
||||
|
||||
// Wissen-Sektion: gespeicherten Zustand wiederherstellen
|
||||
try {
|
||||
if (localStorage.getItem('by_wissen_open') === '1') _toggleWissen(true);
|
||||
} catch (_) {}
|
||||
|
||||
await _checkAuth();
|
||||
|
||||
// Einladungslink /teilen/{token} → direkt annehmen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue