refactor: rename nutriphi module to food (Essen)

Complete rename across the entire monorepo pre-launch:
- Module, routes, API, i18n, standalone landing app directories
- All code identifiers, display names, logo component
- German user-facing label: "Essen" (English brand stays "Food")
- Dexie table nutriFavorites -> foodFavorites
- Infra configs (docker-compose, cloudflared, nginx, wrangler)

Zero residue of nutriphi remains. No data migration needed (pre-launch).

Follow-up: run pnpm install, update Cloudflare DNS
(food.mana.how), rename Cloudflare Pages project.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-14 15:30:07 +02:00
parent f5cb833b04
commit 53b3746b98
196 changed files with 863 additions and 719 deletions

View file

@ -51,7 +51,7 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
| Clock | `UMAMI_WEBSITE_ID_CLOCK_LANDING` |
| Picture | `UMAMI_WEBSITE_ID_PICTURE_LANDING` |
| Todo | `UMAMI_WEBSITE_ID_TODO_LANDING` |
| NutriPhi | `UMAMI_WEBSITE_ID_NUTRIPHI_LANDING` |
| Food | `UMAMI_WEBSITE_ID_FOOD_LANDING` |
| Presi | `UMAMI_WEBSITE_ID_PRESI_LANDING` |
| Mukke | `UMAMI_WEBSITE_ID_MUKKE_LANDING` |
@ -72,7 +72,7 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
| Questions | `UMAMI_WEBSITE_ID_QUESTIONS` |
| Zitare | `UMAMI_WEBSITE_ID_ZITARE` |
| Presi | `UMAMI_WEBSITE_ID_PRESI` |
| NutriPhi | `UMAMI_WEBSITE_ID_NUTRIPHI` |
| Food | `UMAMI_WEBSITE_ID_FOOD` |
| Storage | `UMAMI_WEBSITE_ID_STORAGE` |
| Photos | `UMAMI_WEBSITE_ID_PHOTOS` |
| SkillTree | `UMAMI_WEBSITE_ID_SKILLTREE` |

View file

@ -87,7 +87,7 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
| Presi | — | ~150 | (existierte schon) |
| Context | 3020 | 94 | AI Text Generation |
| Planta | 3022 | 104 | Photo Upload, AI Plant Analysis |
| NutriPhi | 3023 | 154 | AI Meal Analysis, Recommendations |
| Food | 3023 | 154 | AI Meal Analysis, Recommendations |
| Traces | 3026 | 108 | AI Guide Generation, Location Sync |
| **Σ Compute** | | **~1.537** | | **~40.000 LOC NestJS** |
@ -326,7 +326,7 @@ mana-analytics (Hono, 475 LOC)
| 7 | Presi | decks, slides | ✅ Komplett |
| 8 | Picture | images, boards, boardItems, tags, imageTags | ✅ Komplett |
| 9 | Inventar | collections, items, locations, categories | ✅ Komplett |
| 10 | NutriPhi | meals, goals, favorites | ✅ Komplett |
| 10 | Food | meals, goals, favorites | ✅ Komplett |
| 11 | Planta | plants, plantPhotos, wateringSchedules, wateringLogs | ✅ Komplett |
| 12 | Storage | files, folders, tags, fileTags | ✅ Komplett |
| 13 | Chat | conversations, messages, templates | ✅ Komplett |
@ -363,7 +363,7 @@ shared-feedback-types + shared-feedback-service + shared-feedback-ui → 3 Pack
shared-help-types + shared-help-content + shared-help-ui + shared-help-mobile → 4 Packages
shared-subscription-types + shared-subscription-ui → 2 Packages
credit-operations + shared-credit-service + shared-credit-ui → 3 Packages
shared-gpu, nutriphi-database → 2 unbenutzt
shared-gpu, food-database → 2 unbenutzt
```
### 8.2 Nachher: 43 Packages (-26%)
@ -374,7 +374,7 @@ shared-gpu, nutriphi-database → 2 unb
| Help 4→1 | shared-help-{types,content,ui,mobile} | `@mana/help` | -3 |
| Subscription 2→1 | shared-subscription-{types,ui} | `@mana/subscriptions` | -1 |
| Credits 3→1 | credit-operations, shared-credit-{service,ui} | `@mana/credits` | -2 |
| Unbenutzt geloescht | shared-gpu, nutriphi-database | — | -2 |
| Unbenutzt geloescht | shared-gpu, food-database | — | -2 |
| NestJS-spezifisch entfernt | shared-nestjs-{auth,health,metrics,setup}, mana-core-nestjs-integration | — | -5 |
| **Gesamt** | **58** | **43** | **-15** |

View file

@ -18,7 +18,7 @@ Für jede Domain: **CNAME Record hinzufügen** (oder bestehenden ändern), Proxi
|--------|-----|------|--------|
| `it` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
| `citycorners` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
| `nutriphi` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
| `food` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
| `cards` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
| `docs` | CNAME | `bb0ea86d-8253-4a54-838b-107bb7945be9.cfargotunnel.com` | **Neu erstellen** |
@ -41,7 +41,7 @@ Diese Domains zeigen noch auf Cloudflare Pages. Um sie auf Self-Hosted umzustell
### Reihenfolge
1. **Zuerst:** Neue Domains erstellen (`it`, `citycorners`, `nutriphi`, `cards`, `docs`)
1. **Zuerst:** Neue Domains erstellen (`it`, `citycorners`, `food`, `cards`, `docs`)
2. **Danach:** Bestehende Landing-Domains von Pages auf Tunnel migrieren (eine nach der anderen, testen)
3. **Zuletzt:** Alte CF Pages Projekte löschen (optional, kosten nichts)
@ -93,7 +93,7 @@ Cloudflare Tunnel (bb0ea86d...)
| `storage.mana.how` | Storage Web | 5015 |
| `storage-api.mana.how` | Storage API | 3035 |
| `presi.mana.how` | Presi Web | 5016 |
| `nutriphi.mana.how` | NutriPhi Web | 5017 |
| `food.mana.how` | Food Web | 5017 |
| `photos.mana.how` | Photos Web | 5019 |
| `mukke.mana.how` | Mukke Web | 5180 |
| `picture.mana.how` | Picture Web | 5021 |
@ -110,7 +110,7 @@ Cloudflare Tunnel (bb0ea86d...)
| `presis.mana.how` | Presi Landing | `/srv/landings/presi` |
| `clocks.mana.how` | Clock Landing | `/srv/landings/clock` |
| `cards.mana.how` | Cards Landing | `/srv/landings/cards` |
| `nutriphi.mana.how` | NutriPhi Landing | `/srv/landings/nutriphi` |
| `food.mana.how` | Food Landing | `/srv/landings/food` |
| `citycorners.mana.how` | CityCorners Landing | `/srv/landings/citycorners` |
| `docs.mana.how` | Dokumentation | `/srv/landings/docs` |

View file

@ -179,11 +179,11 @@ presi-api.mana.how {
reverse_proxy 10.0.0.2:3036
}
nutriphi.mana.how {
food.mana.how {
reverse_proxy 10.0.0.2:5017
}
nutriphi-api.mana.how {
food-api.mana.how {
reverse_proxy 10.0.0.2:3037
}

View file

@ -39,7 +39,7 @@ Dieser Bericht dokumentiert alle externen Dienste im Mana Monorepo und evaluiert
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Replicate│ │OpenRouter│ │ Gemini │ │ Ollama │ │Azure OAPI│ │ │
│ │ │ (Picture)│ │ (Chat) │ │(Planta, │ │ (Chat) │ │ (Chat) │ │ │
│ │ │ CLOUD │ │ CLOUD │ │Nutriphi) │ │ LOCAL │ │ CLOUD │ │ │
│ │ │ CLOUD │ │ CLOUD │ │Food) │ │ LOCAL │ │ CLOUD │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
@ -84,7 +84,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
|--------|--------|-------|------------------|-------------------|
| **Replicate** | Picture | Bildgenerierung (Flux, SDXL, SD) | `PICTURE_REPLICATE_API_TOKEN` | €20-100/Monat |
| **OpenRouter** | Chat | Cloud LLMs (Claude, GPT, Llama, DeepSeek) | `OPENROUTER_API_KEY` | €10-50/Monat |
| **Google Gemini** | Planta, Nutriphi, Cards | Vision & Text AI | `GEMINI_API_KEY`, `PLANTA_GEMINI_API_KEY` | €5-20/Monat |
| **Google Gemini** | Planta, Food, Cards | Vision & Text AI | `GEMINI_API_KEY`, `PLANTA_GEMINI_API_KEY` | €5-20/Monat |
| **Azure OpenAI** | Chat (Docker) | GPT-4o via Azure | `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_KEY` | Optional |
| **Anthropic** | Mana Games | Claude API | `MANA_GAMES_ANTHROPIC_API_KEY` | Optional |
| **Ollama** | Chat | Lokale LLMs (Gemma 3, Llama) | `OLLAMA_URL` | ✅ Bereits lokal |
@ -104,7 +104,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
- `chat-storage` - User-Uploads
- `cards-storage` - Card/Deck Assets
- `plants-storage` - Pflanzenfotos
- `nutriphi-storage` - Mahlzeitenfotos
- `food-storage` - Mahlzeitenfotos
- `presi-storage` - Präsentationsfolien
- `calendar-storage` - Kalender-Anhänge
- `contacts-storage` - Kontakt-Avatare
@ -260,7 +260,7 @@ LLaVA (Large Language and Vision Assistant) kann Gemini Vision für die meisten
**Use-Cases in Mana:**
- **Planta:** Pflanzenidentifikation
- **Nutriphi:** Lebensmittelerkennung, Nährwertschätzung
- **Food:** Lebensmittelerkennung, Nährwertschätzung
**Installation:**
@ -477,10 +477,10 @@ PICTURE_REPLICATE_API_TOKEN=r8_xxx
# OpenRouter (Chat)
OPENROUTER_API_KEY=sk-or-v1-xxx
# Google Gemini (Planta, Nutriphi, Cards)
# Google Gemini (Planta, Food, Cards)
GEMINI_API_KEY=AIza...
PLANTA_GEMINI_API_KEY=AIza...
NUTRIPHI_GEMINI_API_KEY=AIza...
FOOD_GEMINI_API_KEY=AIza...
MANA_GAMES_GOOGLE_GENAI_API_KEY=AIza...
# Ollama (Local - bereits konfiguriert)

View file

@ -98,7 +98,7 @@ Centralized media handling for all applications:
|--------|---------|-----------|
| `picture-storage` | AI-generated images | 100+ GB |
| `storage-storage` | User cloud storage | 500+ GB |
| `nutriphi-storage` | Meal photos | 50+ GB |
| `food-storage` | Meal photos | 50+ GB |
| `chat-attachments` | Chat file uploads | 100+ GB |
| `presi-assets` | Presentation media | 50+ GB |

View file

@ -55,7 +55,7 @@ These apps have server-side compute and support both `local` and `full` modes:
| Storage | 3016 | 5185 | Yes | Yes |
| Context | 3020 | 5192 | Yes | Yes |
| Planta | 3022 | 5191 | Yes | Yes |
| NutriPhi | 3023 | 5180 | Yes | Yes |
| Food | 3023 | 5180 | Yes | Yes |
| Traces | 3026 | mobile | Yes | Yes |
| Presi | 3008 | 5178 | Yes | Yes |
| uLoad | 3070 | 5173 | Yes | Yes |
@ -161,7 +161,7 @@ pnpm setup:db:context # Setup context database + schema
pnpm setup:db:storage # Setup storage database + schema
pnpm setup:db:mukke # Setup mukke database + schema
pnpm setup:db:plants # Setup plants database + schema
pnpm setup:db:nutriphi # Setup nutriphi database + schema
pnpm setup:db:food # Setup food database + schema
pnpm setup:db:questions # Setup questions database + schema
pnpm setup:db:traces # Setup traces database + schema
```

View file

@ -152,7 +152,7 @@ Diese Services sind für Matrix/Telegram konzipiert, nicht als direkte APIs:
| matrix-project-doc-bot | 3313 | Blog-Generierung |
| matrix-todo-bot | 3314 | Task Management |
| matrix-calendar-bot | 3315 | Kalender/Events |
| matrix-nutriphi-bot | 3316 | Ernährungs-Tracking |
| matrix-food-bot | 3316 | Ernährungs-Tracking |
| matrix-zitare-bot | 3317 | Zitate |
| matrix-clock-bot | 3318 | Timer/Alarme |
| matrix-tts-bot | 3023 | Sprachausgabe |
@ -461,6 +461,6 @@ services/
| 3313 | matrix-project-doc-bot | Bot |
| 3314 | matrix-todo-bot | Bot |
| 3315 | matrix-calendar-bot | Bot |
| 3316 | matrix-nutriphi-bot | Bot |
| 3316 | matrix-food-bot | Bot |
| 3317 | matrix-zitare-bot | Bot |
| 3318 | matrix-clock-bot | Bot |

View file

@ -24,7 +24,7 @@
- **Warum:** Knowledge Worker zahlen für Produktivitätstools. AI-Dokumentgenerierung + Versionierung ist ein klarer Produktivitätsgewinn. B2B-fähig.
- **Empfehlung:** Free (begrenzte AI-Tokens/Monat), Pro (mehr Tokens + alle Modelle), Team (shared Spaces + höhere Limits).
### 4. NutriPhi (AI Nutrition Tracking)
### 4. Food (AI Nutrition Tracking)
- **Modell:** Credit-System bereits da (5 Credits/Foto, 2/Text, 10/Coaching)
- **Warum:** Health/Fitness-Markt hat hohe Zahlungsbereitschaft (MyFitnessPal, Yazio machen Millionen). Foto-Analyse ist ein starker Differentiator. Recurring Revenue durch tägliche Nutzung.

View file

@ -35,7 +35,7 @@ All monitoring tools are publicly accessible - no login required (except GlitchT
| Picture | https://stats.mana.how/share/273f67fa569940f6b85e7a7a0a003539/picture-webapp |
| Photos | https://stats.mana.how/share/dc201d685f784716a0b8587376eca7a1/photos-webapp |
| Storage | https://stats.mana.how/share/392ff51d11f14f0c9d556af1402a3ee6/storage-webapp |
| NutriPhi | https://stats.mana.how/share/33dfae72f8e24aaa8008cbbceeaf072d/nutriphi-webapp |
| Food | https://stats.mana.how/share/33dfae72f8e24aaa8008cbbceeaf072d/food-webapp |
| Planta | https://stats.mana.how/share/1e83a8a67fa84d3995455c21dedbe3a2/plants-webapp |
| Presi | https://stats.mana.how/share/a1eb8d1fa4d543e6b97ac41351fe1c6f/presi-webapp |
| Skilltree | https://stats.mana.how/share/5de13e0895ae4a69aa2a834f985be14d/skilltree-webapp |

View file

@ -104,7 +104,7 @@ Pure CRUD apps use mana-sync directly.
| 3035 | picture-server | Hono/Bun | Replicate AI, generation orchestration |
| 3036 | cards-server | Hono/Bun | AI card generation |
| 3037 | mukke-server | Hono/Bun | Audio processing, BPM, ID3 tags |
| 3038 | nutriphi-server | Hono/Bun | Gemini meal analysis |
| 3038 | food-server | Hono/Bun | Gemini meal analysis |
| 3039 | plants-server | Hono/Bun | Gemini plant analysis |
| 3040 | presi-server | Hono/Bun | Share links |
| 3042 | mana-mail | Hono/Bun | JMAP proxy to Stalwart, account provisioning |
@ -128,7 +128,7 @@ Pure CRUD apps use mana-sync directly.
| 5014 | contacts-web | 3033 contacts-server |
| 5015 | storage-web | 3034 storage-server |
| 5016 | presi-web | 3040 presi-server |
| 5017 | nutriphi-web | 3038 nutriphi-server |
| 5017 | food-web | 3038 food-server |
| 5018 | zitare-web | *(local-first only)* |
| 5019 | photos-web | *(local-first + mana-media)* |
| 5020 | skilltree-web | *(local-first only)* |

View file

@ -250,7 +250,7 @@ no external callers exist, and no future external callers can show up
**What was there:** Twelve `*-api.mana.how` Cloudflare Tunnel routes
(`todo-api`, `calendar-api`, `contacts-api`, `chat-api`, `storage-api`,
`cards-api`, `music-api`, `nutriphi-api`, `picture-api`, `presi-api`,
`cards-api`, `music-api`, `food-api`, `picture-api`, `presi-api`,
`zitare-api`, `clock-api`) plus their matching `lib/api/services/*.ts`
clients in the unified web app, the matching `__PUBLIC_*_API_URL__`
runtime injections in `hooks.server.ts`, and the
@ -290,7 +290,7 @@ needed them.
- `~/.cloudflared/config.yml` on the Mac Mini lost its 16 dead ingress
routes (`chat-api`, `todo-api`, `calendar-api`, `clock-api`, `clock-bot`,
`contacts-api`, `zitare-api`, `skilltree-api`, `plants-api`, `cards-api`,
`storage-api`, `presi-api`, `nutriphi-api`, `photos-api`, `mukke-api`,
`storage-api`, `presi-api`, `food-api`, `photos-api`, `mukke-api`,
`picture-api`). The tunnel was reloaded via `kill -HUP <pid>`.
- After reload, every former 502 returns 404 from the Cloudflare edge
(no ingress route → no origin → 404), confirming the cleanup is live.
@ -565,7 +565,7 @@ in one batch.
- `memoro-api.mana.how` → 404 (no ingress route — see "Memoro server
detached" entry above; the unified web app does not need it)
- 12 ghost API hostnames (`todo-api`, `calendar-api`, `contacts-api`,
`chat-api`, `storage-api`, `cards-api`, `music-api`, `nutriphi-api`,
`chat-api`, `storage-api`, `cards-api`, `music-api`, `food-api`,
`picture-api`, `presi-api`, `zitare-api`, `clock-api`) → 404 (no
ingress route — see "Ghost backend API hostnames" entry above)

View file

@ -13,7 +13,7 @@ Dieses Dokument bietet eine umfassende Übersicht über alle Projekte im Manacor
- [Picture](#picture)
- [uLoad](#uload)
- [Chat](#chat)
- [Nutriphi](#nutriphi)
- [Food](#food)
3. [Shared Packages](#shared-packages)
4. [Technologie-Stack](#technologie-stack)
5. [Entwicklung](#entwicklung)
@ -50,7 +50,7 @@ pnpm run cards:dev
pnpm run memoro:dev
pnpm run picture:dev
pnpm run uload:dev
pnpm run nutriphi:dev
pnpm run food:dev
```
---
@ -376,11 +376,11 @@ chat/
---
### Nutriphi
### Food
**KI-gestützter Ernährungs-Tracker**
Nutriphi ist ein intelligenter Ernährungs-Tracker, der mithilfe von Google Gemini Vision API Fotos von Mahlzeiten analysiert und automatisch Nährwertinformationen extrahiert.
Food ist ein intelligenter Ernährungs-Tracker, der mithilfe von Google Gemini Vision API Fotos von Mahlzeiten analysiert und automatisch Nährwertinformationen extrahiert.
#### Features
@ -407,12 +407,12 @@ Nutriphi ist ein intelligenter Ernährungs-Tracker, der mithilfe von Google Gemi
#### Projektstruktur
```
nutriphi/
food/
├── apps/
│ ├── mobile/ # Expo React Native App (@nutriphi/mobile)
│ ├── web/ # SvelteKit Web App (@nutriphi/web)
│ └── landing/ # Astro Landing Page (@nutriphi/landing)
├── server/ # Hono/Bun server (@nutriphi/server)
│ ├── mobile/ # Expo React Native App (@food/mobile)
│ ├── web/ # SvelteKit Web App (@food/web)
│ └── landing/ # Astro Landing Page (@food/landing)
├── server/ # Hono/Bun server (@food/server)
```
#### API Endpoints
@ -430,16 +430,16 @@ nutriphi/
```bash
# Backend starten
pnpm dev:nutriphi:backend
pnpm dev:food:backend
# Mobile App starten
pnpm dev:nutriphi:mobile
pnpm dev:food:mobile
# Web App starten
pnpm dev:nutriphi:web
pnpm dev:food:web
# Landing Page starten
pnpm dev:nutriphi:landing
pnpm dev:food:landing
```
---

View file

@ -47,7 +47,7 @@ Diese Dokumentation beschreibt Services, die die bestehende Infrastruktur sinnvo
│ ├── Contacts Kontaktverwaltung │
│ ├── Storage Cloud-Speicher │
│ ├── Presi Präsentationen │
│ └── NutriPhi Ernährungstracking │
│ └── Food Ernährungstracking │
├─────────────────────────────────────────────────────────────────────────┤
│ MONITORING │
│ ├── VictoriaMetrics Zeitreihen-Datenbank für Metriken │
@ -882,7 +882,7 @@ Diese Apps existieren bereits im Monorepo, sind aber noch nicht auf dem Server:
| Bot | Beschreibung | Code vorhanden |
|-----|--------------|---------------|
| `telegram-todo-bot` | Todo-Management via Telegram | ✓ |
| `telegram-nutriphi-bot` | Ernährung loggen via Telegram | ✓ |
| `telegram-food-bot` | Ernährung loggen via Telegram | ✓ |
| `telegram-zitare-bot` | Tägliche Zitate via Telegram | ✓ |
| `telegram-project-doc-bot` | Projekt-Dokumentation | ✓ |
@ -929,7 +929,7 @@ Diese Apps existieren bereits im Monorepo, sind aber noch nicht auf dem Server:
6. 🤖 Weitere Telegram Bots
└── todo-bot
└── zitare-bot
└── nutriphi-bot
└── food-bot
```
### Phase 4: Optional (Backlog)

View file

@ -87,7 +87,7 @@ hatten die Infrastruktur bereits — sie wurde nur nicht benutzt.
`@mana/shared-logger`, damit Module ohne extra dependency darauf
zugreifen können.
- 7 `console.error` Aufrufe in `apps/api/src/modules/{guides,plants,
nutriphi,traces}/routes.ts` durch
food,traces}/routes.ts` durch
`logger.error('module.event_name', { error: ... })` ersetzt. Event-Namen
folgen `<module>.<event>` Konvention für Filterbarkeit in Sentry/JSON-Logs.
@ -373,7 +373,7 @@ nicht mehr existiert.
`apps/uload/apps/server`. Beide deployed via
`docker-compose.macmini.yml`.
- Alle anderen 17 (`calendar`, `chat`, `todo`, `contacts`, `picture`,
`cards`, `plants`, `nutriphi`, `news`, `traces`, `presi`, `storage`,
`cards`, `plants`, `food`, `news`, `traces`, `presi`, `storage`,
`music`, `moodlit`, `context`, `guides`, `questions`) wurden zu
`apps/api/src/modules/{name}/routes.ts` migriert. Ihre `apps/server/`
Verzeichnisse existieren nicht mehr.

View file

@ -64,7 +64,7 @@ Jeder einzelne Backend-Service:
| Kategorie | Backends | Source Files | Empfehlung |
|-----------|----------|-------------|------------|
| **Komplex (behalten)** | Chat, Todo, Calendar, Contacts, Storage, Mukke | 60-89 pro Backend | Eigenstaendige Services |
| **AI-spezialisiert (behalten)** | Picture, Plants, NutriPhi | 30-50 pro Backend | Eigene AI-Pipelines |
| **AI-spezialisiert (behalten)** | Picture, Plants, Food | 30-50 pro Backend | Eigene AI-Pipelines |
| **Triviales CRUD (konsolidieren)** | Zitare (20!), Clock (31), Presi, CityCorners, Questions, Context | 20-35 pro Backend | -> 1 Content Service |
| **Eliminieren** | Photos (mana-media Proxy), Skilltree (Frontend-only) | minimal | Backend loeschen |
@ -379,7 +379,7 @@ Zu granulare Packages (Konsolidierungskandidaten):
| shared-help-content, shared-help-mobile, shared-help-types, shared-help-ui | `@mana/help` |
| shared-subscription-types, shared-subscription-ui | `@mana/subscriptions` |
| shared-nestjs-health, shared-nestjs-metrics, shared-nestjs-setup | `@mana/nestjs-bootstrap` |
| cards-database, nutriphi-database, spiral-db | Zurueck in die jeweiligen Apps |
| cards-database, food-database, spiral-db | Zurueck in die jeweiligen Apps |
### Ziel: ~25-30 Packages statt 55
@ -558,7 +558,7 @@ Diese Technologie-Entscheidungen sind gut und sollten beibehalten werden:
### Apps (24)
calendar, chat, citycorners, clock, contacts, context, docs, inventar, mana, cards, matrix, mukke, nutriphi, photos, picture, plants, playground, presi, questions, skilltree, storage, todo, traces, zitare
calendar, chat, citycorners, clock, contacts, context, docs, inventar, mana, cards, matrix, mukke, food, photos, picture, plants, playground, presi, questions, skilltree, storage, todo, traces, zitare
### Services (17)
@ -566,7 +566,7 @@ it-landing, mana-api-gateway, mana-api-gateway-go, mana-auth, mana-crawler, mana
### Shared Packages (55)
credit-operations, eslint-config, local-store, mana-core-nestjs-integration, cards-database, notify-client, nutriphi-database, qr-export, shared-api-client, shared-app-onboarding, shared-auth, shared-auth-stores, shared-auth-ui, shared-branding, shared-config, shared-credit-service, shared-credit-ui, shared-drizzle-config, shared-error-tracking, shared-errors, shared-feedback-service, shared-feedback-types, shared-feedback-ui, shared-gpu, shared-help-content, shared-help-mobile, shared-help-types, shared-help-ui, shared-i18n, shared-icons, shared-landing-ui, shared-llm, shared-logger, shared-nestjs-auth, shared-nestjs-health, shared-nestjs-metrics, shared-nestjs-setup, shared-profile-ui, shared-pwa, shared-splitscreen, shared-storage, shared-stores, shared-subscription-types, shared-subscription-ui, shared-tags, shared-tailwind, shared-theme, shared-theme-ui, shared-tsconfig, shared-types, shared-ui, shared-utils, shared-vite-config, spiral-db, test-config, wallpaper-generator
credit-operations, eslint-config, local-store, mana-core-nestjs-integration, cards-database, notify-client, food-database, qr-export, shared-api-client, shared-app-onboarding, shared-auth, shared-auth-stores, shared-auth-ui, shared-branding, shared-config, shared-credit-service, shared-credit-ui, shared-drizzle-config, shared-error-tracking, shared-errors, shared-feedback-service, shared-feedback-types, shared-feedback-ui, shared-gpu, shared-help-content, shared-help-mobile, shared-help-types, shared-help-ui, shared-i18n, shared-icons, shared-landing-ui, shared-llm, shared-logger, shared-nestjs-auth, shared-nestjs-health, shared-nestjs-metrics, shared-nestjs-setup, shared-profile-ui, shared-pwa, shared-splitscreen, shared-storage, shared-stores, shared-subscription-types, shared-subscription-ui, shared-tags, shared-tailwind, shared-theme, shared-theme-ui, shared-tsconfig, shared-types, shared-ui, shared-utils, shared-vite-config, spiral-db, test-config, wallpaper-generator
### Games (3)
@ -574,4 +574,4 @@ voxelava, whopixels, worldream
### Archivierte Apps (apps-archived/)
bauntown, memoro, news, nutriphi, reader, uload, wisekeep
bauntown, memoro, news, food, reader, uload, wisekeep

View file

@ -32,7 +32,7 @@
| **DNS/Tunnel** | Cloudflare Tunnel | Ja | → WireGuard + eigene IP, Caddy/Traefik |
| **Landing Pages** | Cloudflare Pages | Ja | → Nginx/Caddy auf eigenem Server |
| **Image Gen** | Replicate (Picture App) | Ja | → mana-image-gen (FLUX.2 klein, bereits vorhanden!) |
| **Vision** | Google Gemini (NutriPhi, Planta) | Teilweise | → Qwen2.5-VL / LLaVA via Ollama (Qualitätsverlust) |
| **Vision** | Google Gemini (Food, Planta) | Teilweise | → Qwen2.5-VL / LLaVA via Ollama (Qualitätsverlust) |
| **LLM** | Azure OpenAI (Context App) | Teilweise | → Ollama mit größerem Modell |
| **LLM Fallbacks** | OpenRouter, Groq, Together | Ja (optional) | Nur Fallbacks, Ollama ist Primary |
| **OAuth** | Google OAuth (Contacts Import) | Nein | Nötig für Google Contacts API |
@ -97,7 +97,7 @@ Brevo ist SPOF für alle Transaktions-Emails (Verifizierung, Passwort-Reset).
**Status: ✅ ERLEDIGT** (2026-03-24)
Alle 9 Backends nutzen jetzt `@mana/shared-llm``mana-llm` Gateway:
- Auth, Chat, Context, NutriPhi, Planta, Traces, Cards, Bot Services, Matrix Bots
- Auth, Chat, Context, Food, Planta, Traces, Cards, Bot Services, Matrix Bots
- Google Gemini als automatischer Fallback wenn Ollama überlastet
- OpenAI SDK komplett entfernt (Project Doc Bot)
- Google Gemini SDK entfernt (Cards)
@ -168,7 +168,7 @@ Ihr nutzt Vite überall (SvelteKit, Astro). Jest 29/30 mit ts-jest ist langsamer
**Aufwand:** 1 Woche | **Impact:** Mittel
NutriPhi und Planta nutzen Google Gemini Vision. Alternativen via Ollama:
Food und Planta nutzen Google Gemini Vision. Alternativen via Ollama:
- **Qwen2.5-VL** — Bestes Open-Source Vision Model
- **LLaVA** — Leichtgewichtiger, gut für Kategorisierung

View file

@ -24,7 +24,7 @@ This document defines the URL schema for all mana.how subdomains.
| **Chat** | chat.mana.how | api.mana.how/chat | Active |
| **Storage** | storage.mana.how | api.mana.how/storage | Active |
| **Zitare** | zitare.mana.how | api.mana.how/zitare | Active |
| **NutriPhi** | nutriphi.mana.how | api.mana.how/nutriphi | Active |
| **Food** | food.mana.how | api.mana.how/food | Active |
| **Presi** | presi.mana.how | api.mana.how/presi | Active |
| **SkillTree** | skilltree.mana.how | api.mana.how/skilltree | Active |
| **Photos** | photos.mana.how | api.mana.how/photos | Active |
@ -68,7 +68,7 @@ For web analytics, the following apps are tracked in Umami:
| `contacts-webapp` | Contacts | contacts.mana.how |
| `storage-webapp` | Storage | storage.mana.how |
| `zitare-webapp` | Zitare | zitare.mana.how |
| `nutriphi-webapp` | NutriPhi | nutriphi.mana.how |
| `food-webapp` | Food | food.mana.how |
| `presi-webapp` | Presi | presi.mana.how |
| `skilltree-webapp` | SkillTree | skilltree.mana.how |
| `photos-webapp` | Photos | photos.mana.how |

View file

@ -35,7 +35,7 @@ All apps follow `MAJOR.MINOR.PATCH`:
| Mukke | 0.2.0 | Beta |
| Zitare | 0.2.0 | Beta |
| Clock | 0.2.0 | Beta |
| Nutriphi | 0.2.0 | Beta |
| Food | 0.2.0 | Beta |
| Cards | 0.2.0 | Beta |
| Mana | 0.2.0 | Beta |
| Matrix | 0.2.0 | Beta |

View file

@ -1,7 +1,7 @@
# Mana Companion Brain — Architecture & Implementation Plan
> Vollstaendiger Umbau-Plan fuer ein zentrales Intelligenz-System ueber alle Module.
> Start mit 5 Pilot-Modulen: **Todo, Calendar, Drink, Nutriphi, Places**.
> Start mit 5 Pilot-Modulen: **Todo, Calendar, Drink, Food, Places**.
> Stand: April 2026
---
@ -30,7 +30,7 @@ Mana hat 40+ Module, die isoliert arbeiten. Der Companion Brain verbindet sie zu
```
+---------------------------------------------------+
| MODULE LAYER |
| Todo - Calendar - Drink - Nutriphi - Places |
| Todo - Calendar - Drink - Food - Places |
| Jedes Modul emittiert Domain Events via Stores |
+------------------------+--------------------------+
| emit()
@ -220,7 +220,7 @@ Felder:
| `DrinkEntryUndone` | `{ entryId }` | `drinkStore.undoLastEntry()` |
| `DrinkGoalReached` | `{ date, goalMl, actualMl, drinkType: 'water' }` | Projection erkennt Zielerreichung |
#### Nutriphi Events
#### Food Events
| Event | Payload | Abgeleitet aus |
|-------|---------|----------------|
@ -370,7 +370,7 @@ export interface DaySnapshot {
total: { ml: number; count: number };
};
// Nutriphi
// Food
nutrition: {
meals: number;
calories: { actual: number; goal: number; percent: number };
@ -436,7 +436,7 @@ export interface Correlation {
- Todo: tasks_completed_count, overdue_count
- Calendar: events_count, meeting_hours
- Drink: water_ml, coffee_count, goal_reached (boolean)
- Nutriphi: calories, protein, meals_count
- Food: calories, protein, meals_count
- Places: places_visited, distance_km
### 4.5 ContactHealth (spaeter, nicht in Pilot)
@ -529,9 +529,9 @@ eventBus.on('DrinkLogged', (event) => {
Fuer den Start 10-15 Templates die der Nutzer mit einem Tap aktiviert:
- 8 Glaeser Wasser/Tag (Drink, event_count, DrinkLogged, water)
- 2000 kcal/Tag (Nutriphi, event_sum, MealLogged, calories)
- 2000 kcal/Tag (Food, event_sum, MealLogged, calories)
- 5 Tasks/Tag erledigen (Todo, event_count, TaskCompleted)
- Alle Mahlzeiten tracken (Nutriphi, event_count, MealLogged, 3/day)
- Alle Mahlzeiten tracken (Food, event_count, MealLogged, 3/day)
- Jeden Tag einen neuen Ort besuchen (Places, event_count, PlaceVisited, 1/day)
---
@ -743,7 +743,7 @@ export const drinkTools: ModuleTool[] = [
];
// modules/calendar/tools.ts — create_event
// modules/nutriphi/tools.ts — log_meal
// modules/food/tools.ts — log_meal
// modules/places/tools.ts — record_visit, create_place
```
@ -755,14 +755,14 @@ export const drinkTools: ModuleTool[] = [
import { todoTools } from '$lib/modules/todo/tools';
import { calendarTools } from '$lib/modules/calendar/tools';
import { drinkTools } from '$lib/modules/drink/tools';
import { nutriphiTools } from '$lib/modules/nutriphi/tools';
import { foodTools } from '$lib/modules/food/tools';
import { placesTools } from '$lib/modules/places/tools';
const ALL_TOOLS: ModuleTool[] = [
...todoTools,
...calendarTools,
...drinkTools,
...nutriphiTools,
...foodTools,
...placesTools,
];
@ -1058,7 +1058,7 @@ User: "Erstell mir eine Morgenroutine"
v
LLM + Context Document + Tool Schemas
|
| LLM sieht: Nutzer hat Drink, Todo, Nutriphi, Calendar aktiv
| LLM sieht: Nutzer hat Drink, Todo, Food, Calendar aktiv
| Memory: "Trinkt morgens zuerst Kaffee"
| Goals: "8 Glaeser Wasser/Tag"
|
@ -1147,7 +1147,7 @@ apps/mana/apps/web/src/lib/
drink/
tools.ts ✅ 3 Tools (log, progress, undo)
stores/drink.svelte.ts ✅ 3 Events (Logged, Deleted, Undone)
nutriphi/
food/
tools.ts ✅ 2 Tools (log_meal, nutrition_summary)
mutations.ts ✅ 3 Events (Logged, PhotoLogged, Deleted)
places/
@ -1266,7 +1266,7 @@ Commit: `66dd684bb`
- Registry nutzt `registerTools()` Pattern statt statische Imports (tree-shaking-freundlich)
- `initTools()` in `(app)/+layout.svelte` gewired neben `startEventStore()`
- Executor coerced String→Number und String→Boolean automatisch
- Tools pro Modul: Todo (3), Calendar (2), Drink (3), Nutriphi (2), Places (4)
- Tools pro Modul: Todo (3), Calendar (2), Drink (3), Food (2), Places (4)
- Jeder Tool hat eine `message` Feld fuer menschenlesbare Bestaetigung
### Phase 5: Companion Chat — ERLEDIGT (2026-04-13)
@ -1377,7 +1377,7 @@ Phase 1 (Events) ──────┬──> Phase 2 (Projections)
| 1 | Todo | 5 | 3 | Pilot |
| 2 | Calendar | 3 | 2 | Pilot |
| 3 | Drink | 3 | 3 | Pilot |
| 4 | Nutriphi | 3 | 2 | Pilot |
| 4 | Food | 3 | 2 | Pilot |
| 5 | Places | 6 | 4 | Pilot |
| 6 | Habits | 3 | 3 | Batch 2 |
| 7 | Journal | 3 | 2 | Batch 2 |
@ -1483,7 +1483,7 @@ Pulse Rules erzeugen Nudges, aber diese werden nur als OS-Notifications angezeig
| Nudge Outcomes | Lokal (Browser) | IndexedDB, nicht synced |
| Tool Execution | Lokal (Browser) | Writes gehen in Module-Tabellen |
**Invariante:** Sensitive Daten (Journal, Dreams, Finance, Nutriphi) werden **nie** an Tier 2/3 gesendet — erzwungen durch `contentClass: 'sensitive'` im LLM Orchestrator.
**Invariante:** Sensitive Daten (Journal, Dreams, Finance, Food) werden **nie** an Tier 2/3 gesendet — erzwungen durch `contentClass: 'sensitive'` im LLM Orchestrator.
---

View file

@ -19,7 +19,7 @@ recommendation.
**Productivity:** todo, calendar, contacts, notes, habits, times, timeblocks, events
**Knowledge & learning:** cards, zitare, guides, questions, skilltree, memoro, context
**Health & self:** nutriphi, cycles, dreams, moodlit, plants
**Health & self:** food, cycles, dreams, moodlit, plants
**Media & creative:** chat, picture, presi, music, photos, storage, uload
**Data & tools:** finance, calc, inventory, places, citycorners, who, news, links, tags, playground
@ -52,7 +52,7 @@ recommendation.
## Lifestyle & Hobbies
- **recipes** — Recipes (linked to `nutriphi`), meal plan, shopping list generator
- **recipes** — Recipes (linked to `food`), meal plan, shopping list generator
- **wardrobe** — Catalog clothing, build outfits, "last worn", wash status
- **travel** — Trips, itineraries, packing lists, travelogue (combines `places` + `photos`)
- **packing** — Reusable packing list templates per trip type
@ -108,10 +108,10 @@ recommendation.
## Health & Body (additional)
- **drink** — ✅ **Built.** Getränke-Tracker für alle Getränke (Wasser, Kaffee, Tee, Saft, Alkohol etc.). Tages-/Wochenziele, Favoriten, Verlauf. Verknüpfung mit `nutriphi` und `body`.
- **drink** — ✅ **Built.** Getränke-Tracker für alle Getränke (Wasser, Kaffee, Tee, Saft, Alkohol etc.). Tages-/Wochenziele, Favoriten, Verlauf. Verknüpfung mit `food` und `body`.
- **stretch** — ✅ **Built.** Geführtes Dehnen mit Timer-Player, Bestandsaufnahme, Routinen, Streaks, Erinnerungen. 22 Seed-Übungen, 5 Preset-Routinen.
- **breathe** — Atemübungen & Meditation-Timer mit geführten Mustern (Box Breathing, 4-7-8). Sessions-Log verknüpft mit `moodlit`.
- **fasting** — Intervallfasten-Timer (16:8, 18:6, OMAD, custom). Essensfenster visualisieren, Fasten-Streak. Synergie: `nutriphi` (Mahlzeiten im Essensfenster), `drink` (Wasser während Fastenphase).
- **fasting** — Intervallfasten-Timer (16:8, 18:6, OMAD, custom). Essensfenster visualisieren, Fasten-Streak. Synergie: `food` (Mahlzeiten im Essensfenster), `drink` (Wasser während Fastenphase).
- **posture** — Haltungs-Checks zu konfigurierbaren Zeiten ("Sitzt du gerade?"). Foto-basiertes Tracking (Seitenansicht-Selfie → Vorher/Nachher). Übungsbibliothek für Haltungskorrektur. Arbeitsplatz-Ergonomie-Checkliste. Synergie: `stretch` (Routine-Empfehlung), `body` (Kraftübungen für Haltung).
- **skin** — Hautpflege-Routinen (morgens/abends: Produkte + Reihenfolge). Hautzustand-Logging (Foto + Bewertung: Unreinheiten, Trockenheit, Rötung). Produkt-Bibliothek mit Inhaltsstoffen. Trigger-Tracking (Ernährung, Stress, Schlaf → Hautveränderung).
- **eyes** — 20-20-20 Regel Reminder (alle 20 Min, 20 Sek, 20 Fuß entfernt schauen). Bildschirmzeit-Logging. Augenübungen (Fokus nah/fern, Kreise, Palming). Synergie: `stretch` (Desk-Break könnte Augenübung enthalten).

View file

@ -15,7 +15,7 @@ Module ListViews use two different styling approaches:
- **Scoped CSS + `hsl(var(--color-*))` theme tokens** — 27 modules (65%)
- todo, notes, drink, contacts, journal, dreams, habits, firsts, calendar, chat, places, inventory, finance, news, body, calc, events, photos, automations, cycles, uload, picture, recipes
- **Tailwind utility classes** — 13 modules (35%)
- nutriphi, plants, moodlit, cards, presi, storage, skilltree, context, guides, memoro, who, music, playground, citycorners, questions, times
- food, plants, moodlit, cards, presi, storage, skilltree, context, guides, memoro, who, music, playground, citycorners, questions, times
### Why it matters
@ -33,7 +33,7 @@ Migrate the 13 Tailwind-based ListViews to scoped CSS with `hsl(var(--color-*))`
### Modules to migrate
- [ ] nutriphi
- [ ] food
- [ ] plants
- [ ] moodlit
- [ ] cards