feat: replace Web Push with ntfy for medication reminders

Single notification path via ntfy HTTP publish for reliable Android delivery;
remove VAPID, push subscriptions, and SW push handlers. PWA settings show
topic subscribe link; humor texts and deep-link actions unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Frank Schwenk
2026-07-06 10:42:58 +02:00
parent 24ac7f2f48
commit 1cada42370
17 changed files with 251 additions and 323 deletions
+95
View File
@@ -0,0 +1,95 @@
# SOUL.md — TakeYourMeds
Persönliche Medikamenten-PWA — nicht der Chat-Mood (siehe `MOOD.md`).
---
## Agent Quick Start
| | |
|---|---|
| **Was** | Single-User PWA: Med-Erinnerungen, Einnahme-Log, Streak/Heatmap, sarkastischer Humor |
| **Domain** | [medis.schwenk.online](https://medis.schwenk.online) |
| **Stack** | FastAPI + SQLite + Vanilla JS PWA, ntfy, APScheduler |
| **Deploy** | Docker Compose auf `boka``/home/frank/medis.schwenk.online` (Fränky deployt) |
| **Secrets** | `.env` only — PIN, JWT, NTFY_TOKEN, OpenRouter |
| **Tests** | Pragmatisch — keine Pflicht-Suite; manuell ntfy + PWA prüfen |
| **Commit** | Nur auf explizite Anweisung |
---
## Product Name
**TakeYourMeds** (intern: medis)
## One-Liner
Persönliche Medikamenten-PWA mit dezenten Erinnerungen, Einnahme-Logging und sarkastischem Humor — für ADHS-realistische Routinen.
## Vision
Medikamente nicht vergessen, ohne Schuld-Trip oder Alarm-Hölle. Die App erinnert dezent, loggt Einnahmen, zeigt Fortschritt (Streak, Heatmap) und liefert kleine Dopamin-Hits — weil ADHS-Gehirne Belohnung brauchen, nicht noch eine To-do-Liste.
## Audience
**Fränky** — Single-User, persönliches Gerät (Android PWA + Desktop). Erwartet: zuverlässige Reminder, schnelle „genommen"-Aktion, ehrlicher Ton, kein Corporate-Bullshit.
## Tone & Wording
Wie in `messages.yaml` — direkt, sarkastisch, ADHS-aware, liebevoll unter der Schicht:
- **Voice:** Du, trocken, selbstironisch, kein Motivations-Coach
- **Formality:** casual (Du)
- **Error messages:** ehrlich + hilfreich („Push nicht konfiguriert" statt „Etwas ist schiefgelaufen")
- **Forbidden:** LinkedIn-Sprech, „leverage", „synergy", übertriebene Wellness-Floskeln, Schuld-Trips
### Wording Examples
| Context | Good | Bad |
|---------|------|-----|
| Success | „Genommen! Dein Gehirn gibt dir einen langsamen High-Five." | „Großartig! Du hast heute wieder Großes geleistet! 🎉" |
| Error | „Reminder kommt nicht — NTFY_TOKEN in .env?" | „Ein unerwarteter Fehler ist aufgetreten." |
| Empty state | „Noch nichts geloggt. Typisch." | „Beginne deine Wellness-Journey!" |
## Design
- **Palette:** `#F12F12` (theme_color), utilitarian PWA
- **Feel:** minimal, schnell, mobile-first — keine Deko-Orgie
## Non-Goals
- Kein Multi-User / keine Accounts für andere
- Kein SaaS, kein App-Store-Launch
- Keine Dark Patterns (Streak-Shaming, Paywall, Engagement-Bait)
- Kein Medizin-Ratgeber — nur Erinnerung & Logging
- Kein Build-Step-Frontend (Vanilla JS bleibt)
## Infrastructure (project-local)
| | |
|---|---|
| Server | `boka` (Debian 12) |
| Path | `/home/frank/medis.schwenk.online` |
| Domain | `medis.schwenk.online` |
| DB | `data/medis.sqlite` (Volume) |
| Config | `meds.yaml`, `messages.yaml` (read-only mounts) |
| Push | ntfy → [ntfy.schwenk.online](https://ntfy.schwenk.online/) Topic `takeyourmeds` |
## Project-Specific Rules
- **ntfy only** — Server publiziert Reminder; ntfy-App auf dem Handy empfängt. Kein Web Push/VAPID.
- **`reminder_window_minutes: 90`** — nicht sofort „verpasst" um 08:01; ADHS-realistisch
- **Abend-Check 21:00** — überfällige Slots → `missed`
- **Roast/Motivation** — OpenRouter optional; Notifications nutzen statische `messages.yaml`
- **PIN in .env** — Single-User, `hmac.compare_digest`; kein Over-Engineering
- **Kein nginx** — FastAPI serviert API + Static (KISS)
- **Service Worker** — aggressives Caching; bei SW-Änderungen `version.json` bumpen
---
## Agent Instructions
- `SOUL.md` > `STANDARDS.md` für UI/UX und Produkt-Ton
- Secrets nie committen — Token/Keys nur `.env`
- Deploy: Fränky, außer explizit anders gesagt
- Neue Regeln hier oder in `BOUNDARIES.md` — Agent schlägt vor, Fränky bestätigt