Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405

Tagebuch:
- Day-One-Listenansicht: Wochentag + Tageszahl + Meta-Zeile (Zeit/Ort/Wetter)
- 4 Ansichten: Liste, Medien-Mosaik, Kalender (mit Sprungbuttons), Karte (GPS-Marker)
- Detail-Ansicht inline im Content-Bereich (kein Fullscreen-Overlay mehr)
- Hero-Bild vollständig sichtbar (object-fit:contain), Lightbox mit Safe-Area
- 2-Spalten-Layout Desktop: Text + Leaflet-Karte + POI-Liste
- EXIF-GPS-Extraktion bei Foto-Upload, historisches Wetter via Archive-API
- NoteStation-Import: Fotos in diary_media (80 Einträge migriert, 94 Medien)
- Stats-Endpoints: /diary/stats, /diary/calendar, /diary/locations

Notiz-Feature:
- Generische notes-Tabelle (parent_type + parent_id + meta_json)
- 📝-Button in 8 Bereichen, Notizblock-Seite mit KI-Analyse
- KI-Toggle in Einstellungen, notes_ki_enabled in User-Profil

Icons & Design:
- fill:currentColor Fix für welcome/onboarding/friends.js
- --c-icon Variable, --c-text-muted Dark Mode aufgehellt
- 15+ neue Phosphor-Icons aus lokaler Kopie
- CSS Network-First im SW, Cache-Control-Middleware

Infrastruktur:
- Wiki-Anreicherungs-Scheduler-Jobs entfernt (abgeschlossen)
- auth.py: notes_ki_enabled + is_social_media im User-Response
This commit is contained in:
rene 2026-04-25 20:44:46 +02:00
parent 95f91fdc00
commit 553e9e7854
35 changed files with 4558 additions and 370 deletions

View file

@ -0,0 +1,410 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Banyaro für Hundeschulen</title>
<style>
@page {
size: A4;
margin: 0;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: #1a2332;
background: white;
line-height: 1.5;
}
.page {
width: 210mm;
min-height: 297mm;
padding: 18mm 16mm 14mm 16mm;
background: white;
position: relative;
}
/* HEADER — Hundeschul-Variante: warmer Akzent (orange-rot) statt klinisches Grün */
.header {
border-bottom: 3px solid #c25b2e;
padding-bottom: 10mm;
margin-bottom: 8mm;
display: flex;
justify-content: space-between;
align-items: flex-end;
}
.brand {
display: flex;
flex-direction: column;
}
.brand-name {
font-size: 32pt;
font-weight: 700;
color: #c25b2e;
letter-spacing: -0.5px;
line-height: 1;
}
.brand-tagline {
font-size: 11pt;
color: #5a6470;
margin-top: 4px;
font-weight: 400;
}
.header-right {
text-align: right;
}
.target-badge {
display: inline-block;
background: #c25b2e;
color: white;
padding: 5px 14px;
font-size: 10pt;
font-weight: 600;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.url {
font-size: 11pt;
color: #c25b2e;
font-weight: 600;
margin-top: 6px;
}
/* HEADLINE */
.headline {
font-size: 18pt;
font-weight: 700;
color: #1a2332;
margin-bottom: 4mm;
line-height: 1.25;
}
.intro {
font-size: 10.5pt;
color: #3a4451;
margin-bottom: 7mm;
line-height: 1.55;
}
/* MAIN GRID */
.main-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 7mm;
margin-bottom: 7mm;
}
.section {
background: #faf3ee;
border-left: 3px solid #c25b2e;
padding: 5mm;
}
.section-title {
font-size: 11pt;
font-weight: 700;
color: #c25b2e;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 3mm;
}
.section-list {
list-style: none;
font-size: 9.5pt;
color: #1a2332;
}
.section-list li {
padding: 2px 0 2px 14px;
position: relative;
line-height: 1.5;
}
.section-list li::before {
content: "▸";
position: absolute;
left: 0;
color: #c25b2e;
font-weight: 700;
}
/* FEATURES */
.features {
margin-bottom: 7mm;
}
.features-title {
font-size: 12pt;
font-weight: 700;
color: #1a2332;
margin-bottom: 4mm;
padding-bottom: 2mm;
border-bottom: 1px solid #e5d7cb;
}
.feature-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4mm;
}
.feature {
font-size: 9.5pt;
}
.feature-name {
font-weight: 700;
color: #c25b2e;
margin-bottom: 2px;
}
.feature-desc {
color: #3a4451;
line-height: 1.4;
}
/* PARTNERSCHAFT */
.partner {
background: linear-gradient(135deg, #c25b2e 0%, #d97a4f 100%);
color: white;
padding: 6mm;
margin-bottom: 6mm;
display: grid;
grid-template-columns: 1fr 38mm;
gap: 6mm;
align-items: center;
}
.partner-content {
color: white;
}
.partner-title {
font-size: 13pt;
font-weight: 700;
margin-bottom: 3mm;
letter-spacing: 0.3px;
}
.partner-list {
list-style: none;
font-size: 9.5pt;
line-height: 1.7;
}
.partner-list li {
padding-left: 16px;
position: relative;
}
.partner-list li::before {
content: "✓";
position: absolute;
left: 0;
font-weight: 700;
color: #fce4d3;
}
.qr-box {
background: white;
padding: 4mm;
text-align: center;
color: #1a2332;
}
.qr-placeholder {
width: 28mm;
height: 28mm;
background:
repeating-linear-gradient(0deg, #1a2332 0, #1a2332 2mm, white 2mm, white 3mm),
repeating-linear-gradient(90deg, #1a2332 0, #1a2332 2mm, white 2mm, white 3mm);
background-blend-mode: multiply;
margin: 0 auto 2mm auto;
border: 1px solid #1a2332;
display: flex;
align-items: center;
justify-content: center;
font-size: 7pt;
color: #5a6470;
text-align: center;
line-height: 1.2;
}
.qr-label {
font-size: 8pt;
font-weight: 600;
color: #c25b2e;
}
/* CTA */
.cta {
border: 2px solid #c25b2e;
padding: 5mm 6mm;
margin-bottom: 5mm;
}
.cta-title {
font-size: 11pt;
font-weight: 700;
color: #c25b2e;
margin-bottom: 2mm;
}
.cta-text {
font-size: 10pt;
color: #1a2332;
line-height: 1.55;
}
.cta-text strong {
color: #c25b2e;
}
/* FOOTER */
.footer {
border-top: 1px solid #e5d7cb;
padding-top: 4mm;
display: flex;
justify-content: space-between;
font-size: 8.5pt;
color: #5a6470;
}
.footer-contact strong {
color: #1a2332;
}
</style>
</head>
<body>
<div class="page">
<!-- HEADER -->
<div class="header">
<div class="brand">
<div class="brand-name">Banyaro</div>
<div class="brand-tagline">Die App, die Ihre Trainingsstunden verlängert</div>
</div>
<div class="header-right">
<div class="target-badge">Für Hundeschulen &amp; Trainer</div>
<div class="url">banyaro.app</div>
</div>
</div>
<!-- HEADLINE -->
<div class="headline">Damit das, was Sie in der Stunde aufbauen, zu Hause nicht verloren geht.</div>
<div class="intro">
Die größte Hürde im Hundetraining ist nicht der Hund — es ist die Lücke zwischen den Stunden.
Banyaro gibt Ihren Kunden eine strukturierte Trainings-Begleitung an die Hand: Übungsbibliothek,
Trainingspläne, Tagebuch zum Festhalten von Fortschritten und ein Wiki mit fundiertem Wissen.
Das macht Ihre Arbeit nachhaltiger — und Ihre Kunden zufriedener.
</div>
<!-- ZIELGRUPPE & NUTZEN -->
<div class="main-grid">
<div class="section">
<div class="section-title">Zielgruppe</div>
<ul class="section-list">
<li>Welpen- und Junghundebesitzer</li>
<li>Ersthundehalter mit hohem Lernbedarf</li>
<li>Engagierte Halter ab ca. 30 Jahren</li>
<li>Wiedereinsteiger nach längerer Pause</li>
<li>Sportlich oder thematisch ambitionierte Teams</li>
</ul>
</div>
<div class="section">
<div class="section-title">Nutzen für Ihre Schule</div>
<ul class="section-list">
<li>Kunden trainieren strukturierter zwischen den Stunden</li>
<li>Sichtbare Fortschritte = höhere Kundenbindung</li>
<li>Weniger „Was war das nochmal?“-Rückfragen</li>
<li>Eigenes Profil = Sichtbarkeit für Neukunden</li>
<li>Kostenfreier Mehrwert, den Sie weitergeben können</li>
</ul>
</div>
</div>
<!-- INHALTE -->
<div class="features">
<div class="features-title">Was Banyaro bietet</div>
<div class="feature-grid">
<div class="feature">
<div class="feature-name">Übungsbibliothek</div>
<div class="feature-desc">Strukturierte Anleitungen mit Schritten und Hilfestellungen</div>
</div>
<div class="feature">
<div class="feature-name">Trainingspläne</div>
<div class="feature-desc">Welpe, Grunderziehung, Leinenführung, Rückruf u.&nbsp;v.&nbsp;m.</div>
</div>
<div class="feature">
<div class="feature-name">Trainings-Tagebuch</div>
<div class="feature-desc">Halter dokumentieren Fortschritt &amp; Stimmung</div>
</div>
<div class="feature">
<div class="feature-name">Rassen-Wiki</div>
<div class="feature-desc">Über 900 Rassen mit Charakter- &amp; Erziehungs-Profilen</div>
</div>
<div class="feature">
<div class="feature-name">Erste Hilfe</div>
<div class="feature-desc">Notfall-Anleitungen — wichtig für Outdoor-Training</div>
</div>
<div class="feature">
<div class="feature-name">Gassi &amp; Treffen</div>
<div class="feature-desc">Routen, Treffpunkte, hundefreundliche Orte</div>
</div>
</div>
</div>
<!-- PARTNERSCHAFT -->
<div class="partner">
<div class="partner-content">
<div class="partner-title">Werden Sie Banyaro-Partnerschule</div>
<ul class="partner-list">
<li>Eigenes Schul-Profil in der App — auf der Karte verlinkt</li>
<li>QR-Code-Aufsteller für Theorieraum &amp; Anmeldung (kostenfrei)</li>
<li>Empfehlung an Ihre Kunden über unseren Halter-Newsletter</li>
<li>Affiliate-Beteiligung sobald die App monetarisiert wird</li>
</ul>
</div>
<div class="qr-box">
<div class="qr-placeholder">[QR-Code<br>banyaro.app]</div>
<div class="qr-label">Direkt ausprobieren</div>
</div>
</div>
<!-- CTA -->
<div class="cta">
<div class="cta-title">In 5 Minuten ausprobieren</div>
<div class="cta-text">
Banyaro ist eine Web-App — <strong>keine Installation aus dem App-Store nötig.</strong>
Öffnen Sie einfach <strong>banyaro.app</strong> im Browser, legen Sie einen Testaccount an
und schauen Sie sich besonders die Übungsbibliothek und Trainingspläne aus Sicht Ihrer Kunden an.
Bei Interesse an einer Partnerschaft genügt eine kurze E-Mail — ich melde mich persönlich zurück.
</div>
</div>
<!-- FOOTER -->
<div class="footer">
<div class="footer-contact">
<strong>René [Nachname]</strong> &nbsp;·&nbsp; Entwickler Banyaro
</div>
<div class="footer-contact">
<strong>kontakt@banyaro.app</strong> &nbsp;·&nbsp; banyaro.app
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,407 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Banyaro für Tierärzte</title>
<style>
@page {
size: A4;
margin: 0;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: #1a2332;
background: white;
line-height: 1.5;
}
.page {
width: 210mm;
min-height: 297mm;
padding: 18mm 16mm 14mm 16mm;
background: white;
position: relative;
}
/* HEADER */
.header {
border-bottom: 3px solid #2d5f3f;
padding-bottom: 10mm;
margin-bottom: 8mm;
display: flex;
justify-content: space-between;
align-items: flex-end;
}
.brand {
display: flex;
flex-direction: column;
}
.brand-name {
font-size: 32pt;
font-weight: 700;
color: #2d5f3f;
letter-spacing: -0.5px;
line-height: 1;
}
.brand-tagline {
font-size: 11pt;
color: #5a6470;
margin-top: 4px;
font-weight: 400;
}
.header-right {
text-align: right;
}
.target-badge {
display: inline-block;
background: #2d5f3f;
color: white;
padding: 5px 14px;
font-size: 10pt;
font-weight: 600;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.url {
font-size: 11pt;
color: #2d5f3f;
font-weight: 600;
margin-top: 6px;
}
/* HEADLINE */
.headline {
font-size: 18pt;
font-weight: 700;
color: #1a2332;
margin-bottom: 4mm;
line-height: 1.25;
}
.intro {
font-size: 10.5pt;
color: #3a4451;
margin-bottom: 7mm;
line-height: 1.55;
}
/* MAIN GRID */
.main-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 7mm;
margin-bottom: 7mm;
}
.section {
background: #f5f7f4;
border-left: 3px solid #2d5f3f;
padding: 5mm 5mm 5mm 5mm;
}
.section-title {
font-size: 11pt;
font-weight: 700;
color: #2d5f3f;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 3mm;
}
.section-list {
list-style: none;
font-size: 9.5pt;
color: #1a2332;
}
.section-list li {
padding: 2px 0 2px 14px;
position: relative;
line-height: 1.5;
}
.section-list li::before {
content: "▸";
position: absolute;
left: 0;
color: #2d5f3f;
font-weight: 700;
}
/* FEATURES */
.features {
margin-bottom: 7mm;
}
.features-title {
font-size: 12pt;
font-weight: 700;
color: #1a2332;
margin-bottom: 4mm;
padding-bottom: 2mm;
border-bottom: 1px solid #d4dbd4;
}
.feature-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4mm;
}
.feature {
font-size: 9.5pt;
}
.feature-name {
font-weight: 700;
color: #2d5f3f;
margin-bottom: 2px;
}
.feature-desc {
color: #3a4451;
line-height: 1.4;
}
/* PARTNERSCHAFT */
.partner {
background: linear-gradient(135deg, #2d5f3f 0%, #3a7752 100%);
color: white;
padding: 6mm;
margin-bottom: 6mm;
display: grid;
grid-template-columns: 1fr 38mm;
gap: 6mm;
align-items: center;
}
.partner-content {
color: white;
}
.partner-title {
font-size: 13pt;
font-weight: 700;
margin-bottom: 3mm;
letter-spacing: 0.3px;
}
.partner-list {
list-style: none;
font-size: 9.5pt;
line-height: 1.7;
}
.partner-list li {
padding-left: 16px;
position: relative;
}
.partner-list li::before {
content: "✓";
position: absolute;
left: 0;
font-weight: 700;
color: #c8e6c9;
}
.qr-box {
background: white;
padding: 4mm;
text-align: center;
color: #1a2332;
}
.qr-placeholder {
width: 28mm;
height: 28mm;
background:
repeating-linear-gradient(0deg, #1a2332 0, #1a2332 2mm, white 2mm, white 3mm),
repeating-linear-gradient(90deg, #1a2332 0, #1a2332 2mm, white 2mm, white 3mm);
background-blend-mode: multiply;
margin: 0 auto 2mm auto;
border: 1px solid #1a2332;
display: flex;
align-items: center;
justify-content: center;
font-size: 7pt;
color: #5a6470;
text-align: center;
line-height: 1.2;
}
.qr-label {
font-size: 8pt;
font-weight: 600;
color: #2d5f3f;
}
/* CTA */
.cta {
border: 2px solid #2d5f3f;
padding: 5mm 6mm;
margin-bottom: 5mm;
}
.cta-title {
font-size: 11pt;
font-weight: 700;
color: #2d5f3f;
margin-bottom: 2mm;
}
.cta-text {
font-size: 10pt;
color: #1a2332;
line-height: 1.55;
}
.cta-text strong {
color: #2d5f3f;
}
/* FOOTER */
.footer {
border-top: 1px solid #d4dbd4;
padding-top: 4mm;
display: flex;
justify-content: space-between;
font-size: 8.5pt;
color: #5a6470;
}
.footer-contact strong {
color: #1a2332;
}
</style>
</head>
<body>
<div class="page">
<!-- HEADER -->
<div class="header">
<div class="brand">
<div class="brand-name">Banyaro</div>
<div class="brand-tagline">Die App für ein gesundes Hundeleben</div>
</div>
<div class="header-right">
<div class="target-badge">Für Tierärztinnen &amp; Tierärzte</div>
<div class="url">banyaro.app</div>
</div>
</div>
<!-- HEADLINE -->
<div class="headline">Eine digitale Gesundheitsakte, die Ihre Patientenbesitzer wirklich nutzen.</div>
<div class="intro">
Banyaro unterstützt Hundehalter dabei, Symptome, Medikationen, Impftermine und Gewichtsverläufe konsequent zu dokumentieren — und versorgt sie zusätzlich mit fundiertem Wissen zu Erster Hilfe, Giftködern, Rassen und Ernährung. Für Sie als Tierarzt bedeutet das: besser informierte Halter, genauere Anamnesen, weniger Rückfragen.
</div>
<!-- ZIELGRUPPE & NUTZEN -->
<div class="main-grid">
<div class="section">
<div class="section-title">Zielgruppe</div>
<ul class="section-list">
<li>Engagierte Hundehalter ab ca. 30 Jahren</li>
<li>Familien mit Ersthund</li>
<li>Halter chronisch oder mehrfach erkrankter Tiere</li>
<li>Sicherheitsbewusste Gassigeher (Giftköder-Karte)</li>
<li>Züchter &amp; Mehrhundehaushalte</li>
</ul>
</div>
<div class="section">
<div class="section-title">Nutzen für Ihre Praxis</div>
<ul class="section-list">
<li>Strukturiertere Anamnesen durch geführte Halter</li>
<li>Vollständige Impf- und Medikationshistorie</li>
<li>Frühere Vorstellung dank Symptom-Tracking</li>
<li>Entlastung bei Standardfragen (Erste Hilfe, Gift)</li>
<li>Mehrwert für Ihre Klienten — kostenlos</li>
</ul>
</div>
</div>
<!-- INHALTE -->
<div class="features">
<div class="features-title">Was Banyaro bietet</div>
<div class="feature-grid">
<div class="feature">
<div class="feature-name">Gesundheitsakte</div>
<div class="feature-desc">Impfungen, Medikamente, Befunde, Gewicht — exportierbar</div>
</div>
<div class="feature">
<div class="feature-name">Erste-Hilfe-Bereich</div>
<div class="feature-desc">11 Notfall-Anleitungen, fachlich geprüft</div>
</div>
<div class="feature">
<div class="feature-name">Giftköder-Karte</div>
<div class="feature-desc">Community-gepflegte Warnkarte mit Echtzeit-Meldungen</div>
</div>
<div class="feature">
<div class="feature-name">Rassen-Wiki</div>
<div class="feature-desc">Über 900 Rassen mit Gesundheits-Profilen</div>
</div>
<div class="feature">
<div class="feature-name">Trainingsbereich</div>
<div class="feature-desc">Übungsbibliothek &amp; strukturierte Trainingspläne</div>
</div>
<div class="feature">
<div class="feature-name">Gassi-Funktionen</div>
<div class="feature-desc">Routen, Treffpunkte, hundefreundliche Orte</div>
</div>
</div>
</div>
<!-- PARTNERSCHAFT -->
<div class="partner">
<div class="partner-content">
<div class="partner-title">Werden Sie Banyaro-Partnerpraxis</div>
<ul class="partner-list">
<li>Eigenes Praxisprofil in der App — verlinkt aus der Karte</li>
<li>QR-Code-Aufsteller fürs Wartezimmer (kostenfrei zugesendet)</li>
<li>Erwähnung in unserem Halter-Newsletter als Partnerpraxis</li>
<li>Affiliate-Beteiligung sobald die App monetarisiert wird</li>
</ul>
</div>
<div class="qr-box">
<div class="qr-placeholder">[QR-Code<br>banyaro.app]</div>
<div class="qr-label">Direkt ausprobieren</div>
</div>
</div>
<!-- CTA -->
<div class="cta">
<div class="cta-title">In 5 Minuten ausprobieren</div>
<div class="cta-text">
Banyaro ist eine Web-App — <strong>keine Installation aus dem App-Store nötig.</strong>
Einfach im Browser <strong>banyaro.app</strong> öffnen, einen Testaccount anlegen und die Funktionen aus
Sicht Ihrer Patientenbesitzer erkunden. Bei Interesse an einer Partnerschaft genügt eine kurze E-Mail —
ich melde mich persönlich zurück.
</div>
</div>
<!-- FOOTER -->
<div class="footer">
<div class="footer-contact">
<strong>René [Nachname]</strong> &nbsp;·&nbsp; Entwickler Banyaro
</div>
<div class="footer-contact">
<strong>kontakt@banyaro.app</strong> &nbsp;·&nbsp; banyaro.app
</div>
</div>
</div>
</body>
</html>