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:
@@ -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
|
||||
Reference in New Issue
Block a user