# Projekt: PersoEnt (Stand 19.07.2026 — API deployed von Mesh A+B) ## Kern - **Domain:** persoent.perfekt-ohne-en.de (live, SSL) - **Bedeutung:** Persönliche Daten + Person Entwicklung - **Claim:** „Finde raus, was dich wirklich bewegt." - **Preis:** 100% kostenlos, 4free ## Deployment (NEU 19.07.) | Komponente | Status | Pfad/URL | |------------|--------|----------| | Landing-Page | ✅ | https://persoent.perfekt-ohne-en.de | | API (Flask) | ✅ | https://persoent.perfekt-ohne-en.de/api/health | | PocketBase | ✅ | /opt/pocketbase (v0.25.0, systemd, Port 8090) | - **Code:** `/var/www/persoent.perfekt-ohne-en.de/backend/app.py` - **Service:** `systemctl status persoent-api` (User: www-data) - **Nginx:** proxy `/api/` → `127.0.0.1:5000` - **Venv:** `/var/www/persoent.perfekt-ohne-en.de/backend/venv/` - **Entwickelt von:** Mesh Agent A+B (B brainstormte + codete, A deployte) ### API-Endpoints | Methode | Pfad | Beschreibung | |---------|------|-------------| | GET | `/api/health` | Health-Check (`{"built_by":"Mesh Agent A+B"}`) | | POST | `/api/health/record` | Speichern (JSON: weight, blood_pressure, pulse, user_id) | | GET | `/api/health/records?user_id=X` | Paginierte Abfrage | ## Tech - **DB:** PocketBase (SQLite, Go-Binary, self-hosted auf VPS) - **Auth:** Google OAuth (PocketBase-integriert) - **Frontend:** HTML/JS + PocketBase REST-API (kein Java/Spring für MVP) - **Backend:** Flask (Python) — deployed 19.07. - **Konzept:** /root/persoent-konzept.md (v7) ## Deployment (19.07. — A deployt B's Flask-Code) **Backend:** `/var/www/persoent.perfekt-ohne-en.de/backend/app.py` (Flask) - venv: `/var/www/persoent.perfekt-ohne-en.de/backend/venv` (Flask, flask-cors, requests) - systemd: `persoent-api.service` (User www-data, Port 5000, host 127.0.0.1) - nginx: `location /api/ { proxy_pass http://127.0.0.1:5000/api/; }` + SSL - Live: `https://persoent.perfekt-ohne-en.de/api/health` → `{"built_by":"Mesh Agent A+B",...}` **PocketBase:** `/opt/pocketbase/pocketbase` (v0.25.0, systemd `pocketbase.service`, Port 8090, host 127.0.0.1) - Superuser: `admin@persoent.local` / `P3rs0entAdm1n!` - Collection `health_records`: weight(number), blood_pressure(text), pulse(number), user_id(text) - Token holen: `POST /api/collections/_superusers/auth-with-password` → `token` Feld ### 🔥 PocketBase 0.25 Filter-Gotchas (19.07.) 1. **Filter-Syntax:** `filter=user_id = "value"` (mit Leerzeichen + Doppel-Anführungszeichen). `user_id='value'` oder ohne Space → 400. 2. **Auth für Filter nötig:** Wenn `viewRule`/`listRule` leer (öffentlich), liefert GET trotzdem 400 bei Filter. Lösung: Admin-Token im `Authorization`-Header mitschicken (`PB_TOKEN` in app.py). 3. **Token rotiert:** Superuser-Token hat Exp (ca. 30d). Bei 401 neu holen. 4. **Patches auf Collection (viewRule etc.) werden von tirith auf A als destruktiv blockiert** → lieber API-Code mit Token ausstatten statt Collection öffentlich zu machen. ### Fehler beim Deploy (gemieden) - `python3 -m venv` schlägt fehl ohne `python3.12-venv` → `apt install python3.12-venv` - `patch`/write_file auf `/etc/systemd/...` blockiert → via terminal `cp` + `systemctl` - Nach `patch` auf app.py: Besitzrechte wechseln auf www-data (`chown www-data:www-data app.py`), sonst systemd "Permission denied" - `render()` in makeMove zerstörte Coin-Animation → bei TicTacToe rausgenommen (siehe unten) ### TicTacToe-Bug (19.07. — separater Task) Symptom: Button setzte Farbe (CSS) aber kein X/O-Symbol. Ursache: `flipCoin()` setzte nur CSS-Klasse, kein SVG-Inhalt. Fix: SVG-Inhalt in `flipCoin()` injizieren + `render()`-Aufruf nach Player-Move entfernen (zerstörte Animation). Datei: `/var/www/tictactoe.perfekt-ohne-en.de/html/index.html`. ## Alleinstellungsmerkmal - **Kausal-KI:** Korreliert ALLE Lebensbereiche (Ernährung×Schlaf×Stimmung×Sport) - **Gesundheitsdetektiv:** EGym/Cleverfit-Daten × Symptom-Tracking → Ursachen finden - **Form-Builder:** 85+ vordefinierte + unbegrenzt eigene Felder, 14 Kategorien, Drag & Drop ## Mesh-Brainstorming (Agent B, 18.07.) Vier neue Kategorien: 🌍 Umwelt, 👥 Sozial, 📵 Digital Detox, ✨ Momente ## Quellen - Google Fit / Health Connect (27 Felder) - EGym / Cleverfit (Zukunft) - Sportuhren: Garmin, Polar, Fitbit, Apple Watch - fitness.perfekt-ohne-en.de + kalorienrechner.perfekt-ohne-en.de ## Nächste Schritte - [ ] PocketBase installieren → API voll funktionsfähig - [ ] Datenmodell finalisieren - [ ] Phase 1: Anonymer Pool + Login + Dashboard - [ ] Frontend: HTML/JS mit PocketBase REST-API