From 53b3746b980254169c5f71ebec725b7c78fc41c8 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 14 Apr 2026 15:30:07 +0200 Subject: [PATCH] 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) --- .claude/guidelines/hono-server.md | 2 +- .../plans/apps/{nutriphi => food}/MVP-PLAN.md | 16 +- .../plans/apps/{nutriphi => food}/README.md | 4 +- ...l-first-and-service-extraction-overview.md | 4 +- .../local-first-architecture-migration.md | 2 +- .../plans/monorepo-restructure-migration.md | 26 +-- .../same-origin-unified-app-migration.md | 16 +- .env.development | 14 +- .env.macmini.example | 2 +- .github/dependabot.yml | 2 +- .github/workflows/ci.yml | 56 ++--- README.md | 2 +- apps/api/src/index.ts | 4 +- .../src/modules/{nutriphi => food}/routes.ts | 12 +- apps/api/src/modules/plants/routes.ts | 8 +- .../src/content/docs/architecture/storage.mdx | 2 +- apps/food/CLAUDE.md | 17 ++ .../apps/landing/astro.config.mjs | 2 +- .../apps/landing/package.json | 2 +- .../apps/landing/src/layouts/Layout.astro | 2 +- .../apps/landing/src/pages/index.astro | 22 +- .../apps/landing/tailwind.config.cjs | 0 .../apps/landing/tsconfig.json | 0 .../apps/landing/wrangler.toml | 2 +- apps/food/package.json | 24 +++ .../packages/shared/package.json | 2 +- .../packages/shared/src/constants/index.ts | 2 +- .../packages/shared/src/index.ts | 0 .../packages/shared/src/types/index.ts | 0 .../packages/shared/src/utils/index.ts | 0 .../packages/shared/src/utils/utils.spec.ts | 0 .../packages/shared/tsconfig.json | 0 .../packages/shared/vitest.config.ts | 0 .../apps/{nutriphi-de.md => food-de.md} | 16 +- .../002-infrastructure-audit-improvements.md | 16 +- ...6-01-25-food-monitoring-infrastructure.md} | 20 +- .../2026-01-28-massive-feature-sprint.md | 36 ++-- ...1-29-microservices-matrix-consolidation.md | 22 +- ...1-31-matrix-consolidation-voice-support.md | 4 +- .../2026-02-01-ssd-migration-i18n-cicd.md | 2 +- .../2026-02-02-cross-domain-sso-mana-media.md | 34 +-- .../devlog/2026-02-12-gdpr-matrix-mac-mini.md | 4 +- ...14-matrix-stt-bot-gift-codes-onboarding.md | 6 +- ...-02-15-onboarding-polish-calendar-views.md | 2 +- .../2026-02-16-lightwrite-pwa-stripe-sepa.md | 2 +- ...-02-17-spiral-db-planta-bot-mana-values.md | 10 +- ...03-19-security-hardening-error-tracking.md | 6 +- ...analytics-pwa-visualizer-error-tracking.md | 6 +- ...3-23-abend-context-menus-llm-onboarding.md | 2 +- .../2026-03-25-storage-auth-tags-analytics.md | 4 +- .../2026-03-27-matrix-bot-go-consolidation.md | 4 +- ...26-03-28-local-first-nestjs-elimination.md | 2 +- ...2026-03-31-memoro-statuspage-todo-infra.md | 96 ++++----- ...-04-01-unified-app-migration-phases-1-7.md | 2 +- ...6-04-04-mana-media-cas-effect-depth-fix.md | 6 +- ...6-03-19-nutriphi.md => 2026-03-19-food.md} | 8 +- .../2026-03-28-architecture-update.md | 2 +- apps/mana/apps/landing/src/lib/i18n/config.ts | 11 +- .../apps/landing/src/pages/apps/index.astro | 2 +- .../apps/landing/src/pages/en/index.astro | 6 +- .../apps/landing/src/pages/es/index.astro | 6 +- .../apps/landing/src/pages/fr/index.astro | 6 +- apps/mana/apps/landing/src/pages/index.astro | 6 +- .../apps/landing/src/pages/it/index.astro | 6 +- apps/mana/apps/web/src/hooks.server.ts | 4 +- .../apps/web/src/lib/app-registry/apps.ts | 8 +- .../web/src/lib/app-registry/categories.ts | 2 +- .../apps/web/src/lib/companion/goals/types.ts | 4 +- .../src/lib/companion/memory/extractors.ts | 6 +- .../apps/web/src/lib/companion/rules/rules.ts | 4 +- .../lib/components/observatory/data/layout.ts | 2 +- .../components/observatory/data/mockData.ts | 4 +- .../observatory/ui/DetailPanel.svelte | 2 +- .../components/observatory/ui/LakeCard.svelte | 2 +- .../apps/web/src/lib/data/DATA_LAYER_AUDIT.md | 2 +- .../apps/web/src/lib/data/crypto/registry.ts | 4 +- apps/mana/apps/web/src/lib/data/database.ts | 4 +- .../apps/web/src/lib/data/events/catalog.ts | 10 +- .../web/src/lib/data/module-registry.test.ts | 4 +- .../apps/web/src/lib/data/module-registry.ts | 4 +- .../src/lib/data/projections/correlations.ts | 8 +- .../src/lib/data/projections/day-snapshot.ts | 8 +- .../src/lib/data/projections/streaks.test.ts | 2 +- .../web/src/lib/data/projections/streaks.ts | 2 +- apps/mana/apps/web/src/lib/data/tools/init.ts | 4 +- apps/mana/apps/web/src/lib/i18n/index.ts | 6 +- .../web/src/lib/i18n/locales/apps/de.json | 2 +- .../web/src/lib/i18n/locales/apps/en.json | 2 +- .../web/src/lib/i18n/locales/apps/es.json | 2 +- .../web/src/lib/i18n/locales/apps/fr.json | 2 +- .../web/src/lib/i18n/locales/apps/it.json | 2 +- .../i18n/locales/{nutriphi => food}/de.json | 2 +- .../i18n/locales/{nutriphi => food}/en.json | 2 +- .../i18n/locales/{nutriphi => food}/es.json | 2 +- .../i18n/locales/{nutriphi => food}/fr.json | 2 +- .../i18n/locales/{nutriphi => food}/it.json | 2 +- .../web/src/lib/modules/body/ListView.svelte | 4 +- .../body/components/CalorieWeightChart.svelte | 6 +- .../apps/web/src/lib/modules/body/context.ts | 4 +- .../apps/web/src/lib/modules/body/queries.ts | 12 +- .../src/lib/modules/body/stores/body.test.ts | 2 +- .../modules/contacts/stores/contacts.test.ts | 2 +- .../widgets/NutritionProgressWidget.svelte | 4 +- .../lib/modules/eventstream/ListView.svelte | 4 +- .../{nutriphi => food}/ListView.svelte | 6 +- .../{nutriphi => food}/ai-schemas.test.ts | 2 +- .../src/lib/modules/{nutriphi => food}/api.ts | 8 +- .../modules/{nutriphi => food}/collections.ts | 8 +- .../modules/{nutriphi => food}/constants.ts | 4 +- .../lib/modules/{nutriphi => food}/index.ts | 4 +- .../{nutriphi => food}/module.config.ts | 6 +- .../{nutriphi => food}/mutations.test.ts | 2 +- .../modules/{nutriphi => food}/mutations.ts | 8 +- .../lib/modules/{nutriphi => food}/queries.ts | 6 +- .../quick-input-adapter.test.ts | 0 .../{nutriphi => food}/quick-input-adapter.ts | 6 +- .../{nutriphi => food}/stores/tags.svelte.ts | 2 +- .../lib/modules/{nutriphi => food}/tools.ts | 8 +- .../lib/modules/{nutriphi => food}/types.ts | 2 +- .../src/lib/modules/goals/GoalEditor.svelte | 2 +- .../web/src/lib/modules/guides/collections.ts | 4 +- .../components/filters/FilterBar.svelte | 2 +- .../apps/web/src/lib/modules/plants/api.ts | 2 +- .../apps/web/src/lib/quick-input/registry.ts | 2 +- .../apps/web/src/lib/splitscreen/registry.ts | 2 +- .../apps/web/src/lib/triggers/event-bridge.ts | 2 +- .../apps/web/src/lib/types/dashboard.test.ts | 2 +- apps/mana/apps/web/src/lib/types/dashboard.ts | 6 +- .../apps/web/src/routes/(app)/+page.svelte | 45 +++- .../web/src/routes/(app)/body/+layout.svelte | 6 +- .../web/src/routes/(app)/credits/+page.svelte | 2 +- .../(app)/{nutriphi => food}/+page.svelte | 24 +-- .../{nutriphi => food}/[id]/+page.svelte | 14 +- .../(app)/{nutriphi => food}/add/+page.svelte | 16 +- .../{nutriphi => food}/goals/+page.svelte | 8 +- .../{nutriphi => food}/history/+page.svelte | 12 +- .../web/src/routes/status/+page.server.ts | 2 +- apps/nutriphi/CLAUDE.md | 17 -- apps/nutriphi/package.json | 24 --- apps/photos/CLAUDE.md | 4 +- cloudflared-config.yml | 2 +- docker-compose.dev.yml | 2 +- docker-compose.macmini.yml | 14 +- .../grafana/dashboards/master-overview.json | 4 +- .../grafana/dashboards/system-overview.json | 4 +- docker/nginx/landings.conf | 6 +- docker/prometheus/prometheus.yml | 4 +- docs/ANALYTICS.md | 4 +- docs/ARCHITECTURE_MIGRATION_REPORT.md | 8 +- docs/CLOUDFLARE_DOMAINS.md | 8 +- docs/CLOUDFLARE_FALLBACK.md | 4 +- docs/EXTERNAL_SERVICES.md | 12 +- docs/EXTERNAL_SSD_OPPORTUNITIES.md | 2 +- docs/LOCAL_DEVELOPMENT.md | 4 +- docs/MICROSERVICES_API_OVERVIEW.md | 4 +- docs/MONETIZATION_REPORT.md | 2 +- docs/MONITORING.md | 2 +- docs/PORT_SCHEMA.md | 4 +- docs/PRE_LAUNCH_CLEANUP.md | 6 +- docs/PROJECT_OVERVIEW.md | 26 +-- docs/RECOMMENDED_SERVICES.md | 6 +- docs/REFACTORING_AUDIT_2026_04.md | 4 +- docs/TECHNOLOGY_AUDIT_2026_03.md | 10 +- docs/TECH_STACK_INDEPENDENCE.md | 6 +- docs/URL_SCHEMA.md | 4 +- docs/VERSIONING.md | 2 +- .../COMPANION_BRAIN_ARCHITECTURE.md | 30 +-- docs/future/MODULE_IDEAS.md | 8 +- .../frontend-consistency-improvements.md | 4 +- load-tests/api.js | 2 +- load-tests/web-apps.js | 2 +- package.json | 16 +- packages/credits/src/operations.ts | 4 +- .../src/components/GuestWelcomeModal.svelte | 4 +- packages/shared-branding/src/app-icons.ts | 8 +- packages/shared-branding/src/config.ts | 6 +- packages/shared-branding/src/index.ts | 2 +- .../{NutriPhiLogo.svelte => FoodLogo.svelte} | 2 +- packages/shared-branding/src/logos/index.ts | 2 +- packages/shared-branding/src/mana-apps.ts | 6 +- packages/shared-branding/src/types.ts | 2 +- packages/shared-types/src/ai-schemas.ts | 14 +- packages/shared-types/src/index.ts | 14 +- packages/shared-utils/src/analytics.ts | 20 +- packages/spiral-db/src/schema.ts | 2 +- scripts/audit-workspace-deps.mjs | 2 +- scripts/generate-env.mjs | 36 ++-- scripts/lighthouse-audit.sh | 2 +- scripts/mac-mini/build-landings.sh | 2 +- scripts/mac-mini/deploy-v2.sh | 2 +- scripts/mac-mini/ensure-containers-running.sh | 4 +- services/mana-auth/src/services/user-data.ts | 2 +- services/mana-media/CLAUDE.md | 2 +- .../apps/api/src/db/schema/media.schema.ts | 2 +- services/mana-sync/CLAUDE.md | 2 +- services/mana-sync/internal/backup/handler.go | 198 ++++++++++++++---- 196 files changed, 863 insertions(+), 719 deletions(-) rename .claude/plans/apps/{nutriphi => food}/MVP-PLAN.md (96%) rename .claude/plans/apps/{nutriphi => food}/README.md (73%) rename apps/api/src/modules/{nutriphi => food}/routes.ts (96%) create mode 100644 apps/food/CLAUDE.md rename apps/{nutriphi => food}/apps/landing/astro.config.mjs (80%) rename apps/{nutriphi => food}/apps/landing/package.json (96%) rename apps/{nutriphi => food}/apps/landing/src/layouts/Layout.astro (92%) rename apps/{nutriphi => food}/apps/landing/src/pages/index.astro (91%) rename apps/{nutriphi => food}/apps/landing/tailwind.config.cjs (100%) rename apps/{nutriphi => food}/apps/landing/tsconfig.json (100%) rename apps/{nutriphi => food}/apps/landing/wrangler.toml (71%) create mode 100644 apps/food/package.json rename apps/{nutriphi => food}/packages/shared/package.json (93%) rename apps/{nutriphi => food}/packages/shared/src/constants/index.ts (98%) rename apps/{nutriphi => food}/packages/shared/src/index.ts (100%) rename apps/{nutriphi => food}/packages/shared/src/types/index.ts (100%) rename apps/{nutriphi => food}/packages/shared/src/utils/index.ts (100%) rename apps/{nutriphi => food}/packages/shared/src/utils/utils.spec.ts (100%) rename apps/{nutriphi => food}/packages/shared/tsconfig.json (100%) rename apps/{nutriphi => food}/packages/shared/vitest.config.ts (100%) rename apps/mana/apps/landing/src/content/apps/{nutriphi-de.md => food-de.md} (61%) rename apps/mana/apps/landing/src/content/devlog/{2026-01-25-nutriphi-monitoring-infrastructure.md => 2026-01-25-food-monitoring-infrastructure.md} (95%) rename apps/mana/apps/landing/src/content/manascore/{2026-03-19-nutriphi.md => 2026-03-19-food.md} (85%) rename apps/mana/apps/web/src/lib/i18n/locales/{nutriphi => food}/de.json (98%) rename apps/mana/apps/web/src/lib/i18n/locales/{nutriphi => food}/en.json (98%) rename apps/mana/apps/web/src/lib/i18n/locales/{nutriphi => food}/es.json (98%) rename apps/mana/apps/web/src/lib/i18n/locales/{nutriphi => food}/fr.json (98%) rename apps/mana/apps/web/src/lib/i18n/locales/{nutriphi => food}/it.json (98%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/ListView.svelte (98%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/ai-schemas.test.ts (98%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/api.ts (92%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/collections.ts (84%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/constants.ts (89%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/index.ts (78%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/module.config.ts (54%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/mutations.test.ts (99%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/mutations.ts (96%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/queries.ts (96%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/quick-input-adapter.test.ts (100%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/quick-input-adapter.ts (96%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/stores/tags.svelte.ts (80%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/tools.ts (93%) rename apps/mana/apps/web/src/lib/modules/{nutriphi => food}/types.ts (98%) rename apps/mana/apps/web/src/routes/(app)/{nutriphi => food}/+page.svelte (95%) rename apps/mana/apps/web/src/routes/(app)/{nutriphi => food}/[id]/+page.svelte (97%) rename apps/mana/apps/web/src/routes/(app)/{nutriphi => food}/add/+page.svelte (98%) rename apps/mana/apps/web/src/routes/(app)/{nutriphi => food}/goals/+page.svelte (97%) rename apps/mana/apps/web/src/routes/(app)/{nutriphi => food}/history/+page.svelte (95%) delete mode 100644 apps/nutriphi/CLAUDE.md delete mode 100644 apps/nutriphi/package.json rename packages/shared-branding/src/logos/{NutriPhiLogo.svelte => FoodLogo.svelte} (78%) diff --git a/.claude/guidelines/hono-server.md b/.claude/guidelines/hono-server.md index 55d0989f6..3991cb39f 100644 --- a/.claude/guidelines/hono-server.md +++ b/.claude/guidelines/hono-server.md @@ -87,7 +87,7 @@ Only servers that need their own database use Drizzle. Most apps rely on mana-sy **Servers with Drizzle:** chat, todo, moodlit, context, plants, presi, traces, uload, wisekeep, news -**Servers without Drizzle (mana-sync only):** calendar, contacts, cards, mukke, nutriphi, picture, questions, storage +**Servers without Drizzle (mana-sync only):** calendar, contacts, cards, mukke, food, picture, questions, storage ## Running Servers diff --git a/.claude/plans/apps/nutriphi/MVP-PLAN.md b/.claude/plans/apps/food/MVP-PLAN.md similarity index 96% rename from .claude/plans/apps/nutriphi/MVP-PLAN.md rename to .claude/plans/apps/food/MVP-PLAN.md index 982fed33e..88e4d0fa6 100644 --- a/.claude/plans/apps/nutriphi/MVP-PLAN.md +++ b/.claude/plans/apps/food/MVP-PLAN.md @@ -1,11 +1,11 @@ -# NutriPhi MVP-Plan +# Food MVP-Plan > **Status:** Planung abgeschlossen > **Letzte Aktualisierung:** 2026-01-24 ## Vision -NutriPhi ist eine datenschutzorientierte, KI-gestützte Ernährungs-Tracking-Web-App für gesundheitsbewusste Menschen. Sie ermöglicht das Erfassen von Mahlzeiten per Foto oder Text und liefert vollständige Nährwertanalysen mit personalisierten Empfehlungen. +Food ist eine datenschutzorientierte, KI-gestützte Ernährungs-Tracking-Web-App für gesundheitsbewusste Menschen. Sie ermöglicht das Erfassen von Mahlzeiten per Foto oder Text und liefert vollständige Nährwertanalysen mit personalisierten Empfehlungen. --- @@ -113,7 +113,7 @@ NutriPhi ist eine datenschutzorientierte, KI-gestützte Ernährungs-Tracking-Web ### Projektstruktur ``` -apps/nutriphi/ +apps/food/ ├── apps/ │ ├── web/ # SvelteKit (mobile-optimiert) │ └── backend/ # NestJS API @@ -268,7 +268,7 @@ Output-Format: JSON mit strukturierten Nährwertdaten ``` ┌─────────────────────────────┐ -│ NutriPhi [+] [Profile] │ +│ Food [+] [Profile] │ ├─────────────────────────────┤ │ │ │ Heute: 1.450 / 2.000 kcal │ @@ -378,7 +378,7 @@ Output-Format: JSON mit strukturierten Nährwertdaten ### Wiederverwendbare Shared Components -| Komponente | Verwendung in NutriPhi | +| Komponente | Verwendung in Food | |------------|------------------------| | `HeroSection` | "Fotografiere dein Essen, verstehe was du isst" | | `FeatureSection` | KI-Analyse, Nährwerte, Tracking, Empfehlungen | @@ -392,14 +392,14 @@ Output-Format: JSON mit strukturierten Nährwertdaten ### Projektstruktur ``` -apps/nutriphi/apps/landing/ +apps/food/apps/landing/ ├── src/ │ ├── pages/ │ │ └── index.astro │ ├── layouts/ │ │ └── Layout.astro │ ├── styles/ -│ │ └── global.css # NutriPhi Theme (Grün) +│ │ └── global.css # Food Theme (Grün) │ └── components/ # Custom falls nötig ├── astro.config.mjs ├── package.json @@ -409,7 +409,7 @@ apps/nutriphi/apps/landing/ ### Farbschema (CSS Custom Properties) ```css -/* NutriPhi Theme - Gesundheit/Natur */ +/* Food Theme - Gesundheit/Natur */ --color-primary: #22C55E; /* Green 500 */ --color-primary-hover: #16A34A; /* Green 600 */ --color-secondary: #F97316; /* Orange 500 */ diff --git a/.claude/plans/apps/nutriphi/README.md b/.claude/plans/apps/food/README.md similarity index 73% rename from .claude/plans/apps/nutriphi/README.md rename to .claude/plans/apps/food/README.md index 8a5ca45f1..1ba0c10b7 100644 --- a/.claude/plans/apps/nutriphi/README.md +++ b/.claude/plans/apps/food/README.md @@ -1,8 +1,8 @@ -# NutriPhi - App-Planung +# Food - App-Planung ## Vision -NutriPhi ist eine KI-gestützte Ernährungs-Tracking-App, die es Nutzern ermöglicht, ihre Mahlzeiten per Foto, Text oder Sprache zu erfassen und automatisch Nährwertinformationen zu erhalten. +Food ist eine KI-gestützte Ernährungs-Tracking-App, die es Nutzern ermöglicht, ihre Mahlzeiten per Foto, Text oder Sprache zu erfassen und automatisch Nährwertinformationen zu erhalten. ## Planungsdokumente diff --git a/.claude/plans/local-first-and-service-extraction-overview.md b/.claude/plans/local-first-and-service-extraction-overview.md index ea82e35b5..e6105a37a 100644 --- a/.claude/plans/local-first-and-service-extraction-overview.md +++ b/.claude/plans/local-first-and-service-extraction-overview.md @@ -22,7 +22,7 @@ | 7 | **Presi** | decks, slides | Ja (Store + Pages umgeschrieben) | | 8 | **Picture** | images, boards, boardItems, tags, imageTags | Ja (Gallery + Boards umgeschrieben) | | 9 | **Inventar** | collections, items, locations, categories | Nein (local-store angelegt, Stores nutzen noch localStorage) | -| 10 | **NutriPhi** | meals, goals, favorites | Nein (local-store angelegt, Stores nutzen noch API) | +| 10 | **Food** | meals, goals, favorites | Nein (local-store angelegt, Stores nutzen noch API) | | 11 | **Planta** | plants, plantPhotos, wateringSchedules, wateringLogs | Nein (local-store angelegt, Stores nutzen noch API) | | 12 | **Storage** | files, folders, tags, fileTags | Nein (local-store angelegt, Stores nutzen noch API) | | 13 | **Chat** | conversations, messages, templates | Nein (local-store angelegt, Stores nutzen noch API) | @@ -108,7 +108,7 @@ Fertige Endpoints: Better Auth nativ, Auth (Register/Login/Logout/Validate), Gui ``` # Local-First (Phase 3) -ce51fd5f feat(apps): migrate Presi, Picture, Inventar, NutriPhi, Planta, Storage +ce51fd5f feat(apps): migrate Presi, Picture, Inventar, Food, Planta, Storage 8d880f1f feat(apps): migrate Chat, Questions, Mukke, Context, Photos a31ccc6c feat(apps): add local-store to SkilltTree and CityCorners 7754cf6e refactor(skilltree): replace custom idb → @manacore/local-store diff --git a/.claude/plans/local-first-architecture-migration.md b/.claude/plans/local-first-architecture-migration.md index b86325fa3..968d7ab40 100644 --- a/.claude/plans/local-first-architecture-migration.md +++ b/.claude/plans/local-first-architecture-migration.md @@ -333,7 +333,7 @@ Alle Web-Apps mit CRUD-Datenmodell wurden auf Local-First migriert: | **Picture** | images, boards, boardItems, tags, imageTags | Replicate API, Upload, Explore | | **Presi** | decks, slides | Share-Links | | **Inventar** | collections, items, locations, categories | Nur Sync | -| **NutriPhi** | meals, goals, favorites | AI-Analyse (Gemini), Recommendations | +| **Food** | meals, goals, favorites | AI-Analyse (Gemini), Recommendations | | **Planta** | plants, plantPhotos, wateringSchedules, wateringLogs | Foto-Upload, AI-Analyse (Gemini) | | **Storage** | files, folders, tags, fileTags | Datei-Upload/Download, Shares, Versionen | | **Chat** | conversations, messages, templates | LLM Streaming | diff --git a/.claude/plans/monorepo-restructure-migration.md b/.claude/plans/monorepo-restructure-migration.md index b3a92f6cc..3e065e4dc 100644 --- a/.claude/plans/monorepo-restructure-migration.md +++ b/.claude/plans/monorepo-restructure-migration.md @@ -46,7 +46,7 @@ manacore-monorepo/ │ │ │ └── landing/ │ │ └── packages/ │ │ -│ ├── nutriphi/ +│ ├── food/ │ │ ├── apps/ │ │ │ ├── backend/ │ │ │ ├── mobile/ @@ -134,7 +134,7 @@ mkdir -p services | `cards/` | `apps/cards/` | | `memoro/` | `apps/memoro/` | | `picture/` | `apps/picture/` | -| `nutriphi/` | `apps/nutriphi/` | +| `food/` | `apps/food/` | | `uload/` | `apps/uload/` | | `news/` | `apps/news/` | | `manacore/` | `apps/manacore/` | @@ -146,7 +146,7 @@ git mv maerchenzauber apps/maerchenzauber git mv cards apps/cards git mv memoro apps/memoro git mv picture apps/picture -git mv nutriphi apps/nutriphi +git mv food apps/food git mv uload apps/uload git mv news apps/news git mv manacore apps/manacore @@ -160,7 +160,7 @@ Projects with backends at root level need restructuring: | ------------------------ | ----------------------------- | | `apps/chat/backend/` | `apps/chat/apps/backend/` | | `apps/cards/backend/` | `apps/cards/apps/backend/` | -| `apps/nutriphi/backend/` | `apps/nutriphi/apps/backend/` | +| `apps/food/backend/` | `apps/food/apps/backend/` | ```bash # Chat: move backend into apps/ @@ -171,9 +171,9 @@ git mv apps/chat/backend apps/chat/apps/backend mkdir -p apps/cards/apps git mv apps/cards/backend apps/cards/apps/backend -# Nutriphi: move backend into apps/ -mkdir -p apps/nutriphi/apps -git mv apps/nutriphi/backend apps/nutriphi/apps/backend +# Food: move backend into apps/ +mkdir -p apps/food/apps +git mv apps/food/backend apps/food/apps/backend ``` ### 2.3 Move mana-core-auth to services/ @@ -231,7 +231,7 @@ No changes needed - turbo.json uses task definitions, not paths. "picture:dev": "turbo run dev --filter=@picture/*...", "uload:dev": "turbo run dev --filter=@uload/*...", "chat:dev": "turbo run dev --filter=@chat/*...", - "nutriphi:dev": "turbo run dev --filter=@nutriphi/*...", + "food:dev": "turbo run dev --filter=@food/*...", "news:dev": "turbo run dev --filter=@news/*...", "dev:maerchenzauber:web": "pnpm --filter @maerchenzauber/web dev", @@ -266,11 +266,11 @@ No changes needed - turbo.json uses task definitions, not paths. "dev:chat:backend": "pnpm --filter @chat/backend start:dev", "dev:chat:app": "turbo run dev --filter=@chat/web --filter=@chat/backend", - "dev:nutriphi:mobile": "pnpm --filter @nutriphi/mobile dev", - "dev:nutriphi:web": "pnpm --filter @nutriphi/web dev", - "dev:nutriphi:landing": "pnpm --filter @nutriphi/landing dev", - "dev:nutriphi:backend": "pnpm --filter @nutriphi/backend start:dev", - "dev:nutriphi:app": "turbo run dev --filter=@nutriphi/web --filter=@nutriphi/backend", + "dev:food:mobile": "pnpm --filter @food/mobile dev", + "dev:food:web": "pnpm --filter @food/web dev", + "dev:food:landing": "pnpm --filter @food/landing dev", + "dev:food:backend": "pnpm --filter @food/backend start:dev", + "dev:food:app": "turbo run dev --filter=@food/web --filter=@food/backend", "dev:news:mobile": "pnpm --filter @news/mobile dev", "dev:news:web": "pnpm --filter @news/web dev", diff --git a/.claude/plans/same-origin-unified-app-migration.md b/.claude/plans/same-origin-unified-app-migration.md index 4d5939bea..24d8d9cdb 100644 --- a/.claude/plans/same-origin-unified-app-migration.md +++ b/.claude/plans/same-origin-unified-app-migration.md @@ -29,7 +29,7 @@ | 12 | **uload** | queries (umfangreich), types | 3 routes (dashboard, links, analytics) | **Done** | | 13 | **context** | queries, types | 5 routes (dashboard, spaces, documents) | **Done** | | 14 | **questions** | queries, types | 4 routes (list, collections, new, detail) | **Done** | -| 15 | **nutriphi** | queries, types, constants | 4 routes (dashboard, add, history, goals) | **Done** | +| 15 | **food** | queries, types, constants | 4 routes (dashboard, add, history, goals) | **Done** | | 16 | **storage** | stores (2), queries, types | 7 routes (files, folders, favorites, search, trash) | **Done** | | 17 | **cards** | stores (2), components (2), queries | 6 routes (decks, study, explore, progress) | **Done** | | 18 | **contacts** | stores (3), queries, types | 3 routes (list, detail/edit) | **Done** | @@ -109,7 +109,7 @@ Alle Apps die zum ManaCore-Ökosystem gehören und von Shared IndexedDB, Dashboa | **times** | Zeiterfassung, Dashboard-Widget | | **context** | Dokument-Workspace | | **questions** | Research-Assistant | -| **nutriphi** | Ernährung | +| **food** | Ernährung | | **planta** | Pflanzenpflege | | **uload** | URL-Shortener, Links | | **calc** | Rechner | @@ -259,7 +259,7 @@ src/lib/modules/ ├── times/ ├── context/ ├── questions/ -├── nutriphi/ +├── food/ ├── planta/ ├── uload/ ├── calc/ @@ -367,7 +367,7 @@ src/routes/ │ ├── times/+page.svelte │ ├── context/+page.svelte │ ├── questions/+page.svelte -│ ├── nutriphi/+page.svelte +│ ├── food/+page.svelte │ ├── planta/+page.svelte │ ├── uload/+page.svelte │ ├── calc/+page.svelte @@ -475,7 +475,7 @@ import { CITYCORNERS_COLLECTIONS } from '$lib/modules/citycorners/collections'; import { TIMES_COLLECTIONS } from '$lib/modules/times/collections'; import { CONTEXT_COLLECTIONS } from '$lib/modules/context/collections'; import { QUESTIONS_COLLECTIONS } from '$lib/modules/questions/collections'; -import { NUTRIPHI_COLLECTIONS } from '$lib/modules/nutriphi/collections'; +import { FOOD_COLLECTIONS } from '$lib/modules/food/collections'; import { PLANTA_COLLECTIONS } from '$lib/modules/planta/collections'; import { ULOAD_COLLECTIONS } from '$lib/modules/uload/collections'; import { CALC_COLLECTIONS } from '$lib/modules/calc/collections'; @@ -521,7 +521,7 @@ db.version(1).stores({ ...TIMES_COLLECTIONS, ...CONTEXT_COLLECTIONS, ...QUESTIONS_COLLECTIONS, - ...NUTRIPHI_COLLECTIONS, + ...FOOD_COLLECTIONS, ...PLANTA_COLLECTIONS, ...ULOAD_COLLECTIONS, ...CALC_COLLECTIONS, @@ -578,7 +578,7 @@ export const SYNC_APP_MAP: Record = { times: ['clients', 'tProjects', 'timeEntries', 'tTags', 'tTemplates', 'tSettings'], context: ['spaces', 'documents'], questions: ['qCollections', 'questions', 'answers'], - nutriphi: ['meals', 'goals', 'nFavorites'], + food: ['meals', 'goals', 'nFavorites'], planta: ['plants', 'plantPhotos', 'wateringSchedules', 'wateringLogs'], uload: ['links', 'uTags', 'uFolders', 'linkTags'], calc: ['calculations', 'savedFormulas'], @@ -769,7 +769,7 @@ Nach Komplexität sortiert — einfachste zuerst, um den Prozess einzuüben: | 12 | **uload** | 12 | 10 | Mittel | Hat Backend-Server | | 13 | **context** | 10 | 15 | Mittel | Mittlere Komplexität | | 14 | **questions** | 10 | 14 | Mittel | Hat Backend-API | -| 15 | **nutriphi** | 12 | 10 | Mittel | Hat Backend-Server | +| 15 | **food** | 12 | 10 | Mittel | Hat Backend-Server | | 16 | **storage** | 12 | 15 | Mittel | Hat Backend + MinIO | | 17 | **cards** | 12 | 18 | Mittel | Hat Backend-Server | | 18 | **contacts** | 23 | 39 | Komplex | Backend + Import/Export | diff --git a/.env.development b/.env.development index 8c3af6ca2..2e646100a 100644 --- a/.env.development +++ b/.env.development @@ -144,7 +144,7 @@ UMAMI_WEBSITE_ID_CALENDAR_LANDING=84862d98-727e-4e25-8645-639241dd1544 UMAMI_WEBSITE_ID_CLOCK_LANDING=0332b471-a022-46af-a726-0f45932bfd58 UMAMI_WEBSITE_ID_PICTURE_LANDING=d3ac98e6-0d1a-47a3-a218-2a81fff596bd UMAMI_WEBSITE_ID_TODO_LANDING=538eb4b6-2241-45a3-994d-cdb9bdb0c250 -UMAMI_WEBSITE_ID_NUTRIPHI_LANDING=15610d03-b280-4b92-9c71-0ef89c23202b +UMAMI_WEBSITE_ID_FOOD_LANDING=15610d03-b280-4b92-9c71-0ef89c23202b UMAMI_WEBSITE_ID_PRESI_LANDING=dd485016-0077-47b9-9f59-ab2c6c1730ee UMAMI_WEBSITE_ID_MUKKE_LANDING=b2c9ab34-3c53-4463-9dde-1ecf098886a5 @@ -219,18 +219,18 @@ PICTURE_APP_ID=picture-app PICTURE_MANA_SERVICE_KEY= # ============================================ -# NUTRIPHI PROJECT +# FOOD PROJECT # ============================================ -NUTRIPHI_BACKEND_PORT=3023 -NUTRIPHI_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform -NUTRIPHI_APP_ID=nutriphi +FOOD_BACKEND_PORT=3023 +FOOD_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform +FOOD_APP_ID=food # Google Gemini API for food image analysis GEMINI_API_KEY=AIzaSyBR9iP74hlo-mhI-Cl4QEvKprRzPPMb-GA # S3 Storage (uses MinIO locally via shared S3_* variables) -NUTRIPHI_S3_PUBLIC_URL=http://localhost:9000/nutriphi-storage +FOOD_S3_PUBLIC_URL=http://localhost:9000/food-storage # ============================================ # ZITARE PROJECT @@ -472,5 +472,5 @@ GPU_API_KEY=sk-gpu-cf483ede1e05e28fba5e56c94cd3c24e7c245e57816d3e86 GPU_SERVER_URL=https://gpu.mana.how GPU_SERVER_LAN_URL=http://192.168.178.11 -# Vision Model for NutriPhi + Planta (local, replaces Google Gemini) +# Vision Model for Food + Planta (local, replaces Google Gemini) VISION_MODEL=ollama/gemma3:12b diff --git a/.env.macmini.example b/.env.macmini.example index a0b2c73a6..6634c71a5 100644 --- a/.env.macmini.example +++ b/.env.macmini.example @@ -110,7 +110,7 @@ AZURE_STORAGE_ACCOUNT_NAME= AZURE_STORAGE_ACCOUNT_KEY= # ─── Google Gemini ────────────────────────────────────────── -# Used by mana-llm + several Gemini-Vision modules (planta, nutriphi). +# Used by mana-llm + several Gemini-Vision modules (planta, food). GEMINI_API_KEY= # ─── Service-to-service auth keys ─────────────────────────── diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6b39525d0..4def30b0c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -98,7 +98,7 @@ updates: - "automated" - package-ecosystem: "docker" - directory: "/apps/nutriphi/apps/backend" + directory: "/apps/food/apps/backend" schedule: interval: "weekly" open-pull-requests-limit: 5 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8c24bf34..2685c8ab0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,8 +71,8 @@ jobs: storage-backend: ${{ steps.changes.outputs.storage-backend }} storage-web: ${{ steps.changes.outputs.storage-web }} telegram-stats-bot: ${{ steps.changes.outputs.telegram-stats-bot }} - nutriphi-backend: ${{ steps.changes.outputs.nutriphi-backend }} - nutriphi-web: ${{ steps.changes.outputs.nutriphi-web }} + food-backend: ${{ steps.changes.outputs.food-backend }} + food-web: ${{ steps.changes.outputs.food-web }} skilltree-web: ${{ steps.changes.outputs.skilltree-web }} any-changes: ${{ steps.changes.outputs.any-changes }} steps: @@ -109,8 +109,8 @@ jobs: echo "storage-backend=true" >> $GITHUB_OUTPUT echo "storage-web=true" >> $GITHUB_OUTPUT echo "telegram-stats-bot=true" >> $GITHUB_OUTPUT - echo "nutriphi-backend=true" >> $GITHUB_OUTPUT - echo "nutriphi-web=true" >> $GITHUB_OUTPUT + echo "food-backend=true" >> $GITHUB_OUTPUT + echo "food-web=true" >> $GITHUB_OUTPUT echo "skilltree-web=true" >> $GITHUB_OUTPUT echo "any-changes=true" >> $GITHUB_OUTPUT exit 0 @@ -151,8 +151,8 @@ jobs: echo "storage-backend=true" >> $GITHUB_OUTPUT echo "storage-web=true" >> $GITHUB_OUTPUT echo "telegram-stats-bot=true" >> $GITHUB_OUTPUT - echo "nutriphi-backend=true" >> $GITHUB_OUTPUT - echo "nutriphi-web=true" >> $GITHUB_OUTPUT + echo "food-backend=true" >> $GITHUB_OUTPUT + echo "food-web=true" >> $GITHUB_OUTPUT echo "skilltree-web=true" >> $GITHUB_OUTPUT echo "any-changes=true" >> $GITHUB_OUTPUT exit 0 @@ -341,20 +341,20 @@ jobs: echo "telegram-stats-bot=false" >> $GITHUB_OUTPUT fi - # nutriphi-backend - NUTRIPHI_BACKEND_CHANGED=$(check_pattern "apps/nutriphi/apps/backend/|apps/nutriphi/packages/") - if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$NUTRIPHI_BACKEND_CHANGED" == "true" ]; then - echo "nutriphi-backend=true" >> $GITHUB_OUTPUT + # food-backend + FOOD_BACKEND_CHANGED=$(check_pattern "apps/food/apps/backend/|apps/food/packages/") + if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$FOOD_BACKEND_CHANGED" == "true" ]; then + echo "food-backend=true" >> $GITHUB_OUTPUT else - echo "nutriphi-backend=false" >> $GITHUB_OUTPUT + echo "food-backend=false" >> $GITHUB_OUTPUT fi - # nutriphi-web - NUTRIPHI_WEB_CHANGED=$(check_pattern "apps/nutriphi/apps/web/|apps/nutriphi/packages/") - if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$SHARED_UI_CHANGED" == "true" ] || [ "$SHARED_WEB_CHANGED" == "true" ] || [ "$NUTRIPHI_WEB_CHANGED" == "true" ]; then - echo "nutriphi-web=true" >> $GITHUB_OUTPUT + # food-web + FOOD_WEB_CHANGED=$(check_pattern "apps/food/apps/web/|apps/food/packages/") + if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$SHARED_UI_CHANGED" == "true" ] || [ "$SHARED_WEB_CHANGED" == "true" ] || [ "$FOOD_WEB_CHANGED" == "true" ]; then + echo "food-web=true" >> $GITHUB_OUTPUT else - echo "nutriphi-web=false" >> $GITHUB_OUTPUT + echo "food-web=false" >> $GITHUB_OUTPUT fi # skilltree-backend: REMOVED — migrated to local-first @@ -406,8 +406,8 @@ jobs: echo "| storage-backend | ${{ steps.changes.outputs.storage-backend }} |" >> $GITHUB_STEP_SUMMARY echo "| storage-web | ${{ steps.changes.outputs.storage-web }} |" >> $GITHUB_STEP_SUMMARY echo "| telegram-stats-bot | ${{ steps.changes.outputs.telegram-stats-bot }} |" >> $GITHUB_STEP_SUMMARY - echo "| nutriphi-backend | ${{ steps.changes.outputs.nutriphi-backend }} |" >> $GITHUB_STEP_SUMMARY - echo "| nutriphi-web | ${{ steps.changes.outputs.nutriphi-web }} |" >> $GITHUB_STEP_SUMMARY + echo "| food-backend | ${{ steps.changes.outputs.food-backend }} |" >> $GITHUB_STEP_SUMMARY + echo "| food-web | ${{ steps.changes.outputs.food-web }} |" >> $GITHUB_STEP_SUMMARY echo "| skilltree-backend | removed |" >> $GITHUB_STEP_SUMMARY echo "| skilltree-web | ${{ steps.changes.outputs.skilltree-web }} |" >> $GITHUB_STEP_SUMMARY echo "| zitare-backend | removed |" >> $GITHUB_STEP_SUMMARY @@ -1173,11 +1173,11 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - build-nutriphi-backend: - name: Build nutriphi-backend + build-food-backend: + name: Build food-backend runs-on: ubuntu-latest needs: detect-changes - if: needs.detect-changes.outputs.nutriphi-backend == 'true' + if: needs.detect-changes.outputs.food-backend == 'true' steps: - uses: actions/checkout@v4 - uses: docker/setup-qemu-action@v3 @@ -1190,23 +1190,23 @@ jobs: - uses: docker/metadata-action@v5 id: meta with: - images: ghcr.io/${{ github.repository_owner }}/nutriphi-backend + images: ghcr.io/${{ github.repository_owner }}/food-backend tags: type=raw,value=latest - uses: docker/build-push-action@v5 with: context: . - file: apps/nutriphi/apps/backend/Dockerfile + file: apps/food/apps/backend/Dockerfile platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max - build-nutriphi-web: - name: Build nutriphi-web + build-food-web: + name: Build food-web runs-on: ubuntu-latest needs: detect-changes - if: needs.detect-changes.outputs.nutriphi-web == 'true' + if: needs.detect-changes.outputs.food-web == 'true' steps: - uses: actions/checkout@v4 - uses: docker/setup-qemu-action@v3 @@ -1219,12 +1219,12 @@ jobs: - uses: docker/metadata-action@v5 id: meta with: - images: ghcr.io/${{ github.repository_owner }}/nutriphi-web + images: ghcr.io/${{ github.repository_owner }}/food-web tags: type=raw,value=latest - uses: docker/build-push-action@v5 with: context: . - file: apps/nutriphi/apps/web/Dockerfile + file: apps/food/apps/web/Dockerfile platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/README.md b/README.md index a11f2aefc..4809da78e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Monorepo containing all Mana projects — a self-hosted multi-app ecosystem with | **storage** | Cloud storage | NestJS backend, SvelteKit web | | **questions** | Q&A with web search | SvelteKit web | | **skilltree** | Skill tree visualization | NestJS backend, SvelteKit web | -| **nutriphi** | Nutrition tracking | NestJS backend, SvelteKit web | +| **food** | Nutrition tracking | NestJS backend, SvelteKit web | | **citycorners** | City guide | NestJS backend, SvelteKit web, Astro landing | | **presi** | Presentation tool | NestJS backend, SvelteKit web | | **photos** | Photo management | NestJS backend, SvelteKit web | diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 5c29cf259..553108ded 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -25,7 +25,7 @@ import { pictureRoutes } from './modules/picture/routes'; import { storageRoutes } from './modules/storage/routes'; import { todoRoutes } from './modules/todo/routes'; import { plantsRoutes } from './modules/plants/routes'; -import { nutriphiRoutes } from './modules/nutriphi/routes'; +import { foodRoutes } from './modules/food/routes'; import { guidesRoutes } from './modules/guides/routes'; import { moodlitRoutes } from './modules/moodlit/routes'; import { newsRoutes } from './modules/news/routes'; @@ -57,7 +57,7 @@ app.route('/api/v1/picture', pictureRoutes); app.route('/api/v1/storage', storageRoutes); app.route('/api/v1/todo', todoRoutes); app.route('/api/v1/plants', plantsRoutes); -app.route('/api/v1/nutriphi', nutriphiRoutes); +app.route('/api/v1/food', foodRoutes); app.route('/api/v1/guides', guidesRoutes); app.route('/api/v1/moodlit', moodlitRoutes); app.route('/api/v1/news', newsRoutes); diff --git a/apps/api/src/modules/nutriphi/routes.ts b/apps/api/src/modules/food/routes.ts similarity index 96% rename from apps/api/src/modules/nutriphi/routes.ts rename to apps/api/src/modules/food/routes.ts index b4fa7b152..8e02c359a 100644 --- a/apps/api/src/modules/nutriphi/routes.ts +++ b/apps/api/src/modules/food/routes.ts @@ -1,5 +1,5 @@ /** - * NutriPhi module — Meal analysis (Gemini Vision via mana-llm) + recommendations. + * Food module — Meal analysis (Gemini Vision via mana-llm) + recommendations. * * CRUD for meals, goals, favorites is handled by mana-sync. This module * owns the server-only operations: photo upload to mana-media, structured @@ -94,7 +94,7 @@ routes.post('/photos/upload', async (c) => { try { const { uploadImageToMedia } = await import('../../lib/media'); const buffer = await file.arrayBuffer(); - const result = await uploadImageToMedia(buffer, file.name, { app: 'nutriphi', userId }); + const result = await uploadImageToMedia(buffer, file.name, { app: 'food', userId }); return c.json( { @@ -106,7 +106,7 @@ routes.post('/photos/upload', async (c) => { 201 ); } catch (err) { - logger.error('nutriphi.upload_failed', { + logger.error('food.upload_failed', { error: err instanceof Error ? err.message : String(err), }); return c.json({ error: 'Upload failed' }, 500); @@ -141,7 +141,7 @@ routes.post('/analysis/photo', async (c) => { }); return c.json(envelope(object)); } catch (err) { - logger.error('nutriphi.photo_analysis_failed', { + logger.error('food.photo_analysis_failed', { error: err instanceof Error ? err.message : String(err), }); return c.json({ error: 'Analysis failed' }, 500); @@ -173,7 +173,7 @@ routes.post('/analysis/text', async (c) => { }); return c.json(envelope(object)); } catch (err) { - logger.error('nutriphi.text_analysis_failed', { + logger.error('food.text_analysis_failed', { error: err instanceof Error ? err.message : String(err), }); return c.json({ error: 'Analysis failed' }, 500); @@ -218,4 +218,4 @@ routes.post('/recommendations/generate', async (c) => { return c.json({ recommendations: hints }); }); -export { routes as nutriphiRoutes }; +export { routes as foodRoutes }; diff --git a/apps/api/src/modules/plants/routes.ts b/apps/api/src/modules/plants/routes.ts index d82a387c4..0d7c19612 100644 --- a/apps/api/src/modules/plants/routes.ts +++ b/apps/api/src/modules/plants/routes.ts @@ -5,7 +5,7 @@ * module owns the server-only operations: photo upload to mana-media * and structured plant identification via the Vercel AI SDK * (`generateObject`) using the shared PlantIdentificationSchema in - * @mana/shared-types. See nutriphi/routes.ts for the rationale behind + * @mana/shared-types. See food/routes.ts for the rationale behind * the AI SDK + Zod approach. */ @@ -21,20 +21,20 @@ import { import { logger, type AuthVariables } from '@mana/shared-hono'; const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025'; -// See nutriphi/routes.ts for the rationale on the default model and +// See food/routes.ts for the rationale on the default model and // the /v1 base URL. const VISION_MODEL = process.env.VISION_MODEL || 'ollama/gemma3:4b'; const llm = createOpenAICompatible({ name: 'mana-llm', baseURL: `${LLM_URL}/v1`, - // See nutriphi/routes.ts for the rationale on this flag. + // See food/routes.ts for the rationale on this flag. supportsStructuredOutputs: true, }); const IDENTIFICATION_PROMPT = `Du bist ein Pflanzenexperte. Analysiere das Pflanzenfoto und liefere eine strukturierte Identifikation mit lateinischem Namen, deutschen Trivialnamen, Pflegehinweisen und einer Gesundheitseinschätzung. Antworte auf Deutsch.`; -// See nutriphi/routes.ts for the rationale: this is a forward-compat +// See food/routes.ts for the rationale: this is a forward-compat // hint for Anthropic prompt caching, ignored by Gemini today. const SYSTEM_CACHE_HINT = { anthropic: { cacheControl: { type: 'ephemeral' as const } }, diff --git a/apps/docs/src/content/docs/architecture/storage.mdx b/apps/docs/src/content/docs/architecture/storage.mdx index ada630877..940c9b921 100644 --- a/apps/docs/src/content/docs/architecture/storage.mdx +++ b/apps/docs/src/content/docs/architecture/storage.mdx @@ -37,7 +37,7 @@ open http://localhost:9001 | `picture-storage` | Picture | AI-generated images | | `chat-storage` | Chat | User file uploads | | `cards-storage` | Cards | Card/deck assets | -| `nutriphi-storage` | NutriPhi | Meal photos | +| `food-storage` | Food | Meal photos | | `contacts-storage` | Contacts | Contact avatars | | `calendar-storage` | Calendar | Event attachments | diff --git a/apps/food/CLAUDE.md b/apps/food/CLAUDE.md new file mode 100644 index 000000000..b0a889582 --- /dev/null +++ b/apps/food/CLAUDE.md @@ -0,0 +1,17 @@ +# Food — consolidated into the unified Mana app + +This product was migrated into the unified Mana monorepo. The legacy +per-product `apps/food/apps/backend/` and `apps/food/apps/web/` +directories have been removed. Active code now lives in: + +- **Backend compute routes**: [`apps/api/src/modules/food/routes.ts`](../api/src/modules/food/routes.ts) (Gemini meal-photo analysis + text analysis + recommendations) +- **Frontend module** (local-first): [`apps/mana/apps/web/src/lib/modules/food/`](../mana/apps/web/src/lib/modules/food/) +- **Web route**: [`apps/mana/apps/web/src/routes/(app)/food/`](../mana/apps/web/src/routes/(app)/food/) +- **Landing page** (still standalone): [`apps/food/apps/landing/`](apps/landing/) + +For monorepo-wide patterns (auth, sync, encryption, services), see the +[root `CLAUDE.md`](../../CLAUDE.md) and [`apps/mana/CLAUDE.md`](../mana/CLAUDE.md). + +The previous standalone "Food Project Guide" was deleted in the +audit cleanup of 2026-04-09 — it had been inaccurate since the +consolidation. Pre-consolidation reference is in git history. diff --git a/apps/nutriphi/apps/landing/astro.config.mjs b/apps/food/apps/landing/astro.config.mjs similarity index 80% rename from apps/nutriphi/apps/landing/astro.config.mjs rename to apps/food/apps/landing/astro.config.mjs index 8e83a6058..26db04be5 100644 --- a/apps/nutriphi/apps/landing/astro.config.mjs +++ b/apps/food/apps/landing/astro.config.mjs @@ -3,5 +3,5 @@ import tailwind from '@astrojs/tailwind'; export default defineConfig({ integrations: [tailwind()], - site: 'https://nutriphi.mana.how', + site: 'https://food.mana.how', }); diff --git a/apps/nutriphi/apps/landing/package.json b/apps/food/apps/landing/package.json similarity index 96% rename from apps/nutriphi/apps/landing/package.json rename to apps/food/apps/landing/package.json index 34ce786ed..7df05768c 100644 --- a/apps/nutriphi/apps/landing/package.json +++ b/apps/food/apps/landing/package.json @@ -1,5 +1,5 @@ { - "name": "@nutriphi/landing", + "name": "@food/landing", "version": "0.2.0", "private": true, "type": "module", diff --git a/apps/nutriphi/apps/landing/src/layouts/Layout.astro b/apps/food/apps/landing/src/layouts/Layout.astro similarity index 92% rename from apps/nutriphi/apps/landing/src/layouts/Layout.astro rename to apps/food/apps/landing/src/layouts/Layout.astro index b4c8e481d..ca1a00847 100644 --- a/apps/nutriphi/apps/landing/src/layouts/Layout.astro +++ b/apps/food/apps/landing/src/layouts/Layout.astro @@ -6,7 +6,7 @@ interface Props { description?: string; } -const { title, description = 'NutriPhi - KI-gestützte Ernährungsanalyse per Foto' } = Astro.props; +const { title, description = 'Food - KI-gestützte Ernährungsanalyse per Foto' } = Astro.props; --- diff --git a/apps/nutriphi/apps/landing/src/pages/index.astro b/apps/food/apps/landing/src/pages/index.astro similarity index 91% rename from apps/nutriphi/apps/landing/src/pages/index.astro rename to apps/food/apps/landing/src/pages/index.astro index a84ee081d..8ef5eb601 100644 --- a/apps/nutriphi/apps/landing/src/pages/index.astro +++ b/apps/food/apps/landing/src/pages/index.astro @@ -71,7 +71,7 @@ const faqs = [ { question: 'Funktioniert die App mit allen Gerichten?', answer: - 'NutriPhi erkennt die meisten Gerichte weltweit, von klassischer deutscher Küche bis zu asiatischen Spezialitäten. Bei unbekannten Gerichten kannst du manuell nachhelfen.', + 'Food erkennt die meisten Gerichte weltweit, von klassischer deutscher Küche bis zu asiatischen Spezialitäten. Bei unbekannten Gerichten kannst du manuell nachhelfen.', }, { question: 'Wie funktioniert das Credit-System?', @@ -81,12 +81,12 @@ const faqs = [ { question: 'Gibt es eine kostenlose Version?', answer: - 'Ja! Du kannst NutriPhi kostenlos nutzen mit täglich 3 Foto-Analysen. Für mehr Analysen und Premium-Features gibt es Mana Credits.', + 'Ja! Du kannst Food kostenlos nutzen mit täglich 3 Foto-Analysen. Für mehr Analysen und Premium-Features gibt es Mana Credits.', }, ]; --- - +