4.5 KiB
4.5 KiB
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→tokenFeld
🔥 PocketBase 0.25 Filter-Gotchas (19.07.)
- Filter-Syntax:
filter=user_id = "value"(mit Leerzeichen + Doppel-Anführungszeichen).user_id='value'oder ohne Space → 400. - Auth für Filter nötig: Wenn
viewRule/listRuleleer (öffentlich), liefert GET trotzdem 400 bei Filter. Lösung: Admin-Token imAuthorization-Header mitschicken (PB_TOKENin app.py). - Token rotiert: Superuser-Token hat Exp (ca. 30d). Bei 401 neu holen.
- 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 venvschlägt fehl ohnepython3.12-venv→apt install python3.12-venvpatch/write_file auf/etc/systemd/...blockiert → via terminalcp+systemctl- Nach
patchauf 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