chore: complete ManaCore → Mana rename (docs, go modules, plists, images)

Final cleanup of references missed in previous rename commits:

- Dockerfiles: PUBLIC_MANA_CORE_AUTH_URL → PUBLIC_MANA_AUTH_URL
- Go modules: github.com/manacore/* → github.com/mana/* (7 go.mod files)
- launchd plists: com.manacore.* → com.mana.* (14 files renamed + content)
- Image assets: *_Manacore_AI_Credits* → *_Mana_AI_Credits* (11 files)
- .env.example files: ManaCore brand strings → Mana
- .prettierignore: stale apps/manacore/* paths → apps/mana/*
- Markdown docs (CLAUDE.md, /docs/*): mana-core-auth → mana-auth, etc.

Excluded from rename: .claude/, devlog/, manascore/ (historical content),
client testimonials, blueprints, npm package refs (@mana-core/*).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-07 12:26:10 +02:00
parent 6f4667c2a3
commit 22a73943e1
307 changed files with 2408 additions and 4537 deletions

View file

@ -23,16 +23,16 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
- **Website-IDs**: `.env.development` (`UMAMI_WEBSITE_ID_*`)
- **Env-Verteilung**: `scripts/generate-env.mjs``PUBLIC_UMAMI_WEBSITE_ID`
- **Server-Side Injection**: `@manacore/shared-utils/analytics-server` (`injectUmamiAnalytics()`)
- **Client-Side Events**: `@manacore/shared-utils/analytics` (`trackEvent()`, etc.)
- **Server-Side Injection**: `@mana/shared-utils/analytics-server` (`injectUmamiAnalytics()`)
- **Client-Side Events**: `@mana/shared-utils/analytics` (`trackEvent()`, etc.)
### Neue App hinzufügen
1. Website in Umami anlegen (https://stats.mana.how)
2. `UMAMI_WEBSITE_ID_APPNAME=<uuid>` zu `.env.development` hinzufügen
3. `PUBLIC_UMAMI_WEBSITE_ID` Mapping in `scripts/generate-env.mjs` hinzufügen
4. `@manacore/shared-utils` als Dependency in der Web-App `package.json`
5. In `hooks.server.ts`: `import { injectUmamiAnalytics } from '@manacore/shared-utils/analytics-server'`
4. `@mana/shared-utils` als Dependency in der Web-App `package.json`
5. In `hooks.server.ts`: `import { injectUmamiAnalytics } from '@mana/shared-utils/analytics-server'`
6. `injectUmamiAnalytics(html)` im `transformPageChunk` aufrufen
7. `pnpm setup:env` ausführen
@ -45,7 +45,7 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
| App | Env-Variable |
|-----|-------------|
| Chat | `UMAMI_WEBSITE_ID_CHAT_LANDING` |
| Mana | `UMAMI_WEBSITE_ID_MANACORE_LANDING` |
| Mana | `UMAMI_WEBSITE_ID_MANA_LANDING` |
| Cards | `UMAMI_WEBSITE_ID_CARDS_LANDING` |
| Calendar | `UMAMI_WEBSITE_ID_CALENDAR_LANDING` |
| Clock | `UMAMI_WEBSITE_ID_CLOCK_LANDING` |
@ -60,7 +60,7 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
| App | Env-Variable |
|-----|-------------|
| Chat | `UMAMI_WEBSITE_ID_CHAT` |
| Mana | `UMAMI_WEBSITE_ID_MANACORE` |
| Mana | `UMAMI_WEBSITE_ID_MANA` |
| Todo | `UMAMI_WEBSITE_ID_TODO` |
| Calendar | `UMAMI_WEBSITE_ID_CALENDAR` |
| Clock | `UMAMI_WEBSITE_ID_CLOCK` |
@ -81,7 +81,7 @@ injectUmamiAnalytics(html) → <script defer src="stats.mana.how/script.js" d
## Automatisches Auth-Tracking
Auth-Events werden automatisch in `@manacore/shared-auth` (`src/core/authService.ts`) getrackt (alle Web-Apps):
Auth-Events werden automatisch in `@mana/shared-auth` (`src/core/authService.ts`) getrackt (alle Web-Apps):
| Event | Wann | Data |
|-------|------|------|
@ -98,7 +98,7 @@ Diese Events erfordern **keinen Code in den einzelnen Apps** — sie werden auto
## Landing Page Event Tracking
Alle Landing Pages binden `<Analytics />` aus `@manacore/shared-landing-ui` ein. Das Script trackt automatisch:
Alle Landing Pages binden `<Analytics />` aus `@mana/shared-landing-ui` ein. Das Script trackt automatisch:
| Event | Wann | Data |
|-------|------|------|
@ -121,7 +121,7 @@ Alle Landing Pages binden `<Analytics />` aus `@manacore/shared-landing-ui` ein.
### Installation
Die Analytics-Utilities sind in `@manacore/shared-utils` verfügbar:
Die Analytics-Utilities sind in `@mana/shared-utils` verfügbar:
```typescript
import {
@ -131,7 +131,7 @@ import {
LandingEvents,
ChatEvents,
// ...
} from '@manacore/shared-utils/analytics';
} from '@mana/shared-utils/analytics';
```
### Basis-Funktionen
@ -194,10 +194,10 @@ trackError('api_error', 'Failed to fetch data');
### AuthEvents
> **Hinweis**: Diese Helpers werden in der Regel nicht direkt verwendet. Das automatische Auth-Tracking in `@manacore/shared-auth` (siehe oben) deckt alle Login/Signup/Logout-Events ab.
> **Hinweis**: Diese Helpers werden in der Regel nicht direkt verwendet. Das automatische Auth-Tracking in `@mana/shared-auth` (siehe oben) deckt alle Login/Signup/Logout-Events ab.
```typescript
import { AuthEvents } from '@manacore/shared-utils/analytics';
import { AuthEvents } from '@mana/shared-utils/analytics';
AuthEvents.login('email'); // login { method: 'email' }
AuthEvents.login('google'); // login { method: 'google' }
@ -211,7 +211,7 @@ AuthEvents.passwordReset(); // password_reset
### LandingEvents
```typescript
import { LandingEvents } from '@manacore/shared-utils/analytics';
import { LandingEvents } from '@mana/shared-utils/analytics';
LandingEvents.ctaClick('hero'); // cta_click { location: 'hero' }
LandingEvents.ctaClick('pricing'); // cta_click { location: 'pricing' }
@ -227,7 +227,7 @@ LandingEvents.newsletterSubscribed(); // newsletter_subscribed
### ChatEvents
```typescript
import { ChatEvents } from '@manacore/shared-utils/analytics';
import { ChatEvents } from '@mana/shared-utils/analytics';
ChatEvents.conversationCreated(); // conversation_created
ChatEvents.messageSent('gpt-4'); // message_sent { model: 'gpt-4' }
@ -239,7 +239,7 @@ ChatEvents.conversationShared(); // conversation_shared
### PictureEvents
```typescript
import { PictureEvents } from '@manacore/shared-utils/analytics';
import { PictureEvents } from '@mana/shared-utils/analytics';
PictureEvents.imageGenerated('flux', 'realistic'); // image_generated { model: 'flux', style: 'realistic' }
PictureEvents.imageDownloaded(); // image_downloaded
@ -253,7 +253,7 @@ PictureEvents.generationFailed('timeout'); // generation_failed { reas
### TodoEvents
```typescript
import { TodoEvents } from '@manacore/shared-utils/analytics';
import { TodoEvents } from '@mana/shared-utils/analytics';
TodoEvents.taskCreated(true); // task_created { has_deadline: true }
TodoEvents.taskCompleted(); // task_completed
@ -271,7 +271,7 @@ TodoEvents.filterUsed('priority'); // filter_used { filter: 'priority' }
### CalendarEvents
```typescript
import { CalendarEvents } from '@manacore/shared-utils/analytics';
import { CalendarEvents } from '@mana/shared-utils/analytics';
CalendarEvents.eventCreated(true); // event_created { recurring: true }
CalendarEvents.eventUpdated(); // event_updated
@ -287,7 +287,7 @@ CalendarEvents.eventDragged(); // event_dragged
### ClockEvents
```typescript
import { ClockEvents } from '@manacore/shared-utils/analytics';
import { ClockEvents } from '@mana/shared-utils/analytics';
ClockEvents.timerStarted('pomodoro'); // timer_started { type: 'pomodoro' }
ClockEvents.timerCompleted('pomodoro', 1500); // timer_completed { type: 'pomodoro', duration_seconds: 1500 }
@ -299,7 +299,7 @@ ClockEvents.focusSessionCompleted(45); // focus_session_completed { du
### ContactsEvents
```typescript
import { ContactsEvents } from '@manacore/shared-utils/analytics';
import { ContactsEvents } from '@mana/shared-utils/analytics';
ContactsEvents.contactCreated(); // contact_created
ContactsEvents.contactUpdated(); // contact_updated
@ -315,7 +315,7 @@ ContactsEvents.searchPerformed(); // search_performed
### CardsEvents
```typescript
import { CardsEvents } from '@manacore/shared-utils/analytics';
import { CardsEvents } from '@mana/shared-utils/analytics';
CardsEvents.deckCreated(); // deck_created
CardsEvents.deckStudied(25); // deck_studied { cards: 25 }
@ -327,7 +327,7 @@ CardsEvents.aiCardsGenerated(10); // ai_cards_generated { count: 10 }
### SubscriptionEvents
```typescript
import { SubscriptionEvents } from '@manacore/shared-utils/analytics';
import { SubscriptionEvents } from '@mana/shared-utils/analytics';
SubscriptionEvents.pricingViewed(); // pricing_viewed
SubscriptionEvents.planSelected('pro'); // plan_selected { plan: 'pro' }
@ -342,7 +342,7 @@ SubscriptionEvents.trialEnded(true); // trial_ended { converted: tru
### AppEvents
```typescript
import { AppEvents } from '@manacore/shared-utils/analytics';
import { AppEvents } from '@mana/shared-utils/analytics';
AppEvents.appOpened('chat'); // app_opened { app: 'chat' }
AppEvents.themeChanged('dark'); // theme_changed { theme: 'dark' }
@ -361,7 +361,7 @@ AppEvents.shareClicked('twitter'); // share_clicked { platform: 'twitter'
```svelte
<script lang="ts">
import { LandingEvents } from '@manacore/shared-utils/analytics';
import { LandingEvents } from '@mana/shared-utils/analytics';
function handleCtaClick() {
LandingEvents.ctaClick('hero');
@ -382,7 +382,7 @@ AppEvents.shareClicked('twitter'); // share_clicked { platform: 'twitter'
---
<script>
import { LandingEvents } from '@manacore/shared-utils/analytics';
import { LandingEvents } from '@mana/shared-utils/analytics';
document.querySelectorAll('[data-cta]').forEach(btn => {
btn.addEventListener('click', () => {

View file

@ -24,7 +24,7 @@ Das Mini-Onboarding ergänzt das globale Mana-Onboarding mit app-spezifischen Ei
## Shared Package
**Package:** `@manacore/shared-ui`
**Package:** `@mana/shared-ui`
```
packages/shared-ui/src/onboarding/
@ -123,7 +123,7 @@ Mini-Onboarding-Daten werden in `deviceSettings` gespeichert:
```json
{
"dependencies": {
"@manacore/shared-ui": "workspace:*"
"@mana/shared-ui": "workspace:*"
}
}
```
@ -133,7 +133,7 @@ Mini-Onboarding-Daten werden in `deviceSettings` gespeichert:
**Datei:** `src/lib/stores/app-onboarding.svelte.ts`
```typescript
import { createAppOnboardingStore, type AppOnboardingStep } from '@manacore/shared-ui';
import { createAppOnboardingStore, type AppOnboardingStep } from '@mana/shared-ui';
import { userSettings } from './user-settings.svelte';
const steps: AppOnboardingStep[] = [
@ -171,7 +171,7 @@ export const appOnboarding = createAppOnboardingStore({
```svelte
<script>
import { appOnboarding } from '$lib/stores/app-onboarding.svelte';
import { MiniOnboardingModal } from '@manacore/shared-ui';
import { MiniOnboardingModal } from '@mana/shared-ui';
</script>
<!-- Am Ende des Layouts -->
@ -302,7 +302,7 @@ location.reload();
### DevTools
Im Browser LocalStorage unter `manacore_device_settings` → `apps.calendar` prüfen:
Im Browser LocalStorage unter `mana_device_settings` → `apps.calendar` prüfen:
- `onboarding_completed`: Boolean
- `onboarding_skipped`: Boolean (wenn übersprungen)
- Weitere Preferences auf Top-Level

View file

@ -24,7 +24,7 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
| Aspekt | Vorher (NestJS) | Nachher (Hono + Bun) | Δ |
|--------|----------------|---------------------|---|
| **Auth-Service** | 1 × mana-core-auth | 5 × Hono-Services | 84% LOC |
| **Auth-Service** | 1 × mana-auth | 5 × Hono-Services | 84% LOC |
| **Auth LOC** | ~20.000 | ~6.233 | 69% |
| **App-Backends** | 13 × NestJS | 14 × Hono Compute | 96% LOC |
| **App-Backend LOC** | ~40.000 | ~1.537 | 96% |
@ -64,11 +64,11 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
| Service | Port | LOC | Funktion | Ersetzt |
|---------|------|-----|----------|---------|
| **mana-auth** | 3001 | 1.931 | Auth, JWT, SSO, OIDC, 2FA, Orgs, Guilds | mana-core-auth (20k LOC NestJS) |
| **mana-credits** | 3061 | 2.199 | Credits, Gifts, Guild Pools, Stripe | Teil von mana-core-auth |
| **mana-user** | 3062 | 796 | Settings, Tags, Tag-Groups, Storage | Teil von mana-core-auth |
| **mana-subscriptions** | 3063 | 832 | Plans, Billing, Invoices, Stripe | Teil von mana-core-auth |
| **mana-analytics** | 3064 | 475 | Feedback, Voting, AI Titles | Teil von mana-core-auth |
| **mana-auth** | 3001 | 1.931 | Auth, JWT, SSO, OIDC, 2FA, Orgs, Guilds | mana-auth (20k LOC NestJS) |
| **mana-credits** | 3061 | 2.199 | Credits, Gifts, Guild Pools, Stripe | Teil von mana-auth |
| **mana-user** | 3062 | 796 | Settings, Tags, Tag-Groups, Storage | Teil von mana-auth |
| **mana-subscriptions** | 3063 | 832 | Plans, Billing, Invoices, Stripe | Teil von mana-auth |
| **mana-analytics** | 3064 | 475 | Feedback, Voting, AI Titles | Teil von mana-auth |
| **Σ Core** | | **6.233** | | **~20.000 LOC NestJS** |
### 2.2 App Compute Servers (Hono + Bun)
@ -162,7 +162,7 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
| Was | Dateien | LOC |
|-----|---------|-----|
| mana-core-auth (NestJS) | 169 | 36.123 |
| mana-auth (NestJS) | 169 | 36.123 |
| 13 App-Backends (NestJS) | ~700 | ~33.000 |
| 5 NestJS shared packages | ~30 | ~2.500 |
| mana-search (NestJS, ersetzt durch Go) | ~30 | ~2.000 |
@ -177,7 +177,7 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
|-----|---------|-----|
| 5 Hono Core Services | ~100 | 6.233 |
| 14 Hono Compute Servers | ~42 | 1.537 |
| @manacore/shared-hono | ~8 | 516 |
| @mana/shared-hono | ~8 | 516 |
| 19 × local-store.ts | 19 | ~1.900 |
| 19 × guest-seed.ts | 19 | ~1.200 |
| Store-Rewrites (Presi, Picture, Mukke, etc.) | ~20 | ~800 |
@ -236,7 +236,7 @@ Client → Hono Server → External API ← Nur für Compute
### 5.3 Vorher: 1 Auth-Monolith
```
mana-core-auth (NestJS, ~20.000 LOC)
mana-auth (NestJS, ~20.000 LOC)
├── Auth (Better Auth + 1.051-Zeilen Controller)
├── Credits (CreditsService + GuildPoolService + StripeService)
├── Gifts (GiftCodeService + Controller)
@ -307,7 +307,7 @@ mana-analytics (Hono, 475 LOC)
| DI | **Keine** (manuelle Instantiierung) | — |
| Auth | **Better Auth nativ** (fetch-basierter Handler) | — |
| Database | Drizzle ORM | ✓ (beibehalten) |
| Shared | **@manacore/shared-hono** | 1 package (auth, credits, health, admin, error) |
| Shared | **@mana/shared-hono** | 1 package (auth, credits, health, admin, error) |
---
@ -370,21 +370,21 @@ shared-gpu, nutriphi-database → 2 unb
| Aktion | Alt (Anzahl) | Neu | Diff |
|--------|-------------|-----|------|
| Feedback 3→1 | shared-feedback-{types,service,ui} | `@manacore/feedback` | -2 |
| Help 4→1 | shared-help-{types,content,ui,mobile} | `@manacore/help` | -3 |
| Subscription 2→1 | shared-subscription-{types,ui} | `@manacore/subscriptions` | -1 |
| Credits 3→1 | credit-operations, shared-credit-{service,ui} | `@manacore/credits` | -2 |
| Feedback 3→1 | shared-feedback-{types,service,ui} | `@mana/feedback` | -2 |
| 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 |
| NestJS-spezifisch entfernt | shared-nestjs-{auth,health,metrics,setup}, mana-core-nestjs-integration | — | -5 |
| **Gesamt** | **58** | **43** | **-15** |
Die neuen Packages nutzen sub-path Exports:
```typescript
import { CreditOperationType, CREDIT_COSTS } from '@manacore/credits';
import { CreditBalance } from '@manacore/credits/web';
import { FeedbackPage } from '@manacore/feedback';
import { HelpPage, getManaFAQs } from '@manacore/help';
import { SubscriptionPage } from '@manacore/subscriptions';
import { CreditOperationType, CREDIT_COSTS } from '@mana/credits';
import { CreditBalance } from '@mana/credits/web';
import { FeedbackPage } from '@mana/feedback';
import { HelpPage, getManaFAQs } from '@mana/help';
import { SubscriptionPage } from '@mana/subscriptions';
```
---
@ -397,17 +397,17 @@ Jede der 21 Web-Apps hatte eine eigene `auth.svelte.ts` mit ~350 Zeilen — fast
### 9.2 Loesung: createManaAuthStore Factory
Neue Factory in `@manacore/shared-auth-stores`:
Neue Factory in `@mana/shared-auth-stores`:
```typescript
// Vorher: 350 Zeilen pro App
import { browser } from '$app/environment';
import { initializeWebAuth, type UserData, type AuthServiceInterface } from '@manacore/shared-auth';
import { initializeWebAuth, type UserData, type AuthServiceInterface } from '@mana/shared-auth';
const DEV_BACKEND_URL = 'http://localhost:3007';
// ... 340 Zeilen SSO, Passkeys, 2FA, Token, Reset, etc.
// Nachher: 5 Zeilen pro App
import { createManaAuthStore } from '@manacore/shared-auth-stores';
import { createManaAuthStore } from '@mana/shared-auth-stores';
export const authStore = createManaAuthStore({ devBackendPort: 3007 });
```
@ -484,7 +484,7 @@ Loesung: Explizites `AuthServiceInterface` mit allen 37 Methoden. Alle 5 Apps ha
| RN 0.76 / 0.81 / 0.83 Mix | **RN 0.83.2** |
| expo-router 4.x / 6.x / 55.x Mix | **expo-router ~55.0.5** |
Alle 7 Mobile-Apps (chat, context, manacore, cards, matrix, picture, traces) auf einheitlichem Expo SDK 55.
Alle 7 Mobile-Apps (chat, context, mana, cards, matrix, picture, traces) auf einheitlichem Expo SDK 55.
---

View file

@ -25,7 +25,7 @@ Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-
│ │ │
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐
│Supabase│ │Mana Core │ │ OpenAI │
│Supabase│ │Mana │ │ OpenAI │
│ DB │ │ (Auth) │ │ API │
└────────┘ └──────────┘ └──────────┘
```
@ -51,7 +51,7 @@ Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-
│ │ │
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐
│ PostgreSQL │ │Mana Core │ │ OpenAI │
│ PostgreSQL │ │Mana │ │ OpenAI │
│ (Self) │ │ (Auth) │ │ API │
└────────────┘ └──────────┘ └──────────┘
```
@ -67,7 +67,7 @@ Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-
```sql
CREATE TABLE decks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL, -- Mana Core User ID
user_id UUID NOT NULL, -- Mana User ID
title VARCHAR(255) NOT NULL,
description TEXT,
cover_image_url TEXT,
@ -369,7 +369,7 @@ docker run -d \
#### 1.2 Database Package erstellen
```bash
cd /Users/tillschneider/Documents/__00__Code/manacore-monorepo
cd /Users/tillschneider/Documents/__00__Code/mana-monorepo
mkdir -p packages/cards-database
cd packages/cards-database
pnpm init

View file

@ -240,10 +240,10 @@ pnpm setup:db:chat
### Per-Service Commands
```bash
# mana-core-auth
pnpm --filter mana-core-auth db:push
pnpm --filter mana-core-auth db:generate
pnpm --filter mana-core-auth db:migrate
# mana-auth
pnpm --filter mana-auth db:push
pnpm --filter mana-auth db:generate
pnpm --filter mana-auth db:migrate
# chat-backend
pnpm --filter @chat/server db:push
@ -325,7 +325,7 @@ Migrations run automatically after database creation:
# .github/workflows/cd-staging.yml
- name: Run database migrations
run: |
docker compose exec -T mana-core-auth pnpm run db:migrate
docker compose exec -T mana-auth pnpm run db:migrate
```
### Production Deployment
@ -336,7 +336,7 @@ Migrations run BEFORE deploying new code:
# .github/workflows/cd-production.yml
- name: Run database migrations
run: |
docker compose run --rm mana-core-auth pnpm run db:migrate
docker compose run --rm mana-auth pnpm run db:migrate
- name: Deploy with zero-downtime
run: |
@ -352,7 +352,7 @@ Advisory locks prevent multiple instances from running migrations simultaneously
### How It Works
```typescript
// services/mana-core-auth/src/db/migrate.ts
// services/mana-auth/src/db/migrate.ts
const MIGRATION_LOCK_ID = 987654321;
@ -377,7 +377,7 @@ await db.execute(sql`SELECT pg_advisory_unlock(${LOCK_ID})`);
| Service | Lock ID |
|---------|---------|
| mana-core-auth | `987654321` |
| mana-auth | `987654321` |
| chat-backend | (to be assigned) |
| todo-backend | (to be assigned) |
@ -530,7 +530,7 @@ src/db/migrations/
```bash
# Connect to database
docker compose exec -T postgres psql -U postgres -d manacore_auth
docker compose exec -T postgres psql -U postgres -d mana_platform
# Run down migration
\i /path/to/001_add_feature.down.sql
@ -594,7 +594,7 @@ docker compose exec -T postgres pg_isready -U postgres
echo $DATABASE_URL
# Manual connection test
docker compose exec -T postgres psql -U postgres -d manacore_auth -c "SELECT 1"
docker compose exec -T postgres psql -U postgres -d mana_platform -c "SELECT 1"
```
### Migration Fails in CI/CD
@ -631,7 +631,7 @@ docker compose exec -T postgres psql -U postgres -d manacore_auth -c "SELECT 1"
## Migration File Structure
```
services/mana-core-auth/
services/mana-auth/
├── src/db/
│ ├── schema/
│ │ ├── index.ts # Export all schemas

View file

@ -42,7 +42,7 @@ No manual action needed for regular deployments.
For immediate deployment without waiting for Watchtower:
```bash
ssh mana-server "cd ~/projects/manacore-monorepo && ./scripts/mac-mini/deploy.sh"
ssh mana-server "cd ~/projects/mana-monorepo && ./scripts/mac-mini/deploy.sh"
```
## Monitoring
@ -52,7 +52,7 @@ ssh mana-server "cd ~/projects/manacore-monorepo && ./scripts/mac-mini/deploy.sh
ssh mana-server "./scripts/mac-mini/status.sh"
# View logs
ssh mana-server "docker logs -f manacore-chat-backend"
ssh mana-server "docker logs -f mana-chat-backend"
# Health check
ssh mana-server "./scripts/mac-mini/health-check.sh"
@ -62,8 +62,8 @@ ssh mana-server "./scripts/mac-mini/health-check.sh"
| Service | URL | Container |
|---------|-----|-----------|
| Dashboard | https://mana.how | manacore-web |
| Auth API | https://auth.mana.how | mana-core-auth |
| Dashboard | https://mana.how | mana-web |
| Auth API | https://auth.mana.how | mana-auth |
| Chat | https://chat.mana.how | chat-web |
| Chat API | https://chat-api.mana.how | chat-backend |
| Todo | https://todo.mana.how | todo-web |
@ -79,7 +79,7 @@ ssh mana-server "./scripts/mac-mini/health-check.sh"
```bash
ssh mana-server
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
# Rollback to specific image tag
docker compose -f docker-compose.macmini.yml pull <service>:<tag>

View file

@ -1,6 +1,6 @@
# Development Scripts
Diese Dokumentation beschreibt die verfügbaren Entwicklungsbefehle im Manacore Monorepo.
Diese Dokumentation beschreibt die verfügbaren Entwicklungsbefehle im Mana Monorepo.
## Übersicht
@ -25,9 +25,9 @@ Diese Befehle starten alle Apps eines bestimmten Typs gleichzeitig:
| Befehl | Beschreibung | Apps |
| ------------------ | -------------------------- | ------------------------------------------ |
| `pnpm dev:web` | Startet alle Web-Apps | maerchenzauber, manacore, cards, memoro |
| `pnpm dev:landing` | Startet alle Landing Pages | maerchenzauber, manacore, cards, memoro |
| `pnpm dev:mobile` | Startet alle Mobile-Apps | maerchenzauber, manacore, cards, memoro |
| `pnpm dev:web` | Startet alle Web-Apps | maerchenzauber, mana, cards, memoro |
| `pnpm dev:landing` | Startet alle Landing Pages | maerchenzauber, mana, cards, memoro |
| `pnpm dev:mobile` | Startet alle Mobile-Apps | maerchenzauber, mana, cards, memoro |
### Beispiel
@ -49,7 +49,7 @@ Diese Befehle starten ein komplettes Projekt mit allen zugehörigen Apps und Dep
| Befehl | Beschreibung |
| ------------------------- | ------------------------------------------------------ |
| `pnpm maerchenzauber:dev` | Startet Maerchenzauber (Backend, Web, Mobile, Landing) |
| `pnpm manacore:dev` | Startet Manacore (Web, Mobile, Landing) |
| `pnpm mana:dev` | Startet Mana (Web, Mobile, Landing) |
| `pnpm cards:dev` | Startet Cards (Web, Mobile, Landing) |
| `pnpm memoro:dev` | Startet Memoro (Web, Mobile, Landing) |
@ -62,7 +62,7 @@ Für erweiterte Kontrolle kannst du Turbo-Filter direkt verwenden:
pnpm turbo run dev --filter=@storyteller/web
# Mehrere Apps kombinieren
pnpm turbo run dev --filter=manacore-web --filter=memoro-web
pnpm turbo run dev --filter=mana-web --filter=memoro-web
```
### Package-Namen Referenz
@ -72,7 +72,7 @@ Da die Package-Namen im Monorepo unterschiedlich sind, hier eine Übersicht:
| Projekt | Web | Landing | Mobile | Backend |
| -------------- | ------------------ | ---------------------- | --------------------- | ---------------------- |
| maerchenzauber | `@storyteller/web` | `@storyteller/landing` | `@storyteller/mobile` | `@storyteller/backend` |
| manacore | `manacore-web` | `manacore-landing` | `manacore` | - |
| mana | `mana-web` | `mana-landing` | `mana` | - |
| cards | `web` | `landing` | `cards` | - |
| memoro | `memoro-web` | `memoro-landing` | `memoro` | - |
@ -91,11 +91,11 @@ Wenn mehrere Apps gleichzeitig laufen, verwenden sie unterschiedliche Ports:
| App-Typ | Projekt | Standard-Port |
| ------- | -------------- | ------------- |
| Web | maerchenzauber | 5173 |
| Web | manacore | 5174 |
| Web | mana | 5174 |
| Web | cards | 5175 |
| Web | memoro | 5176 |
| Landing | maerchenzauber | 4321 |
| Landing | manacore | 4322 |
| Landing | mana | 4322 |
| Landing | cards | 4323 |
| Landing | memoro | 4324 |
| Backend | maerchenzauber | 3000 |

View file

@ -1,6 +1,6 @@
# Docker Guide
Comprehensive guide for working with Docker in the manacore-monorepo.
Comprehensive guide for working with Docker in the mana-monorepo.
## Table of Contents

View file

@ -1,6 +1,6 @@
# Environment Variables Guide
This document explains the centralized environment variable system for the Mana Core monorepo.
This document explains the centralized environment variable system for the Mana monorepo.
## Quick Start
@ -59,15 +59,15 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
| Variable | Description | Used By |
|----------|-------------|---------|
| `MANA_AUTH_URL` | Auth service URL | All apps |
| `JWT_PRIVATE_KEY` | JWT signing key | mana-core-auth |
| `JWT_PRIVATE_KEY` | JWT signing key | mana-auth |
| `JWT_PUBLIC_KEY` | JWT verification key | All backends |
| `POSTGRES_USER` | Database user | Docker, backends |
| `POSTGRES_PASSWORD` | Database password | Docker, backends |
| `REDIS_HOST` | Redis host | mana-core-auth |
| `REDIS_PORT` | Redis port | mana-core-auth |
| `REDIS_PASSWORD` | Redis password | mana-core-auth |
| `REDIS_HOST` | Redis host | mana-auth |
| `REDIS_PORT` | Redis port | mana-auth |
| `REDIS_PASSWORD` | Redis password | mana-auth |
### Mana Core Auth Service
### Mana Auth Service
| Variable | Description | Default |
|----------|-------------|---------|
@ -75,8 +75,8 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
| `MANA_AUTH_DATABASE_URL` | PostgreSQL connection string | - |
| `JWT_ACCESS_TOKEN_EXPIRY` | Access token TTL | `15m` |
| `JWT_REFRESH_TOKEN_EXPIRY` | Refresh token TTL | `7d` |
| `JWT_ISSUER` | JWT issuer claim | `manacore` |
| `JWT_AUDIENCE` | JWT audience claim | `manacore` |
| `JWT_ISSUER` | JWT issuer claim | `mana` |
| `JWT_AUDIENCE` | JWT audience claim | `mana` |
| `STRIPE_SECRET_KEY` | Stripe secret key | - |
| `STRIPE_PUBLISHABLE_KEY` | Stripe publishable key | - |
| `STRIPE_WEBHOOK_SECRET` | Stripe webhook secret | - |
@ -96,12 +96,12 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
| `CHAT_SUPABASE_URL` | Supabase project URL | - |
| `CHAT_SUPABASE_ANON_KEY` | Supabase anonymous key | - |
### Manacore Project
### Mana Project
| Variable | Description |
|----------|-------------|
| `MANACORE_SUPABASE_URL` | Supabase project URL |
| `MANACORE_SUPABASE_ANON_KEY` | Supabase anonymous key |
| `MANA_SUPABASE_URL` | Supabase project URL |
| `MANA_SUPABASE_ANON_KEY` | Supabase anonymous key |
### Cards Project

View file

@ -61,7 +61,7 @@ Each backend has an `instrument.ts` that initializes error tracking before the a
```typescript
// src/instrument.ts
import { initErrorTracking } from '@manacore/shared-error-tracking';
import { initErrorTracking } from '@mana/shared-error-tracking';
initErrorTracking({
serviceName: 'calendar-backend',
@ -73,7 +73,7 @@ initErrorTracking({
```typescript
// src/main.ts - instrument MUST be the first import
import './instrument';
import { bootstrapApp } from '@manacore/shared-nestjs-setup';
import { bootstrapApp } from '@mana/shared-nestjs-setup';
```
Set the DSN as environment variable:
@ -83,7 +83,7 @@ GLITCHTIP_DSN=https://<key>@glitchtip.mana.how/<project-id>
### Shared Package
`@manacore/shared-error-tracking` provides:
`@mana/shared-error-tracking` provides:
| Function | Purpose |
|----------|---------|
@ -94,7 +94,7 @@ GLITCHTIP_DSN=https://<key>@glitchtip.mana.how/<project-id>
| `setTag(key, value)` | Set extra context tags |
| `flush(timeout)` | Flush pending events before exit |
NestJS-specific (`@manacore/shared-error-tracking/nestjs`):
NestJS-specific (`@mana/shared-error-tracking/nestjs`):
| Export | Purpose |
|--------|---------|
@ -107,7 +107,7 @@ All 19 SvelteKit web apps have frontend error tracking via `hooks.client.ts`:
```typescript
// src/hooks.client.ts
import { initErrorTracking, handleSvelteError } from '@manacore/shared-error-tracking/browser';
import { initErrorTracking, handleSvelteError } from '@mana/shared-error-tracking/browser';
import type { HandleClientError } from '@sveltejs/kit';
initErrorTracking({
@ -140,7 +140,7 @@ const PUBLIC_GLITCHTIP_DSN = process.env.PUBLIC_GLITCHTIP_DSN || '';
PUBLIC_GLITCHTIP_DSN=https://<key>@glitchtip.mana.how/<project-id>
```
Browser-specific exports (`@manacore/shared-error-tracking/browser`):
Browser-specific exports (`@mana/shared-error-tracking/browser`):
| Function | Purpose |
|----------|---------|
@ -199,7 +199,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "glitchtip.settings")
django.setup()
from apps.organizations_ext.models import Organization
from apps.projects.models import Project, ProjectKey
org = Organization.objects.get(slug="manacore")
org = Organization.objects.get(slug="mana")
proj = Project.objects.create(name="new-app", organization=org, platform="node")
key = ProjectKey.objects.create(project=proj)
print(f"DSN: https://{key.public_key}@glitchtip.mana.how/{proj.id}")
@ -212,7 +212,7 @@ print(f"DSN: https://{key.public_key}@glitchtip.mana.how/{proj.id}")
1. Create project in GlitchTip (via UI or Django shell, `platform="node"`)
2. Copy DSN
3. Add `@manacore/shared-error-tracking` to backend package.json
3. Add `@mana/shared-error-tracking` to backend package.json
4. Create `src/instrument.ts`
5. Import `./instrument` as first line in `src/main.ts`
6. Set `GLITCHTIP_DSN` env variable

View file

@ -5,7 +5,7 @@
| App | Expo SDK | React Native | Router | Status |
|-----|----------|-------------|--------|--------|
| matrix | **55** | 0.83.2 | ~55.0.5 | Target version |
| manacore | 54 | 0.81.5 | ~6.0.15 | Needs upgrade |
| mana | 54 | 0.81.5 | ~6.0.15 | Needs upgrade |
| cards | 54 | 0.81.4 | ~6.0.10 | Needs upgrade |
| picture | 54 | 0.81.4 | ~6.0.10 | Needs upgrade |
| traces | 54 | 0.81.4 | ~6.0.0 | Needs upgrade |
@ -61,16 +61,16 @@ npx expo start -c
1. **traces** (simplest app, minimal deps)
2. **cards** (medium complexity)
3. **picture** (has image handling)
4. **manacore** (hub app, important)
4. **mana** (hub app, important)
5. **context** (SDK 52 → 55, bigger jump)
6. **chat** (SDK 52 → 55, most complex mobile app)
## Shared Dependencies to Update
All mobile apps share these workspace packages:
- `@manacore/shared-ui` (React Native components)
- `@manacore/shared-theme` (theme system)
- `@manacore/shared-auth` (auth service)
- `@mana/shared-ui` (React Native components)
- `@mana/shared-theme` (theme system)
- `@mana/shared-auth` (auth service)
These should be tested with React 19 / RN 0.83 before upgrading apps.

View file

@ -31,7 +31,7 @@ Dieser Bericht dokumentiert alle externen Dienste im Mana Monorepo und evaluiert
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ MANACORE EXTERNAL SERVICES MAP │
│ MANA EXTERNAL SERVICES MAP │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
@ -141,7 +141,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
**Gehostete Landing Pages:**
- `chat-landing.pages.dev`
- `picture-landing.pages.dev`
- `manacore-landing.pages.dev`
- `mana-landing.pages.dev`
- `cards-landing.pages.dev`
- `zitare-landing.pages.dev`
@ -149,7 +149,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
| Dienst | Zweck | Status |
|--------|-------|--------|
| **Prometheus** | Metrics Collection | In mana-core-auth integriert |
| **Prometheus** | Metrics Collection | In mana-auth integriert |
| **Grafana** | Dashboards | Konfigurierbar |
| **Winston** | Application Logging | In allen NestJS Services |
| **Umami** | Web Analytics | `UMAMI_APP_SECRET` |
@ -166,7 +166,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
| Redis | Docker | 6379 | ~256MB |
| MinIO | Docker | 9000/9001 | ~512MB |
| Ollama | Native | 11434 | ~4-8GB (je nach Modell) |
| mana-core-auth | Docker | 3001 | ~512MB |
| mana-auth | Docker | 3001 | ~512MB |
| mana-stt | Native Python | 3020 | ~2-4GB |
| Chat Backend | Docker | 3002 | ~512MB |
@ -240,7 +240,7 @@ const response = await fetch('http://localhost:8188/prompt', {
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: workflowJSON,
client_id: 'manacore'
client_id: 'mana'
})
});
```
@ -496,7 +496,7 @@ AZURE_OPENAI_API_KEY=xxx
```env
# PostgreSQL
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/{app}
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/{app}
# Redis
REDIS_URL=redis://localhost:6379
@ -514,7 +514,7 @@ S3_REGION=fsn1
### Auth & Payment
```env
# Mana Core Auth
# Mana Auth
MANA_AUTH_URL=http://localhost:3001
# Stripe

View file

@ -50,7 +50,7 @@ PATH=/opt/homebrew/bin:$PATH colima start
### 6. Testen ob File-Mounts funktionieren
```bash
docker run --rm -v ~/projects/manacore-monorepo/docker/alertmanager/alertmanager.yml:/test.yml:ro alpine head -3 /test.yml
docker run --rm -v ~/projects/mana-monorepo/docker/alertmanager/alertmanager.yml:/test.yml:ro alpine head -3 /test.yml
```
Sollte YAML-Inhalt zeigen, NICHT "Is a directory".
@ -58,7 +58,7 @@ Sollte YAML-Inhalt zeigen, NICHT "Is a directory".
### 7. Alle Container starten
```bash
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
docker compose -f docker-compose.macmini.yml up -d --no-build
```

View file

@ -250,7 +250,7 @@ PUBLIC_MANA_AUTH_URL_CLIENT: https://auth.mana.how
Before completing a rebase that touched configuration files:
- [ ] `_CLIENT` URLs use `https://*.staging.manacore.ai` format
- [ ] `_CLIENT` URLs use `https://*.staging.mana.how` format
- [ ] `CORS_ORIGINS` include all HTTPS staging domains
- [ ] No HTTP IP addresses in client-facing URLs
- [ ] Caddy config matches docker-compose port mappings

View file

@ -1,4 +1,4 @@
# Internationalization (i18n) im Manacore Monorepo
# Internationalization (i18n) im Mana Monorepo
Alle Web-Projekte im Monorepo verwenden **svelte-i18n** für die Internationalisierung. Diese Dokumentation beschreibt die einheitliche Implementierung.
@ -7,7 +7,7 @@ Alle Web-Projekte im Monorepo verwenden **svelte-i18n** für die Internationalis
| Projekt | Sprachen | Default |
|---------|----------|---------|
| maerchenzauber | de, en, es, fr, it | de |
| manacore | de, en, es, fr, it | de |
| mana | de, en, es, fr, it | de |
| cards | de, en, es, fr, it | de |
| memoro | de, en, es, fr, it | de |
| picture | de, en | de |
@ -213,11 +213,11 @@ Prüfen ob `locale.set()` aufgerufen wird und localStorage Zugriff erlaubt ist.
## Shared i18n Package
Für gemeinsame Übersetzungen zwischen Projekten kann das Package `@manacore/shared-i18n` verwendet werden (wenn vorhanden).
Für gemeinsame Übersetzungen zwischen Projekten kann das Package `@mana/shared-i18n` verwendet werden (wenn vorhanden).
```typescript
// In index.ts
import sharedTranslations from '@manacore/shared-i18n/de.json';
import sharedTranslations from '@mana/shared-i18n/de.json';
register('de', async () => {
const local = await import('./locales/de.json');

View file

@ -188,7 +188,7 @@ If you see `database "xxx" does not exist`:
pnpm setup:db:chat # or whichever service
# Option 2: Create manually
PGPASSWORD=devpassword psql -h localhost -U manacore -d postgres -c "CREATE DATABASE chat;"
PGPASSWORD=devpassword psql -h localhost -U mana -d postgres -c "CREATE DATABASE chat;"
```
### Schema out of date
@ -277,7 +277,7 @@ Create `apps/newproject/apps/server/` with:
1. **Add database to Docker init** (`docker/init-db/01-create-databases.sql`):
```sql
CREATE DATABASE IF NOT EXISTS newproject;
GRANT ALL PRIVILEGES ON DATABASE newproject TO manacore;
GRANT ALL PRIVILEGES ON DATABASE newproject TO mana;
```
2. **Add to setup script** (`scripts/setup-databases.sh`):
@ -290,7 +290,7 @@ Create `apps/newproject/apps/server/` with:
3. **Add DATABASE_URL to `.env.development`**:
```env
NEWPROJECT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/newproject
NEWPROJECT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/newproject
```
4. **Update `scripts/generate-env.mjs`** to generate the server `.env` file.

View file

@ -17,7 +17,7 @@ Statt Docker Desktop nutzen wir **Colima** als Container-Runtime. Colima ist Ope
| docker-compose | Identisch | Identisch |
**Konfiguration:** 8 CPUs, 12 GB RAM, 200 GB Disk, Apple VZ, VirtioFS
**LaunchAgent:** `~/Library/LaunchAgents/com.manacore.colima.plist`
**LaunchAgent:** `~/Library/LaunchAgents/com.mana.colima.plist`
**Migration:** `./scripts/mac-mini/migrate-to-colima.sh`
**Rollback:** `./scripts/mac-mini/migrate-to-colima.sh --rollback`
@ -40,7 +40,7 @@ Cloudflare Tunnel (cloudflared)
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Docker Container (~61 Services) │ │
│ │ ├── mana-core-auth (Port 3001) │ │
│ │ ├── mana-auth (Port 3001) │ │
│ │ ├── dashboard-web (Port 5173) │ │
│ │ ├── chat-web (Port 3000) │ │
│ │ ├── todo-web (Port 5188) │ │
@ -109,7 +109,7 @@ Host mana-server-remote
### Projekt-Verzeichnis
```bash
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
```
## CI/CD
@ -119,7 +119,7 @@ Ein GitHub Actions Self-Hosted Runner läuft nativ auf dem Mac Mini und deployt
- **CD Workflow:** `.github/workflows/cd-macmini.yml`
- **Mirror Workflow:** `.github/workflows/mirror-to-forgejo.yml` (GitHub → Forgejo Sync)
- **Runner:** `mac-mini` (self-hosted, macOS, ARM64, LaunchAgent)
- **Manuelles Deployment:** https://github.com/Memo-2023/manacore-monorepo/actions/workflows/cd-macmini.yml
- **Manuelles Deployment:** https://github.com/Memo-2023/mana-monorepo/actions/workflows/cd-macmini.yml
### Forgejo (Mirror-Only)
@ -155,8 +155,8 @@ bash scripts/check-status.sh
docker ps
# Logs eines Containers
docker logs manacore-chat-backend
docker logs -f manacore-chat-backend # Live-Logs
docker logs mana-chat-backend
docker logs -f mana-chat-backend # Live-Logs
```
**Grafana Uptime-Dashboard:** `grafana.mana.how` → Ordner "Mana" → **"Mana Uptime"**
@ -192,7 +192,7 @@ Statische HTML-Seite, die alle 60 Sekunden vom Container `mana-status-gen` neu g
./scripts/mac-mini/stop.sh
# Einzelnen Container neustarten
docker restart manacore-chat-backend
docker restart mana-chat-backend
# Neueste Images pullen und Container aktualisieren
./scripts/mac-mini/deploy.sh
@ -202,14 +202,14 @@ docker restart manacore-chat-backend
```bash
# LaunchAgents Status prüfen
launchctl list | grep -E "(cloudflare|manacore)"
launchctl list | grep -E "(cloudflare|mana)"
# Health Check manuell triggern
launchctl start com.manacore.health-check
launchctl start com.mana.health-check
# Service neuladen
launchctl unload ~/Library/LaunchAgents/com.manacore.docker-startup.plist
launchctl load ~/Library/LaunchAgents/com.manacore.docker-startup.plist
launchctl unload ~/Library/LaunchAgents/com.mana.docker-startup.plist
launchctl load ~/Library/LaunchAgents/com.mana.docker-startup.plist
```
## Autostart-Konfiguration
@ -226,7 +226,7 @@ Drei LaunchAgents sorgen fuer automatischen Betrieb:
### 2. Docker Container Startup
**Datei:** `~/Library/LaunchAgents/com.manacore.docker-startup.plist`
**Datei:** `~/Library/LaunchAgents/com.mana.docker-startup.plist`
- Startet beim Login
- Wartet auf Docker Desktop
@ -235,7 +235,7 @@ Drei LaunchAgents sorgen fuer automatischen Betrieb:
### 3. Health Check
**Datei:** `~/Library/LaunchAgents/com.manacore.health-check.plist`
**Datei:** `~/Library/LaunchAgents/com.mana.health-check.plist`
- Laeuft alle 5 Minuten
- Prueft alle Services (HTTP + Docker)
@ -245,8 +245,8 @@ Drei LaunchAgents sorgen fuer automatischen Betrieb:
Diese LaunchAgents sind seit der GPU-Server-Migration deaktiviert:
- `homebrew.mxcl.ollama.plist` — LLM laeuft auf GPU-Server
- `com.manacore.image-gen.plist` — Bildgenerierung laeuft auf GPU-Server
- `com.manacore.telegram-ollama-bot.plist` — Bot deaktiviert
- `com.mana.image-gen.plist` — Bildgenerierung laeuft auf GPU-Server
- `com.mana.telegram-ollama-bot.plist` — Bot deaktiviert
### Setup neu ausführen
@ -269,7 +269,7 @@ TELEGRAM_CHAT_ID=xxx
# Email
EMAIL_TO=your@email.com
EMAIL_FROM=manacore@mana.how
EMAIL_FROM=mana@mana.how
# ntfy.sh (optional)
NTFY_TOPIC=your-topic
@ -307,20 +307,20 @@ curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage"
| Container | Service |
|-----------|---------|
| manacore-postgres | PostgreSQL Datenbank |
| manacore-redis | Redis Cache |
| manacore-auth | Auth Service |
| manacore-dashboard-web | Dashboard |
| manacore-chat-backend | Chat API |
| manacore-chat-web | Chat Frontend |
| manacore-todo-backend | Todo API |
| manacore-todo-web | Todo Frontend |
| manacore-calendar-backend | Calendar API |
| manacore-calendar-web | Calendar Frontend |
| manacore-clock-backend | Clock API |
| manacore-clock-web | Clock Frontend |
| manacore-synapse | Matrix Homeserver |
| manacore-element | Element Web Client |
| mana-postgres | PostgreSQL Datenbank |
| mana-redis | Redis Cache |
| mana-auth | Auth Service |
| mana-dashboard-web | Dashboard |
| mana-chat-backend | Chat API |
| mana-chat-web | Chat Frontend |
| mana-todo-backend | Todo API |
| mana-todo-web | Todo Frontend |
| mana-calendar-backend | Calendar API |
| mana-calendar-web | Calendar Frontend |
| mana-clock-backend | Clock API |
| mana-clock-web | Clock Frontend |
| mana-synapse | Matrix Homeserver |
| mana-element | Element Web Client |
### Nützliche Docker-Befehle
@ -358,7 +358,7 @@ docker compose -f docker-compose.macmini.yml restart chat-backend
> 4. Cloudflared neu starten: `launchctl stop com.cloudflare.cloudflared && launchctl start com.cloudflare.cloudflared`
```yaml
tunnel: manacore-tunnel
tunnel: mana-tunnel
credentials-file: ~/.cloudflared/credentials.json
ingress:
@ -388,10 +388,10 @@ tail -f ~/.cloudflared/cloudflared.log
```bash
# Logs prüfen
docker logs manacore-<service-name>
docker logs mana-<service-name>
# Container manuell starten
docker start manacore-<service-name>
docker start mana-<service-name>
# Bei Problemen: Container neu erstellen
docker compose -f docker-compose.macmini.yml up -d --force-recreate <service-name>
@ -415,13 +415,13 @@ tail -100 ~/.cloudflared/cloudflared.log
```bash
# PostgreSQL Status
docker exec manacore-postgres pg_isready -U postgres
docker exec mana-postgres pg_isready -U postgres
# Datenbanken auflisten
docker exec manacore-postgres psql -U postgres -c "\l"
docker exec mana-postgres psql -U postgres -c "\l"
# Datenbank manuell erstellen
docker exec manacore-postgres psql -U postgres -c "CREATE DATABASE chat_db;"
docker exec mana-postgres psql -U postgres -c "CREATE DATABASE chat_db;"
```
### Health Check Fehler
@ -453,7 +453,7 @@ Bei SSH-Zugriff ist Docker nicht im Standard-PATH. Für Remote-Befehle:
PATH=/Applications/Docker.app/Contents/Resources/bin:$PATH
# Beispiel: Remote docker compose
ssh mana-server "PATH=/Applications/Docker.app/Contents/Resources/bin:\$PATH && docker compose -f ~/projects/manacore-monorepo/docker-compose.macmini.yml restart grafana"
ssh mana-server "PATH=/Applications/Docker.app/Contents/Resources/bin:\$PATH && docker compose -f ~/projects/mana-monorepo/docker-compose.macmini.yml restart grafana"
```
### Container existiert nicht (wurde nie erstellt)
@ -565,10 +565,10 @@ Die PostgreSQL-Datenbank sollte regelmäßig gesichert werden:
```bash
# Backup erstellen
docker exec manacore-postgres pg_dumpall -U postgres > backup_$(date +%Y%m%d).sql
docker exec mana-postgres pg_dumpall -U postgres > backup_$(date +%Y%m%d).sql
# Backup wiederherstellen
cat backup_20260123.sql | docker exec -i manacore-postgres psql -U postgres
cat backup_20260123.sql | docker exec -i mana-postgres psql -U postgres
```
### Logs aufräumen
@ -627,7 +627,7 @@ Ollama und FLUX.2 waren frueher lokal installiert, sind aber seit 2026-03-28 dea
Bei Bedarf reaktivieren:
```bash
brew services start ollama
launchctl load ~/Library/LaunchAgents/com.manacore.image-gen.plist
launchctl load ~/Library/LaunchAgents/com.mana.image-gen.plist
```
## Externe 4TB SSD
@ -798,7 +798,7 @@ docker compose -f docker-compose.macmini.yml up -d matrix-mana-bot
docker compose -f docker-compose.macmini.yml up -d synapse element-web
# Admin-User erstellen
docker exec -it manacore-synapse register_new_matrix_user \
docker exec -it mana-synapse register_new_matrix_user \
-c /data/homeserver.yaml http://localhost:8008 -a
```

View file

@ -510,7 +510,7 @@ CREATE TABLE community.bounty_pool (
- [ ] Create `transactions` table
- [ ] Setup daily/weekly/monthly reset cron jobs
- [ ] **Backend (mana-core-auth)**
- [ ] **Backend (mana-auth)**
- [ ] Create `KarmaModule`
- [ ] Create `KarmaService` with methods:
- [ ] `awardXp(userId, amount, source, sourceId?, appId?)`
@ -556,7 +556,7 @@ CREATE TABLE community.bounty_pool (
- [ ] Implement fraud score calculation
- [ ] Setup scheduled job für 14-day evaluation
- [ ] **Backend (mana-core-auth)**
- [ ] **Backend (mana-auth)**
- [ ] Create `CreatorRewardsModule`
- [ ] Create `CreatorRewardsService`:
- [ ] `trackInteraction(contentType, contentId, creatorId, interactingUserId)`
@ -777,5 +777,5 @@ bugs_triage_queue_size // Gauge: Pending triage
## Related Documents
- [Credit System (bestehend)](../services/mana-core-auth/src/credits/)
- [Credit System (bestehend)](../services/mana-auth/src/credits/)
- [Credit Operations Registry](../packages/credit-operations/)

View file

@ -88,7 +88,7 @@ Bei der Wahl der Messaging-Plattform für Mana hatten wir mehrere Optionen:
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ @manacore/bot-services (Shared Business Logic) │ │
│ │ @mana/bot-services (Shared Business Logic) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │ │
│ │ │ TodoSvc │ │ CalSvc │ │ AiSvc │ │ ClockSvc │ │ ... │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │ │
@ -164,7 +164,7 @@ User → Matrix Bot → JSON File (lokal)
Kombiniert alle Features in einem Bot:
```
User → matrix-mana-bot → @manacore/bot-services → Multiple Backends
User → matrix-mana-bot → @mana/bot-services → Multiple Backends
```
**Features:**
@ -174,11 +174,11 @@ User → matrix-mana-bot → @manacore/bot-services → Multiple Backends
---
## 3. Shared Package: @manacore/bot-services
## 3. Shared Package: @mana/bot-services
### 3.1 Architektur
Das Package `@manacore/bot-services` stellt transport-agnostische Geschäftslogik bereit:
Das Package `@mana/bot-services` stellt transport-agnostische Geschäftslogik bereit:
```typescript
// Business Logic Services
@ -188,7 +188,7 @@ export { AiModule, AiService } from './ai';
export { ClockModule, ClockService } from './clock';
// Infrastructure Services (NEU: Konsolidiert aus 11+ Bots)
export { SessionModule, SessionService } from './session'; // Auth via mana-core-auth
export { SessionModule, SessionService } from './session'; // Auth via mana-auth
export { TranscriptionModule, TranscriptionService } from './transcription'; // STT via mana-stt
// Storage Provider (pluggable)
@ -209,7 +209,7 @@ Die folgenden Services wurden aus den einzelnen Bots konsolidiert:
| `SessionService` | 11x dupliziert | 1x in bot-services | picture, contacts, chat, zitare, skilltree, presi, questions, storage, planta, cards, nutriphi |
| `TranscriptionService` | 6x dupliziert | 1x in bot-services | todo, clock, zitare, nutriphi, project-doc |
**Status: Vollständig migriert** - Alle 11 Bots mit SessionService und alle 5 Bots mit TranscriptionService nutzen jetzt die gemeinsamen Services aus `@manacore/bot-services`.
**Status: Vollständig migriert** - Alle 11 Bots mit SessionService und alle 5 Bots mit TranscriptionService nutzen jetzt die gemeinsamen Services aus `@mana/bot-services`.
### 3.2 TodoService
@ -523,12 +523,12 @@ Matrix User ID → Isolierte Daten pro User
**Verwendung:** matrix-todo-bot, matrix-calendar-bot, matrix-ollama-bot
#### Modell B: Mana Core Auth (JWT)
#### Modell B: Mana Auth (JWT)
Für Backend-integrierte Bots:
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Matrix User │────>│ Matrix Bot │────>│ mana-core-auth │
│ Matrix User │────>│ Matrix Bot │────>│ mana-auth │
│ !login x y │ │ │ │ (Port 3001) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
@ -790,7 +790,7 @@ COPY services/matrix-todo-bot ./services/matrix-todo-bot
RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
RUN pnpm install --frozen-lockfile
RUN pnpm --filter @manacore/bot-services build
RUN pnpm --filter @mana/bot-services build
RUN pnpm --filter matrix-todo-bot build
# Production
@ -821,7 +821,7 @@ MATRIX_ACCESS_TOKEN=syt_xxx...
MATRIX_USER_ID=@todo-bot:mana.how
# Auth (für Backend-Integration)
MANA_AUTH_URL=http://mana-core-auth:3001
MANA_AUTH_URL=http://mana-auth:3001
# Storage
DATA_PATH=/app/data
@ -851,7 +851,7 @@ services:
volumes:
- todo-bot-data:/app/data
networks:
- manacore
- mana
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3314/health"]
@ -875,7 +875,7 @@ volumes:
mana-bot-data:
networks:
manacore:
mana:
external: true
```
@ -908,7 +908,7 @@ networks:
| Port | Service | Beschreibung |
|------|---------|--------------|
| 3001 | mana-core-auth | Authentifizierung |
| 3001 | mana-auth | Authentifizierung |
| 3020 | mana-stt | Speech-to-Text |
| 3021 | mana-search | Web-Recherche |
| 3022 | mana-tts | Text-to-Speech |
@ -962,11 +962,11 @@ Da wir beide Seiten kontrollieren (Bot + Client), können wir:
- **Widget-Integration:** Interaktive UIs direkt in Element
- **Voice-Bot:** Sprachsteuerung via Matrix Calls
- **Bot-Discovery:** Automatische Bot-Erkennung in Räumen
- **Mehr @manacore/bot-services:** Nutrition, Stats, Docs Services
- **Mehr @mana/bot-services:** Nutrition, Stats, Docs Services
### 12.2 Konsolidierung
Der Fokus liegt auf der Konsolidierung der Bot-Services in `@manacore/bot-services`:
Der Fokus liegt auf der Konsolidierung der Bot-Services in `@mana/bot-services`:
- Alle wiederkehrende Logik zentral
- Einheitliche Storage-Abstraction
- Transport-agnostische Services
@ -982,7 +982,7 @@ Mana's Matrix-Bot-Architektur bietet eine **vollständig unabhängige, DSGVO-kon
2. **DSGVO-Konformität** durch lokale Datenhaltung
3. **Einheitliche UX** durch konsistente Command-Patterns
4. **Skalierbarkeit** durch Microservices-Architektur
5. **Erweiterbarkeit** durch @manacore/bot-services
5. **Erweiterbarkeit** durch @mana/bot-services
---

View file

@ -52,20 +52,20 @@ Plan für DSGVO-konformes Messaging mit Matrix/Synapse auf dem Mana Server.
ssh mana-server
# Neue Datenbank für Matrix
docker exec manacore-postgres psql -U postgres -c "CREATE DATABASE matrix;"
docker exec manacore-postgres psql -U postgres -c "CREATE USER synapse WITH PASSWORD 'synapse-secure-password';"
docker exec manacore-postgres psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE matrix TO synapse;"
docker exec mana-postgres psql -U postgres -c "CREATE DATABASE matrix;"
docker exec mana-postgres psql -U postgres -c "CREATE USER synapse WITH PASSWORD 'synapse-secure-password';"
docker exec mana-postgres psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE matrix TO synapse;"
```
### 1.2 Synapse Konfiguration erstellen
```bash
# Verzeichnis erstellen
mkdir -p ~/projects/manacore-monorepo/docker/matrix
mkdir -p ~/projects/mana-monorepo/docker/matrix
# Synapse Config generieren (einmalig)
docker run -it --rm \
-v ~/projects/manacore-monorepo/docker/matrix:/data \
-v ~/projects/mana-monorepo/docker/matrix:/data \
-e SYNAPSE_SERVER_NAME=mana.how \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
@ -161,7 +161,7 @@ Füge zu `docker-compose.macmini.yml` hinzu:
synapse:
image: matrixdotorg/synapse:latest
container_name: manacore-synapse
container_name: mana-synapse
restart: always
depends_on:
postgres:
@ -186,7 +186,7 @@ Füge zu `docker-compose.macmini.yml` hinzu:
element-web:
image: vectorim/element-web:latest
container_name: manacore-element
container_name: mana-element
restart: always
depends_on:
synapse:
@ -204,7 +204,7 @@ Füge zu `docker-compose.macmini.yml` hinzu:
# Volumes ergänzen:
volumes:
synapse_media:
name: manacore-synapse-media
name: mana-synapse-media
```
### 1.5 Element Web Konfiguration
@ -271,20 +271,20 @@ launchctl start com.cloudflare.cloudflared
### 2.1 Container starten
```bash
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
# Nur Synapse + Element starten
docker compose -f docker-compose.macmini.yml up -d synapse element-web
# Logs prüfen
docker logs -f manacore-synapse
docker logs -f mana-synapse
```
### 2.2 Admin-User erstellen
```bash
# Interaktiv einen Admin erstellen
docker exec -it manacore-synapse register_new_matrix_user \
docker exec -it mana-synapse register_new_matrix_user \
-c /data/homeserver.yaml \
http://localhost:8008 \
-a
@ -326,7 +326,7 @@ open https://element.mana.how
```bash
# Bot-User für jeden Bot erstellen (nicht-Admin)
docker exec -it manacore-synapse register_new_matrix_user \
docker exec -it mana-synapse register_new_matrix_user \
-c /data/homeserver.yaml \
http://localhost:8008
@ -520,7 +520,7 @@ OLLAMA_TIMEOUT=120000
matrix-ollama-bot:
image: ghcr.io/memo-2023/matrix-ollama-bot:latest
container_name: manacore-matrix-ollama-bot
container_name: mana-matrix-ollama-bot
restart: always
depends_on:
synapse:
@ -545,7 +545,7 @@ OLLAMA_TIMEOUT=120000
# Volume ergänzen:
volumes:
matrix_ollama_bot_data:
name: manacore-matrix-ollama-bot
name: mana-matrix-ollama-bot
```
---

View file

@ -17,7 +17,7 @@ Dieses Dokument gibt einen Überblick über alle Microservices im Mana-Monorepo
| Service | Port | Typ | API-Ready | Beschreibung |
|---------|------|-----|-----------|--------------|
| **mana-core-auth** | 3001 | NestJS | ✅ | Zentrale Authentifizierung & Credits |
| **mana-auth** | 3001 | NestJS | ✅ | Zentrale Authentifizierung & Credits |
| **mana-search** | 3021 | NestJS | ✅ | Web-Suche & Content-Extraktion |
| **mana-stt** | 3020 | FastAPI | ✅ | Speech-to-Text (Whisper, Voxtral) |
| **mana-tts** | 3022 | FastAPI | ✅ | Text-to-Speech (Kokoro, F5-TTS) |
@ -30,7 +30,7 @@ Dieses Dokument gibt einen Überblick über alle Microservices im Mana-Monorepo
Diese Services haben bereits REST-APIs und eignen sich für öffentliche Bereitstellung:
### 1. mana-core-auth (Port 3001)
### 1. mana-auth (Port 3001)
**Zweck:** Zentrale Authentifizierung, JWT-Tokens, Credit-System
@ -171,7 +171,7 @@ Diese Services sind für Matrix/Telegram konzipiert, nicht als direkte APIs:
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ mana-core-auth│ │ mana-search │ │ mana-stt │
│ mana-auth│ │ mana-search │ │ mana-stt │
│ Port 3001 │ │ Port 3021 │ │ Port 3020 │
│ │ │ │ │ │
│ • Auth/JWT │ │ • Web Search │ │ • Whisper │
@ -200,7 +200,7 @@ Diese Services sind für Matrix/Telegram konzipiert, nicht als direkte APIs:
**Beschreibung:** Jeden Service direkt über eigenen Port/Subdomain exponieren.
```
api.mana.how/auth → mana-core-auth:3001
api.mana.how/auth → mana-auth:3001
api.mana.how/search → mana-search:3021
api.mana.how/stt → mana-stt:3020
api.mana.how/tts → mana-tts:3022
@ -294,7 +294,7 @@ export class AppModule {}
**Vorteile:**
- Volle Kontrolle
- Integration mit mana-core-auth
- Integration mit mana-auth
- TypeScript/NestJS Konsistenz
- Einfache Erweiterung
@ -447,7 +447,7 @@ services/
| Port | Service | Typ |
|------|---------|-----|
| 3001 | mana-core-auth | Auth |
| 3001 | mana-auth | Auth |
| 3020 | mana-stt | AI/ML |
| 3021 | mana-search | Search |
| 3022 | mana-tts | AI/ML |

View file

@ -9,7 +9,7 @@ All monitoring tools are publicly accessible - no login required (except GlitchT
| Tool | URL | Access |
|------|-----|--------|
| **Grafana** | https://grafana.mana.how | No login needed (Anonymous Viewer) |
| **Umami** | [Public Dashboard](https://stats.mana.how/share/face76f42d3e42beb8c80ea03f33a462/manacore-webapp) | No login needed (Public Share) |
| **Umami** | [Public Dashboard](https://stats.mana.how/share/face76f42d3e42beb8c80ea03f33a462/mana-webapp) | No login needed (Public Share) |
| **GlitchTip** | https://glitchtip.mana.how | `guest@mana.how` / `guestguest` |
### Grafana Dashboards
@ -25,7 +25,7 @@ All monitoring tools are publicly accessible - no login required (except GlitchT
| App | Share URL |
|-----|-----------|
| Mana | https://stats.mana.how/share/face76f42d3e42beb8c80ea03f33a462/manacore-webapp |
| Mana | https://stats.mana.how/share/face76f42d3e42beb8c80ea03f33a462/mana-webapp |
| Calendar | https://stats.mana.how/share/772d2510c5bb47e0b490267f2821510a/calendar-webapp |
| Todo | https://stats.mana.how/share/ec1bb158d8714bc6bdbc147c97b9c1c7/todo-webapp |
| Chat | https://stats.mana.how/share/1c43fd9847674f899dc2ebdfbd8960db/chat-webapp |
@ -78,7 +78,7 @@ All monitoring tools are publicly accessible - no login required (except GlitchT
| Image | `victoriametrics/victoria-metrics:v1.99.0` |
| Port | 8428 |
| Retention | 2 years |
| Storage | Docker volume `manacore-victoriametrics` |
| Storage | Docker volume `mana-victoriametrics` |
**Why VictoriaMetrics instead of Prometheus?**
- 3-10x better compression
@ -105,8 +105,8 @@ curl "http://localhost:8428/api/v1/query_range?query=auth_users_total&start=-1h&
| Property | Value |
|----------|-------|
| Location | `/data/analytics/metrics.duckdb` (in mana-core-auth container) |
| Storage | Docker volume `manacore-analytics` |
| Location | `/data/analytics/metrics.duckdb` (in mana-auth container) |
| Storage | Docker volume `mana-analytics` |
| Retention | Unlimited |
| Snapshot | Daily at midnight UTC |
@ -208,23 +208,23 @@ curl "https://auth.mana.how/api/v1/analytics/growth?days=30"
```bash
# On Mac Mini server
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
# Start all monitoring services
docker compose -f docker-compose.macmini.yml up -d victoriametrics grafana mana-core-auth
docker compose -f docker-compose.macmini.yml up -d victoriametrics grafana mana-auth
# Check status
docker compose -f docker-compose.macmini.yml ps | grep -E "(victoria|grafana|auth)"
```
### Rebuilding mana-core-auth (with Analytics)
### Rebuilding mana-auth (with Analytics)
```bash
# Build from monorepo root
docker build -t ghcr.io/memo-2023/mana-core-auth:latest -f services/mana-core-auth/Dockerfile .
docker build -t ghcr.io/memo-2023/mana-auth:latest -f services/mana-auth/Dockerfile .
# Restart container
docker compose -f docker-compose.macmini.yml up -d mana-core-auth
docker compose -f docker-compose.macmini.yml up -d mana-auth
```
### Volume Permissions
@ -232,8 +232,8 @@ docker compose -f docker-compose.macmini.yml up -d mana-core-auth
If DuckDB fails with permission errors, fix the volume ownership:
```bash
docker exec -u root mana-core-auth chown -R nestjs:nodejs /data/analytics
docker restart mana-core-auth
docker exec -u root mana-auth chown -R nestjs:nodejs /data/analytics
docker restart mana-auth
```
## Backup
@ -263,7 +263,7 @@ Add to crontab for daily backups:
```bash
# Daily backup at 2 AM
0 2 * * * /path/to/manacore-monorepo/scripts/backup-monitoring.sh
0 2 * * * /path/to/mana-monorepo/scripts/backup-monitoring.sh
```
## Troubleshooting
@ -272,7 +272,7 @@ Add to crontab for daily backups:
```bash
# Check scrape config
docker exec manacore-victoriametrics cat /etc/prometheus/prometheus.yml
docker exec mana-victoriametrics cat /etc/prometheus/prometheus.yml
# Check targets status
curl http://localhost:8428/api/v1/targets
@ -282,17 +282,17 @@ curl http://localhost:8428/api/v1/targets
1. Check permissions:
```bash
docker exec mana-core-auth ls -la /data/analytics/
docker exec mana-auth ls -la /data/analytics/
```
2. Fix if needed:
```bash
docker exec -u root mana-core-auth chown -R nestjs:nodejs /data/analytics
docker exec -u root mana-auth chown -R nestjs:nodejs /data/analytics
```
3. Restart:
```bash
docker restart mana-core-auth
docker restart mana-auth
```
### Grafana can't connect to VictoriaMetrics
@ -309,7 +309,7 @@ cat docker/grafana/provisioning/datasources/prometheus.yml
3. Restart Grafana:
```bash
docker restart manacore-grafana
docker restart mana-grafana
```
### Missing metrics in Grafana
@ -326,7 +326,7 @@ curl http://localhost:3001/metrics
## Environment Variables
### mana-core-auth
### mana-auth
| Variable | Description | Default |
|----------|-------------|---------|

View file

@ -29,7 +29,7 @@ Distributed Tracing verfolgt eine einzelne Benutzeranfrage über alle beteiligte
Ein User öffnet den Chat und die Seite lädt langsam. Im Grafana siehst du, dass die p95-Latenz bei 3 Sekunden liegt. Aber **wo** steckt das Problem?
- Liegt es am Chat-Backend?
- An der Authentifizierung bei mana-core-auth?
- An der Authentifizierung bei mana-auth?
- An einer langsamen PostgreSQL-Query?
- Am Redis-Cache, der nicht greift?
- An der Netzwerk-Latenz zwischen Containern?
@ -42,7 +42,7 @@ Ein Trace für dieselbe Anfrage zeigt dir eine Wasserfall-Ansicht:
```
[Chat-Web → Chat-Backend] ─── 3.2s total ───────────────────────────────
├─ [Auth Validation] ── 45ms ── POST mana-core-auth/validate
├─ [Auth Validation] ── 45ms ── POST mana-auth/validate
├─ [Redis Cache Lookup] ── 2ms ── GET conversation:123
├─ [PostgreSQL Query] ── 2.8s ── SELECT * FROM messages WHERE... ← BOTTLENECK
│ └─ [Index Scan] ── 2.7s ── seq scan on messages (missing index!)
@ -56,7 +56,7 @@ Sofort sichtbar: Die PostgreSQL-Query braucht 2.8s wegen eines fehlenden Index.
Unser Stack hat viele Service-zu-Service-Aufrufe:
```
Browser → SvelteKit Web → NestJS Backend → mana-core-auth (Auth-Validierung)
Browser → SvelteKit Web → NestJS Backend → mana-auth (Auth-Validierung)
→ PostgreSQL (Daten)
→ Redis (Cache/Sessions)
→ mana-search (Suche)

View file

@ -68,7 +68,7 @@ const defaultSettings: Settings = {
pnpm --filter @mana/llm-playground build
# Auf Mac Mini deployen
ssh mana-server "cd ~/projects/manacore-monorepo && docker compose -f docker-compose.macmini.yml up -d --build llm-playground"
ssh mana-server "cd ~/projects/mana-monorepo && docker compose -f docker-compose.macmini.yml up -d --build llm-playground"
```
## Modality-Typen

View file

@ -115,7 +115,7 @@ apps/mana/
- [ ] Offline testen: Flugmodus → App öffnen → CRUD-Operationen → Internet an → Sync
- [ ] Update testen: Neue Version deployen → "Update verfügbar" erscheint
> **Build-Validierung:** `pnpm --filter @manacore/web build` erfolgreich. 308 pre-existierende Type-Errors (keine neuen durch PWA-Änderungen).
> **Build-Validierung:** `pnpm --filter @mana/web build` erfolgreich. 308 pre-existierende Type-Errors (keine neuen durch PWA-Änderungen).
### 1.7 Bekannte PWA-Limitationen (beobachten, nicht lösen)
@ -124,7 +124,7 @@ Diese Punkte sind der Grund warum Tauri als nächster Schritt folgt:
- iOS Safari: IndexedDB-Löschung nach 7 Tagen Inaktivität (betrifft local-first)
- iOS Safari: Keine Push-Notifications im Hintergrund
- Kein System Tray, keine globalen Shortcuts
- Kein Deep Link Protocol (`manacore://`)
- Kein Deep Link Protocol (`mana://`)
- App Store Präsenz nicht möglich (ausser TWA auf Android)
---
@ -193,7 +193,7 @@ export async function getApiUrl(key: string): Promise<string> {
### 2.3 Validierung
- [ ] `TAURI_ENV=true pnpm --filter @manacore/web build` erzeugt `build-static/` mit `index.html`
- [ ] `TAURI_ENV=true pnpm --filter @mana/web build` erzeugt `build-static/` mit `index.html`
- [ ] `build-static/` in einem einfachen HTTP-Server testen (`npx serve build-static`)
- [ ] Alle 27+ Module durchklicken — Client-Side-Routing funktioniert
- [ ] **Go/No-Go:** Falls fundamental SSR-abhängig → Plan überdenken
@ -217,13 +217,13 @@ export async function getApiUrl(key: string): Promise<string> {
### 3.2 Tauri-Projekt initialisieren
- [ ] `apps/mana/apps/tauri/` erstellen
- [ ] `package.json` mit Workspace-Referenz zu `@manacore/web`
- [ ] `package.json` mit Workspace-Referenz zu `@mana/web`
- [ ] `tauri.conf.json` konfigurieren:
```json
{
"build": {
"beforeBuildCommand": "TAURI_ENV=true pnpm --filter @manacore/web build",
"beforeBuildCommand": "TAURI_ENV=true pnpm --filter @mana/web build",
"devUrl": "http://localhost:5173",
"frontendDist": "../../web/build-static"
},
@ -240,7 +240,7 @@ export async function getApiUrl(key: string): Promise<string> {
]
},
"bundle": {
"identifier": "how.mana.manacore",
"identifier": "how.mana.app",
"icon": ["icons/icon.png"]
}
}
@ -273,7 +273,7 @@ fn get_config() -> serde_json::Value {
### 3.5 Dev-Workflow einrichten
- [ ] Turborepo-Tasks für `tauri:dev`, `tauri:build`
- [ ] Root-Level Script: `"dev:manacore:desktop": "pnpm --filter @manacore/tauri dev"`
- [ ] Root-Level Script: `"dev:mana:desktop": "pnpm --filter @mana/tauri dev"`
- [ ] Tauri Dev-Mode nutzt Vite Dev-Server (`devUrl: http://localhost:5173`) → Hot Reload
### 3.6 IndexedDB auf macOS WebKit testen
@ -515,7 +515,7 @@ Apple prüft strenger als Google. Wichtige Punkte:
- [ ] **Auto-Updater**`tauri-plugin-updater`, Update-Server, In-App Dialog
- [ ] **Native Notifications**`tauri-plugin-notification`, Calendar-Erinnerungen
- [ ] **Globale Shortcuts**`Cmd/Ctrl+N` (Neues Item), `Cmd/Ctrl+K` (Quick-Suche), `Cmd/Ctrl+1-9` (Modul wechseln)
- [ ] **Deep Links**`manacore://` Protocol für Links aus Emails/Chat
- [ ] **Deep Links**`mana://` Protocol für Links aus Emails/Chat
- [ ] **Dateisystem** — Drag & Drop, "Öffnen mit", Export (PDF/CSV)
### 8.2 Build Pipeline (Forgejo CI)

View file

@ -7,7 +7,7 @@ Dieses Dokument bietet eine umfassende Übersicht über alle Projekte im Manacor
1. [Übersicht](#übersicht)
2. [Projekte](#projekte)
- [Maerchenzauber](#maerchenzauber)
- [Manacore](#manacore)
- [Manacore](#mana)
- [Cards](#cards)
- [Memoro](#memoro)
- [Picture](#picture)
@ -45,7 +45,7 @@ pnpm run dev
# Einzelnes Projekt starten
pnpm run maerchenzauber:dev
pnpm run manacore:dev
pnpm run mana:dev
pnpm run cards:dev
pnpm run memoro:dev
pnpm run picture:dev
@ -146,7 +146,7 @@ Manacore ist die zentrale Plattform für Organisations-Management, Team-Kollabor
#### Projektstruktur
```
manacore/
mana/
├── apps/
│ ├── web/ # SvelteKit Web App
│ ├── mobile/ # Expo React Native App
@ -452,38 +452,38 @@ Alle Projekte teilen gemeinsame Packages unter `packages/`:
| Package | Beschreibung |
| --------------------------- | ---------------------------------------- |
| `@manacore/shared-types` | Gemeinsame TypeScript Types |
| `@manacore/shared-utils` | Utility-Funktionen (Date, String, Async) |
| `@manacore/shared-config` | Gemeinsame Konfiguration |
| `@mana/shared-types` | Gemeinsame TypeScript Types |
| `@mana/shared-utils` | Utility-Funktionen (Date, String, Async) |
| `@mana/shared-config` | Gemeinsame Konfiguration |
### Auth & Security
| Package | Beschreibung |
| ------------------------------ | ------------------------ |
| `@manacore/shared-auth` | Authentifizierungs-Logik |
| `@manacore/shared-auth-ui` | Auth UI-Komponenten |
| `@manacore/shared-auth-stores` | Auth State Stores |
| `@mana/shared-auth` | Authentifizierungs-Logik |
| `@mana/shared-auth-ui` | Auth UI-Komponenten |
| `@mana/shared-auth-stores` | Auth State Stores |
### UI & Styling
| Package | Beschreibung |
| ----------------------------- | --------------------------- |
| `@manacore/shared-ui` | React Native UI-Komponenten |
| `@manacore/shared-icons` | Icon-Library |
| `@manacore/shared-tailwind` | Tailwind Konfiguration |
| `@manacore/shared-theme` | Theme-Logik |
| `@manacore/shared-theme-ui` | Theme UI-Komponenten |
| `@manacore/shared-branding` | Branding Assets |
| `@manacore/shared-landing-ui` | Landing Page Komponenten |
| `@mana/shared-ui` | React Native UI-Komponenten |
| `@mana/shared-icons` | Icon-Library |
| `@mana/shared-tailwind` | Tailwind Konfiguration |
| `@mana/shared-theme` | Theme-Logik |
| `@mana/shared-theme-ui` | Theme UI-Komponenten |
| `@mana/shared-branding` | Branding Assets |
| `@mana/shared-landing-ui` | Landing Page Komponenten |
### Business Logic
| Package | Beschreibung |
| ------------------------------------- | ----------------------------- |
| `@manacore/shared-subscription-types` | Subscription TypeScript Types |
| `@manacore/shared-subscription-ui` | Subscription UI-Komponenten |
| `@manacore/shared-credit-service` | Credit/Mana Service |
| `@manacore/shared-i18n` | Internationalisierung |
| `@mana/shared-subscription-types` | Subscription TypeScript Types |
| `@mana/shared-subscription-ui` | Subscription UI-Komponenten |
| `@mana/shared-credit-service` | Credit/Mana Service |
| `@mana/shared-i18n` | Internationalisierung |
### Datenbank
@ -496,8 +496,8 @@ Alle Projekte teilen gemeinsame Packages unter `packages/`:
```typescript
// In einem beliebigen Projekt
import { User, ApiResponse } from '@manacore/shared-types';
import { formatDate, truncate, retry } from '@manacore/shared-utils';
import { User, ApiResponse } from '@mana/shared-types';
import { formatDate, truncate, retry } from '@mana/shared-utils';
```
---
@ -519,7 +519,7 @@ import { formatDate, truncate, retry } from '@manacore/shared-utils';
| Kategorie | Technologie |
| --------- | ------------------------------------ |
| API | NestJS |
| Auth | Mana Core Middleware / Supabase Auth |
| Auth | Mana Middleware / Supabase Auth |
| Database | PostgreSQL (Supabase) / PocketBase |
| Storage | Supabase Storage / Cloudflare R2 |
| Cache | Redis |
@ -592,7 +592,7 @@ pnpm add -D <package> -w
pnpm add <package> --filter maerchenzauber
# Zu einem Shared Package hinzufügen
pnpm add <package> --filter @manacore/shared-utils
pnpm add <package> --filter @mana/shared-utils
```
### Projekt-spezifische Entwicklung
@ -600,7 +600,7 @@ pnpm add <package> --filter @manacore/shared-utils
Siehe die jeweiligen CLAUDE.md Dateien in den Projektverzeichnissen für detaillierte Entwicklungsanleitungen:
- `maerchenzauber/CLAUDE.md`
- `manacore/CLAUDE.md`
- `mana/CLAUDE.md`
- `cards/CLAUDE.md` (im Root)
- `memoro/CLAUDE.md`
- `uload/CLAUDE.md`
@ -1431,9 +1431,9 @@ Basierend auf Synergien mit bestehenden Apps, Marktpotenzial und technischer Mac
### Technische Empfehlungen für neue Apps
1. **Shared Packages erweitern:**
- `@manacore/shared-ai` - Gemeinsame KI-Service-Abstraktionen
- `@manacore/shared-storage` - File-Upload und -Management
- `@manacore/shared-realtime` - Echtzeit-Kollaboration
- `@mana/shared-ai` - Gemeinsame KI-Service-Abstraktionen
- `@mana/shared-storage` - File-Upload und -Management
- `@mana/shared-realtime` - Echtzeit-Kollaboration
2. **Backend-Microservices:**
- Jede größere KI-Funktion als eigener Service

View file

@ -36,8 +36,8 @@ Diese Dokumentation beschreibt Services, die die bestehende Infrastruktur sinnvo
│ └── Cloudflare Tunnel für öffentliche Erreichbarkeit │
├─────────────────────────────────────────────────────────────────────────┤
│ AUTH & CORE │
│ ├── mana-core-auth Zentraler Auth-Service (Better Auth + EdDSA JWT) │
│ └── manacore-web Dashboard für alle Apps │
│ ├── mana-auth Zentraler Auth-Service (Better Auth + EdDSA JWT) │
│ └── mana-web Dashboard für alle Apps │
├─────────────────────────────────────────────────────────────────────────┤
│ PRODUKTIVITÄTS-APPS (je Backend + Web) │
│ ├── Chat AI-Chat mit verschiedenen Modellen │
@ -137,7 +137,7 @@ MIT BACKUP:
services:
backup:
image: mazzolino/restic:latest
container_name: manacore-backup
container_name: mana-backup
hostname: macmini-backup
environment:
# Backup-Ziel (Hetzner Storage Box)
@ -170,7 +170,7 @@ services:
```bash
#!/bin/bash
# Vor dem Backup: Konsistenten DB-Dump erstellen
docker exec manacore-postgres pg_dumpall -U postgres > /backup/postgres_dump.sql
docker exec mana-postgres pg_dumpall -U postgres > /backup/postgres_dump.sql
```
**Kosten:**
@ -218,10 +218,10 @@ docker exec manacore-postgres pg_dumpall -U postgres > /backup/postgres_dump.sql
```bash
# Fehler in der App? Du musst jeden Container einzeln durchsuchen:
docker logs manacore-chat-backend | grep error
docker logs manacore-todo-backend | grep error
docker logs manacore-auth | grep error
docker logs manacore-calendar-backend | grep error
docker logs mana-chat-backend | grep error
docker logs mana-todo-backend | grep error
docker logs mana-auth | grep error
docker logs mana-calendar-backend | grep error
# ... 15+ weitere Container
```
@ -251,7 +251,7 @@ Grafana Query: {job="docker"} |= "error" | json | level="error"
services:
loki:
image: grafana/loki:3.0.0
container_name: manacore-loki
container_name: mana-loki
ports:
- "3100:3100"
volumes:
@ -262,7 +262,7 @@ services:
promtail:
image: grafana/promtail:3.0.0
container_name: manacore-promtail
container_name: mana-promtail
volumes:
- ./promtail/config.yaml:/etc/promtail/config.yaml
- /var/run/docker.sock:/var/run/docker.sock:ro
@ -407,7 +407,7 @@ docker run -d \
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: manacore-uptime-kuma
container_name: mana-uptime-kuma
ports:
- "3099:3001"
volumes:
@ -492,7 +492,7 @@ MIT REVERSE PROXY:
services:
traefik:
image: traefik:v3.0
container_name: manacore-traefik
container_name: mana-traefik
command:
- "--api.dashboard=true"
- "--providers.docker=true"
@ -535,7 +535,7 @@ chat.mana.how {
}
auth.mana.how {
reverse_proxy mana-core-auth:3001
reverse_proxy mana-auth:3001
}
api.chat.mana.how {
@ -620,7 +620,7 @@ MIT VAULT:
services:
vault:
image: hashicorp/vault:1.15
container_name: manacore-vault
container_name: mana-vault
ports:
- "8200:8200"
environment:
@ -638,7 +638,7 @@ services:
services:
infisical:
image: infisical/infisical:latest
container_name: manacore-infisical
container_name: mana-infisical
ports:
- "8080:8080"
environment:
@ -719,7 +719,7 @@ Ein **API Gateway** ist ein zentraler Eintrittspunkt für alle API-Anfragen. Es
services:
kong:
image: kong:3.5
container_name: manacore-kong
container_name: mana-kong
environment:
KONG_DATABASE: "off"
KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
@ -784,9 +784,9 @@ Ein **CI/CD Runner** führt Build- und Deploy-Prozesse aus. Statt auf GitHub's S
services:
github-runner:
image: myoung34/github-runner:latest
container_name: manacore-github-runner
container_name: mana-github-runner
environment:
REPO_URL: https://github.com/your-org/manacore-monorepo
REPO_URL: https://github.com/your-org/mana-monorepo
RUNNER_TOKEN: ${GITHUB_RUNNER_TOKEN}
RUNNER_NAME: macmini-runner
volumes:
@ -814,7 +814,7 @@ Eine **Container Registry** speichert Docker Images. Statt von Docker Hub zu pul
services:
registry:
image: registry:2
container_name: manacore-registry
container_name: mana-registry
ports:
- "5000:5000"
volumes:
@ -842,7 +842,7 @@ services:
services:
whisper:
image: onerahmet/openai-whisper-asr-webservice:latest
container_name: manacore-whisper
container_name: mana-whisper
ports:
- "9000:9000"
environment:

View file

@ -70,7 +70,7 @@ SEPA Direct Debit wurde im Code aktiviert. Diese Checkliste dokumentiert die ver
```bash
ssh mana-server
cd ~/projects/manacore-monorepo
cd ~/projects/mana-monorepo
git pull
./scripts/mac-mini/deploy.sh
```
@ -78,7 +78,7 @@ git pull
**Verifizierung:**
```bash
# Logs prüfen
docker logs mana-core-auth --tail 50
docker logs mana-auth --tail 50
# Health Check
curl https://auth.mana.how/health
@ -143,7 +143,7 @@ curl https://auth.mana.how/health
**In den Server-Logs:**
```bash
ssh mana-server
docker logs mana-core-auth --tail 100 | grep -i "sepa\|processing\|webhook"
docker logs mana-auth --tail 100 | grep -i "sepa\|processing\|webhook"
```
**Erwartete Log-Einträge:**
@ -218,9 +218,9 @@ stripe payment_intents confirm pi_XXXXX --payment-method pm_sepa_debit
| Datei | Änderung |
|-------|----------|
| `services/mana-core-auth/src/stripe/stripe.service.ts` | `payment_method_types: ['card', 'sepa_debit']` |
| `services/mana-core-auth/src/subscriptions/subscriptions.service.ts` | `payment_method_types: ['card', 'sepa_debit']` |
| `services/mana-core-auth/src/stripe/stripe-webhook.controller.ts` | `payment_intent.processing` Handler |
| `services/mana-auth/src/stripe/stripe.service.ts` | `payment_method_types: ['card', 'sepa_debit']` |
| `services/mana-auth/src/subscriptions/subscriptions.service.ts` | `payment_method_types: ['card', 'sepa_debit']` |
| `services/mana-auth/src/stripe/stripe-webhook.controller.ts` | `payment_intent.processing` Handler |
| `apps/mana/apps/landing/src/content/blueprints/003-*.md` | Dokumentation |
---

View file

@ -7,7 +7,7 @@ Quick-reference templates for recurring setup tasks. Copy and customize for new
1. [New SvelteKit Web App](#1-new-sveltekit-web-app)
2. [New NestJS Backend](#2-new-nestjs-backend)
3. [Deploying New Service to Staging](#3-deploying-new-service-to-staging)
4. [Adding Backend to Mana Dashboard](#4-adding-backend-to-manacore-dashboard)
4. [Adding Backend to Mana Dashboard](#4-adding-backend-to-mana-dashboard)
5. [Quick Reference Port Assignments](#5-quick-reference-port-assignments)
---
@ -157,7 +157,7 @@ myproject-web:
NODE_ENV: production
# Server-side URLs (Docker internal network)
PUBLIC_BACKEND_URL: http://myproject-backend:30XX
PUBLIC_MANA_AUTH_URL: http://mana-core-auth:3001
PUBLIC_MANA_AUTH_URL: http://mana-auth:3001
# Client-side URLs (browser access via public IP)
PUBLIC_BACKEND_URL_CLIENT: http://your-server-ip:30XX
PUBLIC_MANA_AUTH_URL_CLIENT: http://your-server-ip:3001
@ -171,7 +171,7 @@ myproject-web:
retries: 3
start_period: 40s
networks:
- manacore-network
- mana-network
```
---
@ -182,7 +182,7 @@ myproject-web:
- [ ] Use `text` type for all `user_id` columns (NOT `uuid`)
- [ ] Add health check endpoint at `/api/v1/health`
- [ ] Configure CORS to include manacore-web origin (port 5173)
- [ ] Configure CORS to include mana-web origin (port 5173)
- [ ] Add database to `docker/init-db/01-create-databases.sql`
- [ ] Add to `scripts/setup-databases.sh`
- [ ] Add `dev:myproject:full` command to root `package.json`
@ -253,13 +253,13 @@ myproject-backend:
NODE_ENV: production
PORT: 30XX
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/myproject
MANA_AUTH_URL: http://mana-core-auth:3001
# CORS - Include app's web AND manacore-web dashboard
MANA_AUTH_URL: http://mana-auth:3001
# CORS - Include app's web AND mana-web dashboard
CORS_ORIGINS: http://your-server-ip:51XX,http://your-server-ip:5173,http://localhost:51XX,http://localhost:5173
depends_on:
postgres:
condition: service_healthy
mana-core-auth:
mana-auth:
condition: service_healthy
healthcheck:
test: ['CMD', 'wget', '--no-verbose', '--tries=1', '--spider', 'http://localhost:30XX/api/v1/health']
@ -268,7 +268,7 @@ myproject-backend:
retries: 3
start_period: 40s
networks:
- manacore-network
- mana-network
```
---
@ -290,17 +290,17 @@ myproject-backend:
ssh -i ~/.ssh/deploy_key deploy@your-server-ip
# Create database
docker exec manacore-postgres-staging psql -U postgres -c 'CREATE DATABASE myproject;'
docker exec mana-postgres-staging psql -U postgres -c 'CREATE DATABASE myproject;'
# Verify
docker exec manacore-postgres-staging psql -U postgres -c '\l' | grep myproject
docker exec mana-postgres-staging psql -U postgres -c '\l' | grep myproject
```
### Deployment Tag Formats
| Project | Correct Tag Format | Wrong Format |
|---------|-------------------|--------------|
| mana-core-auth | `mana-core-auth-staging-v1.0.X` | `auth-staging-v1.0.X` |
| mana-auth | `mana-auth-staging-v1.0.X` | `auth-staging-v1.0.X` |
| chat | `chat-staging-v1.0.X` or `chat-all-staging-v1.0.X` | - |
| todo | `todo-staging-v1.0.X` or `todo-all-staging-v1.0.X` | - |
| calendar | `calendar-staging-v1.0.X` | - |
@ -319,7 +319,7 @@ curl http://your-server-ip:30XX/api/v1/health
# Check logs for errors
docker logs myproject-backend-staging --tail 50
# Test CORS (from manacore-web origin)
# Test CORS (from mana-web origin)
curl -I -X OPTIONS http://your-server-ip:30XX/api/v1/endpoint \
-H "Origin: http://your-server-ip:5173" \
-H "Access-Control-Request-Method: GET"
@ -329,15 +329,15 @@ curl -I -X OPTIONS http://your-server-ip:30XX/api/v1/endpoint \
## 4. Adding Backend to Mana Dashboard
When adding a new backend service that manacore-web dashboard should call:
When adding a new backend service that mana-web dashboard should call:
### Checklist
- [ ] Add CORS origin for manacore-web (port 5173) to backend
- [ ] Create API service file in `manacore/apps/web/src/lib/api/services/`
- [ ] Add runtime URL injection in `manacore/apps/web/src/hooks.server.ts`
- [ ] Add environment variables to `docker-compose.staging.yml` for manacore-web
- [ ] Deploy both manacore-web and the backend with new config
- [ ] Add CORS origin for mana-web (port 5173) to backend
- [ ] Create API service file in `mana/apps/web/src/lib/api/services/`
- [ ] Add runtime URL injection in `mana/apps/web/src/hooks.server.ts`
- [ ] Add environment variables to `docker-compose.staging.yml` for mana-web
- [ ] Deploy both mana-web and the backend with new config
### Template: API Service File
@ -390,7 +390,7 @@ window.__PUBLIC_MYSERVICE_API_URL__ = "${PUBLIC_MYSERVICE_API_URL_CLIENT}";
### Template: docker-compose.staging.yml Addition
```yaml
manacore-web:
mana-web:
environment:
# ... existing env vars ...
# Add new backend URL
@ -407,7 +407,7 @@ manacore-web:
| Port | Service |
|------|---------|
| 3000 | chat-web (legacy) |
| 3001 | mana-core-auth |
| 3001 | mana-auth |
| 3002 | chat-backend |
| 3006 | picture-backend |
| 3007 | zitare-backend |
@ -421,7 +421,7 @@ manacore-web:
| Port | Service |
|------|---------|
| 5173 | manacore-web |
| 5173 | mana-web |
| 5175 | picture-web |
| 5177 | zitare-web |
| 5179 | calendar-web |
@ -444,7 +444,7 @@ manacore-web:
| `import.meta.env` in Docker | Use `window.__PUBLIC_*__` injection |
| API client at module level | Use lazy `getClient()` pattern |
| `uuid` type for user_id | Use `text` type |
| Missing CORS for 5173 | Add manacore-web to CORS_ORIGINS |
| `auth-staging-v*` tag | Use `mana-core-auth-staging-v*` |
| Missing CORS for 5173 | Add mana-web to CORS_ORIGINS |
| `auth-staging-v*` tag | Use `mana-auth-staging-v*` |
| ALTER TABLE without USING | Use `USING column::text` |
| `/api/health` endpoint | Use `/api/v1/health` |

View file

@ -4,20 +4,20 @@ This document outlines the plan to unify common code across all web apps in the
## Current Shared Packages
- [x] `@manacore/shared-icons` - Unified Phosphor Icons for all web apps
- [x] `@manacore/shared-ui` - Unified UI Components (Text, Button, Badge, Toggle, Input, Modal, Card, Navigation, Forms)
- [x] `@manacore/shared-auth` - Unified Auth Logic (Supabase client, token management)
- [x] `@manacore/shared-auth-ui` - Unified Auth UI (LoginPage, RegisterPage, OAuth buttons)
- [x] `@manacore/shared-tailwind` - Unified Tailwind Config (HSL colors, preset, themes.css)
- [x] `@manacore/shared-theme` - Unified Theme Store (Svelte 5, 4 variants, light/dark/system)
- [x] `@manacore/shared-theme-ui` - Theme UI Components (ThemeToggle, ThemeSelector)
- [x] `@manacore/shared-utils` - Unified Utilities (formatting, validation, async, date, keyboard)
- [x] `@manacore/shared-types` - Unified TypeScript Types
- [x] `@manacore/shared-i18n` - Unified i18n (languages, locale detection, translations)
- [x] `@manacore/shared-config` - Unified Config (env validation)
- [x] `@manacore/shared-branding` - **NEW** Unified App Branding (logos, colors, app config)
- [x] `@manacore/shared-subscription-types` - Subscription Type Definitions
- [x] `@manacore/shared-subscription-ui` - Subscription UI Components
- [x] `@mana/shared-icons` - Unified Phosphor Icons for all web apps
- [x] `@mana/shared-ui` - Unified UI Components (Text, Button, Badge, Toggle, Input, Modal, Card, Navigation, Forms)
- [x] `@mana/shared-auth` - Unified Auth Logic (Supabase client, token management)
- [x] `@mana/shared-auth-ui` - Unified Auth UI (LoginPage, RegisterPage, OAuth buttons)
- [x] `@mana/shared-tailwind` - Unified Tailwind Config (HSL colors, preset, themes.css)
- [x] `@mana/shared-theme` - Unified Theme Store (Svelte 5, 4 variants, light/dark/system)
- [x] `@mana/shared-theme-ui` - Theme UI Components (ThemeToggle, ThemeSelector)
- [x] `@mana/shared-utils` - Unified Utilities (formatting, validation, async, date, keyboard)
- [x] `@mana/shared-types` - Unified TypeScript Types
- [x] `@mana/shared-i18n` - Unified i18n (languages, locale detection, translations)
- [x] `@mana/shared-config` - Unified Config (env validation)
- [x] `@mana/shared-branding` - **NEW** Unified App Branding (logos, colors, app config)
- [x] `@mana/shared-subscription-types` - Subscription Type Definitions
- [x] `@mana/shared-subscription-ui` - Subscription UI Components
---
@ -27,14 +27,14 @@ This document outlines the plan to unify common code across all web apps in the
All web apps now use the shared packages consistently:
**Logo Components** - Migrated to `@manacore/shared-branding`:
**Logo Components** - Migrated to `@mana/shared-branding`:
- `memoro/apps/web/src/lib/components/MemoroLogo.svelte` → uses `AppLogo`
- `cards/apps/web/src/lib/components/CardsLogo.svelte` → uses `AppLogo`
- `manacore/apps/web/src/lib/components/ManaLogo.svelte` → uses `AppLogo`
- `mana/apps/web/src/lib/components/ManaLogo.svelte` → uses `AppLogo`
- `maerchenzauber/apps/web/src/lib/components/StorytellerLogo.svelte` → uses `AppLogo`
**Formatter Functions** - Migrated to `@manacore/shared-utils`:
**Formatter Functions** - Migrated to `@mana/shared-utils`:
- `memoro/apps/web/src/lib/components/memo/AdditionalRecordings.svelte` → uses `formatDurationFromMs`, `formatFileSize`
- `memoro/apps/web/src/lib/components/RecordingButton.svelte` → uses `formatDuration`
@ -46,7 +46,7 @@ All web apps now use the shared packages consistently:
## Planned Shared Packages
### 1. Shared UI Components (`@manacore/shared-ui`)
### 1. Shared UI Components (`@mana/shared-ui`)
**Status**: Done
**Priority**: High
@ -73,7 +73,7 @@ All web apps now use the shared packages consistently:
---
### 2. Shared Auth (`@manacore/shared-auth`)
### 2. Shared Auth (`@mana/shared-auth`)
**Status**: Done
**Priority**: High
@ -95,7 +95,7 @@ All web apps now use the shared packages consistently:
---
### 3. Shared Tailwind Config (`@manacore/shared-tailwind`)
### 3. Shared Tailwind Config (`@mana/shared-tailwind`)
**Status**: Done
**Priority**: High
@ -132,7 +132,7 @@ packages/shared-tailwind/
---
### 4. Shared Utilities (`@manacore/shared-utils`)
### 4. Shared Utilities (`@mana/shared-utils`)
**Status**: Done
**Priority**: Medium
@ -148,7 +148,7 @@ packages/shared-tailwind/
---
### 5. Shared Types (`@manacore/shared-types`)
### 5. Shared Types (`@mana/shared-types`)
**Status**: Planned
**Priority**: Medium
@ -166,7 +166,7 @@ packages/shared-tailwind/
---
### 6. Shared i18n (`@manacore/shared-i18n`)
### 6. Shared i18n (`@mana/shared-i18n`)
**Status**: Done
**Priority**: Medium
@ -202,7 +202,7 @@ packages/shared-i18n/
---
### 7. Shared Config (`@manacore/shared-config`)
### 7. Shared Config (`@mana/shared-config`)
**Status**: Planned
**Priority**: Low
@ -220,21 +220,21 @@ packages/shared-i18n/
## Implementation Order
1. **Phase 1** (Completed)
- [x] `@manacore/shared-icons`
- [x] `@manacore/shared-ui`
- [x] `@mana/shared-icons`
- [x] `@mana/shared-ui`
2. **Phase 2** (Completed)
- [x] `@manacore/shared-auth`
- [x] `@manacore/shared-auth-ui`
- [x] `@manacore/shared-tailwind`
- [x] `@mana/shared-auth`
- [x] `@mana/shared-auth-ui`
- [x] `@mana/shared-tailwind`
3. **Phase 3** (Completed)
- [x] `@manacore/shared-utils`
- [x] `@manacore/shared-types`
- [x] `@mana/shared-utils`
- [x] `@mana/shared-types`
4. **Phase 4** (Completed)
- [x] `@manacore/shared-i18n`
- [x] `@manacore/shared-config`
- [x] `@mana/shared-i18n`
- [x] `@mana/shared-config`
---
@ -256,7 +256,7 @@ packages/shared-{name}/
```json
{
"name": "@manacore/shared-{name}",
"name": "@mana/shared-{name}",
"version": "0.1.0",
"private": true,
"type": "module",
@ -283,7 +283,7 @@ packages/shared-{name}/
## Package Details
### `@manacore/shared-branding`
### `@mana/shared-branding`
Centralized branding configuration for all Mana ecosystem apps.
@ -299,14 +299,14 @@ Centralized branding configuration for all Mana ecosystem apps.
```svelte
<script>
import { AppLogo } from '@manacore/shared-branding';
import { AppLogo } from '@mana/shared-branding';
</script>
<AppLogo app="memoro" size={32} />
<AppLogo app="manacore" size={55} color="#fff" />
<AppLogo app="mana" size={55} color="#fff" />
```
### `@manacore/shared-utils/format`
### `@mana/shared-utils/format`
Duration and formatting utilities.

View file

@ -97,7 +97,7 @@ Da bereits **mana-sync (Go)** als zentraler Sync-Server existiert und **local-fi
| Service | Zweck | Ersetzt |
|---------|-------|---------|
| **mana-sync** (Go) | Sync, CRUD, Echtzeit | 7+ CRUD-only Backends |
| **mana-core-auth** (NestJS) | Auth, Credits, Billing, Admin | Bleibt |
| **mana-auth** (NestJS) | Auth, Credits, Billing, Admin | Bleibt |
| **mana-compute** (Hono/Bun) | App-spezifische Logik (RRULE, Reminders, AI-Pipelines) | Todo-Server-Pattern fuer alle |
| **mana-chat** (NestJS) | AI Chat (Streaming, Azure OpenAI) | Chat-Backend |
@ -132,7 +132,7 @@ Da bereits **mana-sync (Go)** als zentraler Sync-Server existiert und **local-fi
|-------------|---------------|
| **Hono + Bun** | Leichte Compute-Server (wie der Todo-Server) |
| **Go (mana-sync)** | Performance-kritisch, Echtzeit, WebSocket |
| **NestJS** | Nur fuer mana-core-auth (komplex, viele Module, 174 Source Files) |
| **NestJS** | Nur fuer mana-auth (komplex, viele Module, 174 Source Files) |
Der Todo Hono/Bun Server ist ein gutes Pattern:
@ -185,7 +185,7 @@ Mischt nicht beides halbfertig. Die angefangenen Go-Rewrites (api-gateway-go, se
| App | Expo SDK | React Native | NativeWind |
|-----|----------|-------------|------------|
| context, chat | **52** | 0.76 | ^3.4.0 |
| picture, cards, manacore | **54** | 0.81 | ^4.2.1 |
| picture, cards, mana | **54** | 0.81 | ^4.2.1 |
| matrix | **55** | 0.83 | latest |
### Empfehlung
@ -331,7 +331,7 @@ Negativ:
|---------|-------------|-----------|
| Apps (24 Stueck) | ~162 (inkl. node_modules-Artefakte) | Duenn |
| Services (16 Stueck) | ~23 | **11 von 16 Services haben 0 Tests** |
| mana-core-auth | Gut (5 E2E Specs) | Einziger Service mit guter Abdeckung |
| mana-auth | Gut (5 E2E Specs) | Einziger Service mit guter Abdeckung |
| mana-sync | **0 Tests** | Kritischster Service ohne Tests |
| mana-llm | Vorhanden (Python) | Unit Tests |
@ -352,8 +352,8 @@ Negativ:
### Empfehlung (Prioritaet vor Go-Live)
1. **mana-sync:** Integration Tests fuer Sync-Logik und Conflict Resolution (Go)
2. **mana-core-auth:** Weiter ausbauen (bereits gut)
3. **@manacore/local-store:** Unit Tests fuer SyncEngine und Conflict Resolution
2. **mana-auth:** Weiter ausbauen (bereits gut)
3. **@mana/local-store:** Unit Tests fuer SyncEngine und Conflict Resolution
4. **E2E Tests:** Fuer die wichtigsten User-Flows (Auth -> CRUD -> Sync -> Multi-Device)
---
@ -363,22 +363,22 @@ Negativ:
### Bewertung: Zu viele (55 Stueck)
Sinnvolle Packages:
- `@manacore/local-store` - Kern der Local-first Architektur
- `@manacore/shared-auth` - Auth-Abstraktion
- `@manacore/shared-nestjs-auth` - NestJS JWT Guards
- `@manacore/shared-ui` - UI-Komponenten (hat aber Type-Errors)
- `@manacore/shared-tailwind` - Tailwind Config
- `@manacore/shared-vite-config` - Vite Config
- `@mana/local-store` - Kern der Local-first Architektur
- `@mana/shared-auth` - Auth-Abstraktion
- `@mana/shared-nestjs-auth` - NestJS JWT Guards
- `@mana/shared-ui` - UI-Komponenten (hat aber Type-Errors)
- `@mana/shared-tailwind` - Tailwind Config
- `@mana/shared-vite-config` - Vite Config
Zu granulare Packages (Konsolidierungskandidaten):
| Aktuell (einzeln) | Konsolidiert zu |
|-------------------|----------------|
| shared-credit-service, shared-credit-ui, credit-operations | `@manacore/credits` |
| shared-feedback-service, shared-feedback-types, shared-feedback-ui | `@manacore/feedback` |
| shared-help-content, shared-help-mobile, shared-help-types, shared-help-ui | `@manacore/help` |
| shared-subscription-types, shared-subscription-ui | `@manacore/subscriptions` |
| shared-nestjs-health, shared-nestjs-metrics, shared-nestjs-setup | `@manacore/nestjs-bootstrap` |
| shared-credit-service, shared-credit-ui, credit-operations | `@mana/credits` |
| shared-feedback-service, shared-feedback-types, shared-feedback-ui | `@mana/feedback` |
| 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 |
### Ziel: ~25-30 Packages statt 55
@ -428,7 +428,7 @@ apps/*/apps/web/src/lib/stores/theme.svelte.ts # ~40 Zeilen, 15x kopiert
### Geschaetzte Duplikation: ~500+ Zeilen ueber 15 Apps
Das Package `@manacore/shared-stores` existiert bereits, wird aber nicht voll genutzt. Diese Stores sollten dort zentralisiert werden.
Das Package `@mana/shared-stores` existiert bereits, wird aber nicht voll genutzt. Diese Stores sollten dort zentralisiert werden.
---
@ -438,7 +438,7 @@ Das Package `@manacore/shared-stores` existiert bereits, wird aber nicht voll ge
| Service | Tech | Tests | Error Handling | Config | Completeness |
|---------|------|-------|----------------|--------|-------------|
| mana-core-auth | NestJS/TS | Gut (E2E + Integration) | Gut | Env-driven | 95% |
| mana-auth | NestJS/TS | Gut (E2E + Integration) | Gut | Env-driven | 95% |
| mana-llm | Python/FastAPI | Unit Tests | Implizit | Pydantic | 80% |
| mana-api-gateway | NestJS/TS | Keine | Gut | Env-driven | 75% |
| mana-search | NestJS/TS | Keine | Maessig | Env-driven | 70% |
@ -484,7 +484,7 @@ Das Package `@manacore/shared-stores` existiert bereits, wird aber nicht voll ge
| Kein Distributed Tracing (OpenTelemetry) | Debugging in Prod unmoeglich | 2-3 Tage |
| Kein Staging-Environment | Bugs erst in Prod sichtbar | 1 Tag |
| shared-ui Type-Errors | 2 Apps skippen type-check | 2-3 Tage |
| Kein API-Dokumentation (OpenAPI/Swagger) | Nur mana-core-auth hat Swagger | 1 Woche |
| Kein API-Dokumentation (OpenAPI/Swagger) | Nur mana-auth hat Swagger | 1 Woche |
| Logging nicht standardisiert | Winston vs NestJS Logger vs FastAPI vs Go | 3-5 Tage |
| Keine Correlation IDs | Requests nicht ueber Services verfolgbar | 2 Tage |
@ -558,11 +558,11 @@ Diese Technologie-Entscheidungen sind gut und sollten beibehalten werden:
### Apps (24)
calendar, chat, citycorners, clock, contacts, context, docs, inventar, manacore, cards, matrix, mukke, nutriphi, photos, picture, planta, playground, presi, questions, skilltree, storage, todo, traces, zitare
calendar, chat, citycorners, clock, contacts, context, docs, inventar, mana, cards, matrix, mukke, nutriphi, photos, picture, planta, playground, presi, questions, skilltree, storage, todo, traces, zitare
### Services (17)
it-landing, mana-api-gateway, mana-api-gateway-go, mana-core-auth, mana-crawler, mana-image-gen, mana-landing-builder, mana-llm, mana-matrix-bot, mana-media, mana-notify, mana-search, mana-stt, mana-sync, mana-tts, mana-voice-bot, ollama-metrics-proxy
it-landing, mana-api-gateway, mana-api-gateway-go, mana-auth, mana-crawler, mana-image-gen, mana-landing-builder, mana-llm, mana-matrix-bot, mana-media, mana-notify, mana-search, mana-stt, mana-sync, mana-tts, mana-voice-bot, ollama-metrics-proxy
### Shared Packages (55)

View file

@ -11,7 +11,7 @@
| Database | PostgreSQL 16 + Drizzle ORM | Docker |
| Cache | Redis 7 | Docker |
| Object Storage | MinIO (S3-kompatibel) | Docker |
| Auth | Better Auth (mana-core-auth, EdDSA JWT) | NestJS |
| Auth | Better Auth (mana-auth, EdDSA JWT) | NestJS |
| Search | SearXNG + mana-search | Docker + NestJS |
| Messaging | Matrix/Synapse + 13 Bots | Docker |
| Monitoring | VictoriaMetrics + Grafana | Docker |
@ -96,7 +96,7 @@ Brevo ist SPOF für alle Transaktions-Emails (Verifizierung, Passwort-Reset).
**Status: ✅ ERLEDIGT** (2026-03-24)
Alle 9 Backends nutzen jetzt `@manacore/shared-llm` → `mana-llm` Gateway:
Alle 9 Backends nutzen jetzt `@mana/shared-llm` → `mana-llm` Gateway:
- Auth, Chat, Context, NutriPhi, Planta, Traces, Cards, Bot Services, Matrix Bots
- Google Gemini als automatischer Fallback wenn Ollama überlastet
- OpenAI SDK komplett entfernt (Project Doc Bot)
@ -150,7 +150,7 @@ Der Mac Mini ist Single Point of Failure. Optionen:
**Aufwand:** Mittel | **Impact:** Niedrig
Aktuell: NestJS 10.4.15. Version 11 ist stable. Shared Packages (`@manacore/shared-nestjs-auth` etc.) unterstützen bereits NestJS 11 als peerDependency. Bringt bessere Performance und ESM-Support.
Aktuell: NestJS 10.4.15. Version 11 ist stable. Shared Packages (`@mana/shared-nestjs-auth` etc.) unterstützen bereits NestJS 11 als peerDependency. Bringt bessere Performance und ESM-Support.
#### 3.2 Expo 52 → 53/54
@ -198,7 +198,7 @@ NutriPhi und Planta nutzen Google Gemini Vision. Alternativen via Ollama:
|------|----------|---------|--------|
| ~~**1**~~ | ~~Picture App → mana-image-gen~~ | ✅ Erledigt | Lokales FLUX.2 klein als Default, Replicate für Premium |
| ~~**2**~~ | ~~Project Doc Bot → Ollama + mana-stt~~ | ✅ Erledigt | OpenAI SDK entfernt, nutzt mana-llm + mana-stt |
| ~~**3**~~ | ~~Alle LLM-Calls über mana-llm routen~~ | ✅ Erledigt | @manacore/shared-llm + Google Fallback |
| ~~**3**~~ | ~~Alle LLM-Calls über mana-llm routen~~ | ✅ Erledigt | @mana/shared-llm + Google Fallback |
| ~~**4**~~ | ~~PostgreSQL Backup~~ | ✅ Erledigt | Stündliche pg_dumpall + tägliche pg_basebackup, Docker Container |
| **5** | Brevo → Postal/Stalwart | 2-3 Tage | Email-Unabhängigkeit |
| ~~**6**~~ | ~~Landing Pages self-hosted~~ | ✅ Erledigt | Nginx Container auf Port 4400, 10 Domains via Tunnel |
@ -218,7 +218,7 @@ NutriPhi und Planta nutzen Google Gemini Vision. Alternativen via Ollama:
**Erledigte Meilensteine (2026-03-24):**
- ✅ Prio 1: Picture App nutzt lokales `mana-image-gen` (FLUX.2 klein) als Default
- ✅ Prio 2: Project Doc Bot: OpenAI SDK komplett entfernt, nutzt mana-llm + mana-stt
- ✅ Prio 3: Alle LLM-Calls über `mana-llm` geroutet (10 Backends, `@manacore/shared-llm`)
- ✅ Prio 3: Alle LLM-Calls über `mana-llm` geroutet (10 Backends, `@mana/shared-llm`)
- ✅ Prio 3: Google Gemini Fallback in mana-llm + Cards Gemini SDK entfernt
- ✅ Prio 4: PostgreSQL Backup mit stündlichen Dumps + täglichen Base-Backups
- ✅ Prio 6: Landing Pages self-hosted via Nginx (10 Domains, kein Cloudflare Pages mehr)

View file

@ -23,7 +23,7 @@ Pre-deployment checklist to ensure the automated testing system is ready for pro
```
- [ ] Scripts work locally:
```bash
./scripts/run-tests-with-coverage.sh mana-core-auth
./scripts/run-tests-with-coverage.sh mana-auth
./scripts/test-data/seed-test-data.sh auth
./scripts/test-data/cleanup-test-data.sh auth
```

View file

@ -34,7 +34,7 @@ This document defines the URL schema for all mana.how subdomains.
| Service | URL | Description |
|---------|-----|-------------|
| **Main Dashboard** | mana.how | Main landing/dashboard |
| **Auth Service** | auth.mana.how | Central authentication (mana-core-auth) |
| **Auth Service** | auth.mana.how | Central authentication (mana-auth) |
| **API Gateway** | api.mana.how | Unified API gateway |
| **Media Service** | media.mana.how | Image/video processing |
| **LLM Service** | llm.mana.how | LLM abstraction layer |
@ -63,7 +63,7 @@ For web analytics, the following apps are tracked in Umami:
| Umami Website ID | Display Name | Domain |
|------------------|--------------|--------|
| `manacore-webapp` | Dashboard | mana.how |
| `mana-webapp` | Dashboard | mana.how |
| `chat-webapp` | Chat | chat.mana.how |
| `todo-webapp` | Todo | todo.mana.how |
| `calendar-webapp` | Calendar | calendar.mana.how |

View file

@ -1,12 +1,12 @@
# Zentrale User Settings
Die User Settings werden zentral in `mana-core-auth` gespeichert und über alle Apps synchronisiert. Dies ermöglicht eine konsistente Benutzererfahrung über das gesamte Mana-Ökosystem.
Die User Settings werden zentral in `mana-auth` gespeichert und über alle Apps synchronisiert. Dies ermöglicht eine konsistente Benutzererfahrung über das gesamte Mana-Ökosystem.
## Architektur
```
┌─────────────────────────────────────────────────────────────────┐
│ mana-core-auth │
│ mana-auth │
│ (Port 3001) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ auth.user_settings Table │ │
@ -154,7 +154,7 @@ curl -X DELETE http://localhost:3001/api/v1/settings/app/calendar \
Jede App erstellt einen eigenen User Settings Store in `src/lib/stores/user-settings.svelte.ts`:
```typescript
import { createUserSettingsStore } from '@manacore/shared-theme';
import { createUserSettingsStore } from '@mana/shared-theme';
import { authStore } from './auth.svelte';
export const userSettings = createUserSettingsStore({
@ -264,7 +264,7 @@ Settings werden lokal gecached für:
- Schnelle UI beim App-Start (keine Wartezeit auf Server)
- Offline-Unterstützung (letzte bekannte Settings)
Cache-Key: `manacore-user-settings-{appId}`
Cache-Key: `mana-user-settings-{appId}`
### Deep Merge
@ -292,7 +292,7 @@ Tabelle: `auth.user_settings`
## Dateien
### Backend (mana-core-auth)
### Backend (mana-auth)
| Datei | Beschreibung |
|-------|--------------|
@ -323,7 +323,7 @@ Folgende Apps nutzen bereits die zentralen User Settings:
- Calendar (`calendar`)
- Chat (`chat`)
- Contacts (`contacts`)
- Mana (`manacore`)
- Mana (`mana`)
- Cards (`cards`)
- Picture (`picture`)
- Presi (`presi`)
@ -334,7 +334,7 @@ Folgende Apps nutzen bereits die zentralen User Settings:
1. **Store erstellen** in `src/lib/stores/user-settings.svelte.ts`:
```typescript
import { createUserSettingsStore } from '@manacore/shared-theme';
import { createUserSettingsStore } from '@mana/shared-theme';
import { authStore } from './auth.svelte';
export const userSettings = createUserSettingsStore({

View file

@ -52,7 +52,7 @@ All apps follow `MAJOR.MINOR.PATCH`:
| Service | Version | Status |
|---------|---------|--------|
| mana-core-auth | 1.0.0 | Production |
| mana-auth | 1.0.0 | Production |
| mana-search | 0.1.0 | Early Beta |
| mana-crawler | 0.1.0 | Early Beta |
| mana-llm | 0.0.1 | Alpha |

View file

@ -295,7 +295,7 @@ Auf dem **Windows-PC** in PowerShell **als Administrator** ausführen:
```powershell
# Für Admin-User muss der Key in die systemweite Datei:
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmtp92RmE6lPhHRg24VSYIvq9ne4+qe61SiR4c+lPWu claude-code@manacore" | Out-File -Encoding utf8 -FilePath C:\ProgramData\ssh\administrators_authorized_keys
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmtp92RmE6lPhHRg24VSYIvq9ne4+qe61SiR4c+lPWu claude-code@mana" | Out-File -Encoding utf8 -FilePath C:\ProgramData\ssh\administrators_authorized_keys
# Berechtigungen setzen (Windows erfordert das für SSH)
# Vererbung entfernen
@ -619,12 +619,12 @@ GPU Server (healthcheck.py → log-shipper.py)
---
## TypeScript Client (`@manacore/shared-gpu`)
## TypeScript Client (`@mana/shared-gpu`)
Shared Package im Monorepo (`packages/shared-gpu/`) für alle GPU-Services:
```typescript
import { GpuClient } from '@manacore/shared-gpu';
import { GpuClient } from '@mana/shared-gpu';
// Öffentlich (von überall, mit API-Key)
const gpu = new GpuClient({

View file

@ -256,7 +256,7 @@ interface DropHandler {
#### 4. Deployment-Konfiguration
```typescript
// manacore.config.ts
// mana.config.ts
export default defineWorkspace({
// Welche Apps in diesem Build?
apps: ['calendar', 'todo', 'contacts'],
@ -389,7 +389,7 @@ CalendarModule.droppable = [{
### Szenario 1: Vollversion (SaaS)
```typescript
// manacore.config.ts
// mana.config.ts
apps: ['calendar', 'todo', 'contacts', 'chat', 'files', 'notes', ...]
```

View file

@ -1,12 +1,12 @@
# Central Command Bar
Die zentrale Command Bar bietet eine einheitliche Schnellsuche und Navigation über alle Manacore-Apps hinweg. Sie wird mit `Cmd/Ctrl+K` aktiviert und bietet Suche, Quick Actions und Tastatur-Navigation.
Die zentrale Command Bar bietet eine einheitliche Schnellsuche und Navigation über alle Mana-Apps hinweg. Sie wird mit `Cmd/Ctrl+K` aktiviert und bietet Suche, Quick Actions und Tastatur-Navigation.
## Architektur
```
┌─────────────────────────────────────────────────────────────┐
@manacore/shared-ui │
@mana/shared-ui │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CommandBar.svelte │ │
│ │ - Suche mit Debounce (150ms) │ │
@ -30,7 +30,7 @@ Die zentrale Command Bar bietet eine einheitliche Schnellsuche und Navigation ü
| Package | Beschreibung |
|---------|--------------|
| `@manacore/shared-ui` | CommandBar Svelte-Komponente + TypeScript-Typen |
| `@mana/shared-ui` | CommandBar Svelte-Komponente + TypeScript-Typen |
## Keyboard Shortcut
@ -111,8 +111,8 @@ interface Props {
```svelte
<script lang="ts">
import { goto } from '$app/navigation';
import { CommandBar } from '@manacore/shared-ui';
import type { CommandBarItem, QuickAction } from '@manacore/shared-ui';
import { CommandBar } from '@mana/shared-ui';
import type { CommandBarItem, QuickAction } from '@mana/shared-ui';
let commandBarOpen = $state(false);
@ -324,7 +324,7 @@ Typischerweise wird die CommandBar im App-Layout integriert:
```svelte
<!-- src/routes/(app)/+layout.svelte -->
<script lang="ts">
import { CommandBar } from '@manacore/shared-ui';
import { CommandBar } from '@mana/shared-ui';
let commandBarOpen = $state(false);
@ -358,7 +358,7 @@ Typischerweise wird die CommandBar im App-Layout integriert:
## Dateien
### @manacore/shared-ui
### @mana/shared-ui
| Datei | Beschreibung |
|-------|--------------|

View file

@ -1,6 +1,6 @@
# Central Help System
Das zentrale Help-System bietet eine einheitliche Hilfeseite für alle Manacore-Apps. Es unterstützt mehrsprachige Inhalte, Volltextsuche, und die Kombination von zentralen und app-spezifischen Inhalten.
Das zentrale Help-System bietet eine einheitliche Hilfeseite für alle Mana-Apps. Es unterstützt mehrsprachige Inhalte, Volltextsuche, und die Kombination von zentralen und app-spezifischen Inhalten.
## Architektur
@ -32,10 +32,10 @@ Das zentrale Help-System bietet eine einheitliche Hilfeseite für alle Manacore-
| Package | Beschreibung |
|---------|--------------|
| `@manacore/shared-help-types` | TypeScript-Typen und Zod-Schemas |
| `@manacore/shared-help-content` | Content-Loader, Parser, Merger, Suche |
| `@manacore/shared-help-ui` | Svelte 5 UI-Komponenten |
| `@manacore/shared-help-mobile` | React Native Komponenten |
| `@mana/shared-help-types` | TypeScript-Typen und Zod-Schemas |
| `@mana/shared-help-content` | Content-Loader, Parser, Merger, Suche |
| `@mana/shared-help-ui` | Svelte 5 UI-Komponenten |
| `@mana/shared-help-mobile` | React Native Komponenten |
## Content-Typen
@ -178,7 +178,7 @@ interface HelpContent {
Der Merger kombiniert zentrale und app-spezifische Inhalte:
```typescript
import { mergeContent, createEmptyContent } from '@manacore/shared-help-content';
import { mergeContent, createEmptyContent } from '@mana/shared-help-content';
// Zentrale Inhalte (für alle Apps)
const centralContent: HelpContent = {
@ -220,7 +220,7 @@ Inhalte werden automatisch gefiltert nach:
### Such-Index erstellen
```typescript
import { buildSearchIndex, search, createSearcher } from '@manacore/shared-help-content';
import { buildSearchIndex, search, createSearcher } from '@mana/shared-help-content';
// Index erstellen
const index = buildSearchIndex(content, {
@ -261,7 +261,7 @@ Vollständige Hilfeseite mit allen Sektionen:
```svelte
<script>
import { HelpPage } from '@manacore/shared-help-ui';
import { HelpPage } from '@mana/shared-help-ui';
import { helpContent, translations } from '$lib/help';
</script>
@ -296,7 +296,7 @@ Vollständige Hilfeseite mit allen Sektionen:
ChangelogSection,
ContactSection,
HelpSearch,
} from '@manacore/shared-help-ui';
} from '@mana/shared-help-ui';
</script>
<!-- FAQ mit Kategorien -->
@ -457,7 +457,7 @@ const translations: HelpPageTranslations = {
## Dateien
### @manacore/shared-help-types
### @mana/shared-help-types
| Datei | Beschreibung |
|-------|--------------|
@ -465,7 +465,7 @@ const translations: HelpPageTranslations = {
| `src/schemas.ts` | Zod-Validierungsschemas |
| `src/search.ts` | Such-bezogene Typen |
### @manacore/shared-help-content
### @mana/shared-help-content
| Datei | Beschreibung |
|-------|--------------|
@ -474,7 +474,7 @@ const translations: HelpPageTranslations = {
| `src/merger.ts` | Content-Merger (zentral + app-spezifisch) |
| `src/search.ts` | Volltextsuche mit Fuse.js |
### @manacore/shared-help-ui
### @mana/shared-help-ui
| Datei | Beschreibung |
|-------|--------------|
@ -497,9 +497,9 @@ const translations: HelpPageTranslations = {
```json
{
"dependencies": {
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-content": "workspace:*",
"@manacore/shared-help-ui": "workspace:*"
"@mana/shared-help-types": "workspace:*",
"@mana/shared-help-content": "workspace:*",
"@mana/shared-help-ui": "workspace:*"
}
}
```
@ -508,7 +508,7 @@ const translations: HelpPageTranslations = {
```typescript
// src/lib/help/content.ts
import type { HelpContent } from '@manacore/shared-help-types';
import type { HelpContent } from '@mana/shared-help-types';
export const appHelpContent: Partial<HelpContent> = {
faq: [
@ -543,8 +543,8 @@ export const appHelpContent: Partial<HelpContent> = {
```svelte
<!-- src/routes/(app)/help/+page.svelte -->
<script lang="ts">
import { HelpPage } from '@manacore/shared-help-ui';
import { mergeContent } from '@manacore/shared-help-content';
import { HelpPage } from '@mana/shared-help-ui';
import { mergeContent } from '@mana/shared-help-content';
import { centralContent } from '$lib/help/central';
import { appHelpContent } from '$lib/help/content';
import { translations } from '$lib/help/translations';

View file

@ -1,6 +1,6 @@
# Central Services
Dieses Verzeichnis dokumentiert zentrale Services, die von allen Manacore-Apps gemeinsam genutzt werden. Diese Services laufen in `mana-core-auth` und bieten einheitliche APIs.
Dieses Verzeichnis dokumentiert zentrale Services, die von allen Mana-Apps gemeinsam genutzt werden. Diese Services laufen in `mana-auth` und bieten einheitliche APIs.
## Übersicht
@ -16,7 +16,7 @@ Dieses Verzeichnis dokumentiert zentrale Services, die von allen Manacore-Apps g
### Zentralisierung
Bestimmte Daten und Funktionen werden zentral in `mana-core-auth` verwaltet:
Bestimmte Daten und Funktionen werden zentral in `mana-auth` verwaltet:
- **User-bezogen:** Jeder Service speichert Daten pro User (`userId`)
- **App-übergreifend:** Daten sind in allen Apps verfügbar
@ -24,10 +24,10 @@ Bestimmte Daten und Funktionen werden zentral in `mana-core-auth` verwaltet:
### Soft References
Da die Apps ihre eigenen Datenbanken haben, können keine Foreign Keys zu mana-core-auth erstellt werden:
Da die Apps ihre eigenen Datenbanken haben, können keine Foreign Keys zu mana-auth erstellt werden:
```
Todo-DB mana-core-auth-DB
Todo-DB mana-auth-DB
┌─────────────────┐ ┌─────────────────┐
│ task_to_tags │ │ tags │
│ │ │ │
@ -44,7 +44,7 @@ Für jeden zentralen Service gibt es ein entsprechendes Client-Package:
| Service | Package |
|---------|---------|
| Tags | `@manacore/shared-tags` |
| Tags | `@mana/shared-tags` |
Diese Packages enthalten:
- TypeScript Types
@ -66,7 +66,7 @@ pnpm dev:auth
### Datenbank-Schema pushen
```bash
cd services/mana-core-auth
cd services/mana-auth
pnpm db:push
```
@ -74,19 +74,19 @@ pnpm db:push
| Package | Beschreibung |
|---------|--------------|
| `@manacore/shared-tags` | Tags Client für zentrale Tags API |
| `@manacore/shared-theme` | Theme Store, A11y Store, User Settings |
| `@manacore/shared-theme-ui` | Svelte UI-Komponenten für Theming |
| `@manacore/shared-help-types` | TypeScript-Typen für Help-Inhalte |
| `@manacore/shared-help-content` | Content-Loader, Parser, Merger, Suche |
| `@manacore/shared-help-ui` | Svelte UI-Komponenten für Hilfeseite |
| `@manacore/shared-help-mobile` | React Native Komponenten für Hilfe |
| `@manacore/shared-splitscreen` | Split-Screen Container, Store, Komponenten |
| `@mana/shared-tags` | Tags Client für zentrale Tags API |
| `@mana/shared-theme` | Theme Store, A11y Store, User Settings |
| `@mana/shared-theme-ui` | Svelte UI-Komponenten für Theming |
| `@mana/shared-help-types` | TypeScript-Typen für Help-Inhalte |
| `@mana/shared-help-content` | Content-Loader, Parser, Merger, Suche |
| `@mana/shared-help-ui` | Svelte UI-Komponenten für Hilfeseite |
| `@mana/shared-help-mobile` | React Native Komponenten für Hilfe |
| `@mana/shared-splitscreen` | Split-Screen Container, Store, Komponenten |
## Hinzufügen neuer zentraler Services
1. **Schema erstellen:** `services/mana-core-auth/src/db/schema/<name>.schema.ts`
2. **Module erstellen:** `services/mana-core-auth/src/<name>/`
1. **Schema erstellen:** `services/mana-auth/src/db/schema/<name>.schema.ts`
2. **Module erstellen:** `services/mana-auth/src/<name>/`
3. **In app.module.ts registrieren**
4. **Shared Package erstellen:** `packages/shared-<name>/`
5. **Dokumentation schreiben:** `docs/central-services/<NAME>.md`

View file

@ -6,7 +6,7 @@ Das Split-Screen Feature ermöglicht es, zwei Mana-Apps nebeneinander in einem B
| Aspekt | Details |
|--------|---------|
| **Package** | `@manacore/shared-splitscreen` |
| **Package** | `@mana/shared-splitscreen` |
| **Integrierte Apps** | Calendar, Todo, Contacts |
| **Aktivierung** | Split-Button in App-Dropdown oder Ctrl/Cmd+Klick |
| **Persistenz** | URL-Parameter + localStorage |
@ -69,7 +69,7 @@ Haupt-Container mit CSS Grid Layout.
```svelte
<script>
import { SplitPaneContainer, setSplitPanelContext, DEFAULT_APPS } from '@manacore/shared-splitscreen';
import { SplitPaneContainer, setSplitPanelContext, DEFAULT_APPS } from '@mana/shared-splitscreen';
// Context initialisieren
const splitPanel = setSplitPanelContext('calendar', DEFAULT_APPS);
@ -135,7 +135,7 @@ Overlay mit Swap- und Close-Buttons.
### Initialisierung
```typescript
import { setSplitPanelContext, DEFAULT_APPS } from '@manacore/shared-splitscreen';
import { setSplitPanelContext, DEFAULT_APPS } from '@mana/shared-splitscreen';
// Im Layout-Component (z.B. +layout.svelte)
const splitPanel = setSplitPanelContext('calendar', DEFAULT_APPS);
@ -170,7 +170,7 @@ interface SplitPanelStore {
### Context-Zugriff
```typescript
import { getSplitPanelContext } from '@manacore/shared-splitscreen';
import { getSplitPanelContext } from '@mana/shared-splitscreen';
// In Child-Components
const splitPanel = getSplitPanelContext();
@ -201,7 +201,7 @@ https://calendar.app/?panel=todo&split=60
### localStorage
```typescript
// Key: manacore-splitscreen-{appId}
// Key: mana-splitscreen-{appId}
{
"version": 1,
"state": {
@ -225,7 +225,7 @@ https://calendar.app/?panel=todo&split=60
// package.json
{
"dependencies": {
"@manacore/shared-splitscreen": "workspace:*"
"@mana/shared-splitscreen": "workspace:*"
}
}
```
@ -236,12 +236,12 @@ https://calendar.app/?panel=todo&split=60
<!-- +layout.svelte -->
<script lang="ts">
import { onMount } from 'svelte';
import { PillNavigation } from '@manacore/shared-ui';
import { PillNavigation } from '@mana/shared-ui';
import {
SplitPaneContainer,
setSplitPanelContext,
DEFAULT_APPS,
} from '@manacore/shared-splitscreen';
} from '@mana/shared-splitscreen';
// Split-Panel Store initialisieren
const splitPanel = setSplitPanelContext('calendar', DEFAULT_APPS);
@ -369,7 +369,7 @@ http://localhost:5179/?panel=contacts&split=70
### localStorage löschen
```javascript
localStorage.removeItem('manacore-splitscreen-calendar');
localStorage.removeItem('manacore-splitscreen-todo');
localStorage.removeItem('manacore-splitscreen-contacts');
localStorage.removeItem('mana-splitscreen-calendar');
localStorage.removeItem('mana-splitscreen-todo');
localStorage.removeItem('mana-splitscreen-contacts');
```

View file

@ -1,12 +1,12 @@
# Central Tags API
Das zentrale Tags-System ermöglicht einheitliche Tags/Labels über alle Manacore-Apps hinweg. Ein Tag, der in Todo erstellt wird, ist automatisch auch in Calendar und Contacts verfügbar.
Das zentrale Tags-System ermöglicht einheitliche Tags/Labels über alle Mana-Apps hinweg. Ein Tag, der in Todo erstellt wird, ist automatisch auch in Calendar und Contacts verfügbar.
## Architektur
```
┌─────────────────────────────────────────────────────────────┐
│ mana-core-auth │
│ mana-auth │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ tags Tabelle (zentral) │ │
│ │ - id, userId, name, color, icon, createdAt │ │
@ -69,10 +69,10 @@ Beim Aufruf von `POST /tags/defaults` werden folgende Standard-Tags erstellt:
### Shared Package
Das `@manacore/shared-tags` Package stellt einen Client bereit:
Das `@mana/shared-tags` Package stellt einen Client bereit:
```typescript
import { createTagsClient } from '@manacore/shared-tags';
import { createTagsClient } from '@mana/shared-tags';
const tagsClient = createTagsClient({
authUrl: 'http://localhost:3001',
@ -107,7 +107,7 @@ Die Apps nutzen den Client in ihren Stores:
**Todo (labels.svelte.ts):**
```typescript
import { createTagsClient, type Tag } from '@manacore/shared-tags';
import { createTagsClient, type Tag } from '@mana/shared-tags';
// Label = Tag (Alias für Abwärtskompatibilität)
export type Label = Tag;
@ -141,7 +141,7 @@ Jede App behält ihre eigene Junction-Table für die Zuordnung:
```sql
CREATE TABLE task_to_tags (
task_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
tag_id UUID NOT NULL, -- Soft reference zu mana-core-auth.tags
tag_id UUID NOT NULL, -- Soft reference zu mana-auth.tags
PRIMARY KEY (task_id, tag_id)
);
```
@ -150,7 +150,7 @@ CREATE TABLE task_to_tags (
```sql
CREATE TABLE event_to_tags (
event_id UUID REFERENCES events(id) ON DELETE CASCADE,
tag_id UUID NOT NULL, -- Soft reference zu mana-core-auth.tags
tag_id UUID NOT NULL, -- Soft reference zu mana-auth.tags
PRIMARY KEY (event_id, tag_id)
);
```
@ -159,7 +159,7 @@ CREATE TABLE event_to_tags (
```sql
CREATE TABLE contact_to_tags (
contact_id UUID REFERENCES contacts(id) ON DELETE CASCADE,
tag_id UUID NOT NULL, -- Soft reference zu mana-core-auth.tags
tag_id UUID NOT NULL, -- Soft reference zu mana-auth.tags
PRIMARY KEY (contact_id, tag_id)
);
```
@ -203,7 +203,7 @@ curl -X POST http://localhost:3001/api/v1/tags/defaults \
## Dateien
### Backend (mana-core-auth)
### Backend (mana-auth)
| Datei | Beschreibung |
|-------|--------------|
@ -235,7 +235,7 @@ curl -X POST http://localhost:3001/api/v1/tags/defaults \
Wenn eine App vorher eigene Tags hatte:
1. **Daten exportieren:** Bestehende Tags aus der lokalen Tabelle exportieren
2. **Tags erstellen:** Per API in mana-core-auth erstellen
2. **Tags erstellen:** Per API in mana-auth erstellen
3. **IDs mappen:** Alte Tag-IDs auf neue IDs mappen
4. **Junction Tables aktualisieren:** Tag-IDs in Junction-Tables ersetzen
5. **Lokale Tabelle löschen:** Alte Tags-Tabelle entfernen

View file

@ -1,12 +1,12 @@
# Central Theming System
Das zentrale Theming-System ermöglicht einheitliches Aussehen und Benutzereinstellungen über alle Manacore-Apps hinweg. Es besteht aus mehreren Schichten: Theme-Varianten, Light/Dark-Modus und Accessibility-Einstellungen.
Das zentrale Theming-System ermöglicht einheitliches Aussehen und Benutzereinstellungen über alle Mana-Apps hinweg. Es besteht aus mehreren Schichten: Theme-Varianten, Light/Dark-Modus und Accessibility-Einstellungen.
## Architektur
```
┌─────────────────────────────────────────────────────────────┐
│ mana-core-auth │
│ mana-auth │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ user_settings (JSON-Feld) │ │
│ │ - theme: { mode, colorScheme, pinnedThemes } │ │
@ -30,8 +30,8 @@ Das zentrale Theming-System ermöglicht einheitliches Aussehen und Benutzereinst
| Package | Beschreibung |
|---------|--------------|
| `@manacore/shared-theme` | Theme Store, Types, Utilities, Konstanten |
| `@manacore/shared-theme-ui` | Svelte UI-Komponenten (ThemeSelector, ThemePage, etc.) |
| `@mana/shared-theme` | Theme Store, Types, Utilities, Konstanten |
| `@mana/shared-theme-ui` | Svelte UI-Komponenten (ThemeSelector, ThemePage, etc.) |
## Theme-Varianten
@ -109,7 +109,7 @@ background-color: hsl(var(--color-primary));
### Theme Store
```typescript
import { createThemeStore } from '@manacore/shared-theme';
import { createThemeStore } from '@mana/shared-theme';
// Store erstellen
export const theme = createThemeStore({
@ -152,7 +152,7 @@ export const theme = createThemeStore({
### User Settings Store (Server-Sync)
```typescript
import { createUserSettingsStore } from '@manacore/shared-theme';
import { createUserSettingsStore } from '@mana/shared-theme';
export const userSettings = createUserSettingsStore({
appId: 'calendar',
@ -186,7 +186,7 @@ await userSettings.updateAppOverride({
### A11y Store
```typescript
import { createA11yStore } from '@manacore/shared-theme';
import { createA11yStore } from '@mana/shared-theme';
export const a11y = createA11yStore({ appId: 'calendar' });
@ -226,7 +226,7 @@ Vollständige Themes-Seite mit allen Optionen:
```svelte
<script>
import { ThemePage } from '@manacore/shared-theme-ui';
import { ThemePage } from '@mana/shared-theme-ui';
import { theme, a11y } from '$lib/stores';
</script>
@ -247,7 +247,7 @@ Dropdown zur Theme-Auswahl:
```svelte
<script>
import { ThemeSelector } from '@manacore/shared-theme-ui';
import { ThemeSelector } from '@mana/shared-theme-ui';
import { theme } from '$lib/stores';
</script>
@ -260,7 +260,7 @@ Umschalter für Light/Dark/System:
```svelte
<script>
import { ThemeModeSelector } from '@manacore/shared-theme-ui';
import { ThemeModeSelector } from '@mana/shared-theme-ui';
import { theme } from '$lib/stores';
</script>
@ -273,7 +273,7 @@ Einfacher Dark/Light Toggle:
```svelte
<script>
import { ThemeToggle } from '@manacore/shared-theme-ui';
import { ThemeToggle } from '@mana/shared-theme-ui';
import { theme } from '$lib/stores';
</script>
@ -286,7 +286,7 @@ Vollständige Accessibility-Einstellungen:
```svelte
<script>
import { A11ySettings } from '@manacore/shared-theme-ui';
import { A11ySettings } from '@mana/shared-theme-ui';
import { a11y } from '$lib/stores';
</script>
@ -344,7 +344,7 @@ theme: {
## Dateien
### @manacore/shared-theme
### @mana/shared-theme
| Datei | Beschreibung |
|-------|--------------|
@ -358,7 +358,7 @@ theme: {
| `src/utils.ts` | Theme Utilities |
| `src/app-routes.ts` | Start-Page Konfiguration |
### @manacore/shared-theme-ui
### @mana/shared-theme-ui
| Datei | Beschreibung |
|-------|--------------|
@ -377,8 +377,8 @@ theme: {
```json
{
"dependencies": {
"@manacore/shared-theme": "workspace:*",
"@manacore/shared-theme-ui": "workspace:*"
"@mana/shared-theme": "workspace:*",
"@mana/shared-theme-ui": "workspace:*"
}
}
```
@ -387,7 +387,7 @@ theme: {
```typescript
// src/lib/stores/theme.ts
import { createThemeStore, createA11yStore } from '@manacore/shared-theme';
import { createThemeStore, createA11yStore } from '@mana/shared-theme';
export const theme = createThemeStore({
appId: 'myapp',
@ -425,7 +425,7 @@ export const a11y = createA11yStore({
```svelte
<!-- src/routes/(app)/themes/+page.svelte -->
<script>
import { ThemePage } from '@manacore/shared-theme-ui';
import { ThemePage } from '@mana/shared-theme-ui';
import { theme, a11y } from '$lib/stores/theme';
</script>

View file

@ -23,7 +23,7 @@ Mana nutzt einen Standard-Prometheus + Grafana Stack für Monitoring:
│ (6 Services) │ │ (30 Tage) │ │ (5 Dashboards) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
├── mana-core-auth (Port 3001)
├── mana-auth (Port 3001)
├── chat-backend (Port 3002)
├── todo-backend (Port 3018)
├── calendar-backend (Port 3016)
@ -245,7 +245,7 @@ services:
ports:
- "8428:8428"
networks:
- manacore-network
- mana-network
```
**Ressourcen-Vergleich (geschätzt):**
@ -304,7 +304,7 @@ GROUP BY DATE_TRUNC('month', date);
### 4.3 DuckDB Service Implementation
```typescript
// services/mana-core-auth/src/analytics/analytics.service.ts
// services/mana-auth/src/analytics/analytics.service.ts
@Injectable()
export class AnalyticsService {
private db: Database;
@ -383,7 +383,7 @@ apiVersion: 1
datasources:
- name: Business Metrics
type: simpod-json-datasource
url: http://mana-core-auth:3001/api/analytics
url: http://mana-auth:3001/api/analytics
isDefault: false
editable: false
```
@ -584,9 +584,9 @@ Die bestehende `prometheus.yml` funktioniert ohne Änderung mit VictoriaMetrics:
```yaml
# Alle Scrape-Configs bleiben identisch
scrape_configs:
- job_name: 'mana-core-auth'
- job_name: 'mana-auth'
static_configs:
- targets: ['mana-core-auth:3001']
- targets: ['mana-auth:3001']
metrics_path: '/metrics'
scrape_interval: 30s
# ... alle anderen Jobs

View file

@ -26,7 +26,7 @@ Die aktuelle Docker-Compose-Konfiguration auf dem Mac Mini hat über die Zeit 52
### 2. Container-Naming
```
manacore-{category}-{service}
mana-{category}-{service}
Categories: infra, core, app, matrix, mon, auto
```
@ -41,10 +41,10 @@ Categories: infra, core, app, matrix, mon, auto
### 4. Volume-Naming
```
manacore-{service}-data
mana-{service}-data
```
Matrix-Bot-Volumes werden zu einem konsolidiert: `manacore-matrix-bots-data`
Matrix-Bot-Volumes werden zu einem konsolidiert: `mana-matrix-bots-data`
## Consequences

View file

@ -7,7 +7,7 @@
## Übersicht
Einrichtung eines vollständigen Mail-Servers auf einem separaten Gerät für:
- Eigene Email-Adressen (@manacore.ai, @mana.how)
- Eigene Email-Adressen (@mana.how, @mana.how)
- Ausfallsichere Alert-Benachrichtigungen
- Unabhängigkeit von Gmail/externen Diensten
@ -60,7 +60,7 @@ Mailcow ist eine Docker-basierte Mail-Server-Suite mit allem dabei:
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mailcow Admin UI (https://mail.manacore.ai) │ │
│ │ Mailcow Admin UI (https://mail.mana.how) │ │
│ │ - Domain-Verwaltung │ │
│ │ - Postfach-Erstellung │ │
│ │ - Alias-Management │ │
@ -105,13 +105,13 @@ Internet
## DNS-Konfiguration
Für `manacore.ai` bei Cloudflare:
Für `mana.how` bei Cloudflare:
### MX Record
```
Type: MX
Name: @
Content: mail.manacore.ai
Content: mail.mana.how
Priority: 10
Proxy: DNS only (grey cloud)
```
@ -128,7 +128,7 @@ Proxy: DNS only (grey cloud) # WICHTIG: Kein Proxy für Mail!
```
Type: TXT
Name: @
Content: v=spf1 mx a:mail.manacore.ai ~all
Content: v=spf1 mx a:mail.mana.how ~all
```
### DKIM Record
@ -142,22 +142,22 @@ Content: <wird von Mailcow generiert>
```
Type: TXT
Name: _dmarc
Content: v=DMARC1; p=quarantine; rua=mailto:dmarc@manacore.ai
Content: v=DMARC1; p=quarantine; rua=mailto:dmarc@mana.how
```
### Autodiscover (für Mail-Clients)
```
Type: CNAME
Name: autodiscover
Content: mail.manacore.ai
Content: mail.mana.how
Type: CNAME
Name: autoconfig
Content: mail.manacore.ai
Content: mail.mana.how
Type: SRV
Name: _autodiscover._tcp
Content: 0 1 443 mail.manacore.ai
Content: 0 1 443 mail.mana.how
```
## Installation
@ -209,7 +209,7 @@ cd mailcow-dockerized
# Konfiguration generieren
sudo ./generate_config.sh
# Hostname eingeben: mail.manacore.ai
# Hostname eingeben: mail.mana.how
# Timezone: Europe/Berlin
# Container starten
@ -220,7 +220,7 @@ sudo docker compose up -d
### 4. Admin-Zugang
```
URL: https://mail.manacore.ai
URL: https://mail.mana.how
User: admin
Password: moohoo (SOFORT ÄNDERN!)
```
@ -228,7 +228,7 @@ Password: moohoo (SOFORT ÄNDERN!)
### 5. Domain hinzufügen
1. Admin UI → Configuration → Mail Setup → Domains
2. "Add domain" → `manacore.ai`
2. "Add domain" → `mana.how`
3. DKIM-Key generieren und in DNS eintragen
### 6. Postfächer erstellen
@ -236,7 +236,7 @@ Password: moohoo (SOFORT ÄNDERN!)
1. Admin UI → Configuration → Mail Setup → Mailboxes
2. "Add mailbox":
- Username: `till`
- Domain: `manacore.ai`
- Domain: `mana.how`
- Password: sicheres Passwort
- Quota: 5 GB
@ -244,12 +244,12 @@ Password: moohoo (SOFORT ÄNDERN!)
| Adresse | Typ | Verwendung |
|---------|-----|------------|
| till@manacore.ai | Postfach | Haupt-Email |
| alerts@manacore.ai | Postfach | Server-Benachrichtigungen |
| noreply@manacore.ai | Alias → till | Automatische Emails |
| support@manacore.ai | Alias → till | Kundenanfragen |
| info@manacore.ai | Alias → till | Allgemeine Anfragen |
| *@manacore.ai | Catch-All → till | Alles andere |
| till@mana.how | Postfach | Haupt-Email |
| alerts@mana.how | Postfach | Server-Benachrichtigungen |
| noreply@mana.how | Alias → till | Automatische Emails |
| support@mana.how | Alias → till | Kundenanfragen |
| info@mana.how | Alias → till | Allgemeine Anfragen |
| *@mana.how | Catch-All → till | Alles andere |
## Integration mit Mac Mini
@ -259,11 +259,11 @@ Nach Mail-Server Setup, `.env.notifications` anpassen:
```bash
# Email über eigenen Server
EMAIL_TO=alerts@manacore.ai
EMAIL_FROM=alerts@manacore.ai
SMTP_HOST=mail.manacore.ai
EMAIL_TO=alerts@mana.how
EMAIL_FROM=alerts@mana.how
SMTP_HOST=mail.mana.how
SMTP_PORT=587
SMTP_USER=alerts@manacore.ai
SMTP_USER=alerts@mana.how
SMTP_PASS=<password>
```
@ -271,16 +271,16 @@ SMTP_PASS=<password>
```bash
# ~/.msmtprc auf Mac Mini
account manacore
host mail.manacore.ai
account mana
host mail.mana.how
port 587
from alerts@manacore.ai
user alerts@manacore.ai
from alerts@mana.how
user alerts@mana.how
password <password>
auth on
tls on
account default : manacore
account default : mana
```
## Wartung
@ -331,7 +331,7 @@ sudo docker compose exec postfix-mailcow postqueue -p
### Mail-Test
```bash
# Test-Email senden
echo "Test" | mail -s "Test" till@manacore.ai
echo "Test" | mail -s "Test" till@mana.how
```
## Kosten-Übersicht
@ -371,8 +371,8 @@ echo "Test" | mail -s "Test" till@manacore.ai
### Keine Emails empfangen
1. MX-Record prüfen: `dig MX manacore.ai`
2. Port 25 offen? `telnet mail.manacore.ai 25`
1. MX-Record prüfen: `dig MX mana.how`
2. Port 25 offen? `telnet mail.mana.how 25`
3. Firewall/Router Portforwarding prüfen
### Zertifikat-Fehler

View file

@ -11,7 +11,7 @@ Temporäre Mail-Server-Installation auf dem Mac Mini bis ein dediziertes Gerät
### Vorteile
- Sofort nutzbar
- Keine zusätzliche Hardware nötig
- Eigene Email-Adressen (@manacore.ai)
- Eigene Email-Adressen (@mana.how)
### Nachteile
- Alle Dienste auf einem Gerät (Single Point of Failure)
@ -54,7 +54,7 @@ telnet <deine-öffentliche-ip> 25
#### 1.1 DNS-Records anlegen
Bei Cloudflare für `manacore.ai`:
Bei Cloudflare für `mana.how`:
```
# A-Record für Mail-Server (OHNE Proxy!)
@ -66,18 +66,18 @@ Proxy: DNS only (grey cloud)
# MX-Record
Type: MX
Name: @
Content: mail.manacore.ai
Content: mail.mana.how
Priority: 10
# SPF-Record
Type: TXT
Name: @
Content: v=spf1 mx a:mail.manacore.ai ~all
Content: v=spf1 mx a:mail.mana.how ~all
# DMARC-Record
Type: TXT
Name: _dmarc
Content: v=DMARC1; p=none; rua=mailto:till@manacore.ai
Content: v=DMARC1; p=none; rua=mailto:till@mana.how
```
#### 1.2 Router Port-Forwarding
@ -253,7 +253,7 @@ cd mailcow-dockerized
# Konfiguration generieren
./generate_config.sh
# Hostname: mail.manacore.ai
# Hostname: mail.mana.how
# Timezone: Europe/Berlin
# Ports anpassen (falls Konflikte)
@ -271,7 +271,7 @@ docker compose up -d
#### 3.1 Admin-Zugang
```
URL: https://mail.manacore.ai:8443 (oder via Tunnel)
URL: https://mail.mana.how:8443 (oder via Tunnel)
User: admin
Password: moohoo (SOFORT ÄNDERN!)
```
@ -279,24 +279,24 @@ Password: moohoo (SOFORT ÄNDERN!)
#### 3.2 Domain hinzufügen
1. Configuration → Mail Setup → Domains
2. Add domain: `manacore.ai`
2. Add domain: `mana.how`
3. DKIM-Key kopieren → in Cloudflare DNS eintragen
#### 3.3 Postfächer erstellen
| Adresse | Quota | Verwendung |
|---------|-------|------------|
| till@manacore.ai | 5 GB | Haupt-Postfach |
| alerts@manacore.ai | 1 GB | Server-Alerts |
| noreply@manacore.ai | 500 MB | Automatische Emails |
| till@mana.how | 5 GB | Haupt-Postfach |
| alerts@mana.how | 1 GB | Server-Alerts |
| noreply@mana.how | 500 MB | Automatische Emails |
#### 3.4 Aliases erstellen
| Alias | Ziel |
|-------|------|
| support@manacore.ai | till@manacore.ai |
| info@manacore.ai | till@manacore.ai |
| admin@manacore.ai | till@manacore.ai |
| support@mana.how | till@mana.how |
| info@mana.how | till@mana.how |
| admin@mana.how | till@mana.how |
### Phase 4: Cloudflare Tunnel erweitern (15 min)
@ -308,7 +308,7 @@ In `~/.cloudflared/config.yml` hinzufügen:
ingress:
# ... bestehende Einträge ...
- hostname: mail.manacore.ai
- hostname: mail.mana.how
service: https://localhost:8443
originRequest:
noTLSVerify: true
@ -337,11 +337,11 @@ tls_starttls on
logfile ~/.msmtp.log
# Eigener Mail-Server
account manacore
account mana
host localhost
port 587
from alerts@manacore.ai
user alerts@manacore.ai
from alerts@mana.how
user alerts@mana.how
password <alerts-password>
# Gmail als Fallback
@ -352,7 +352,7 @@ from tills95@gmail.com
user tills95@gmail.com
password oeyabfavixcaqzvr
account default : manacore
account default : mana
EOF
chmod 600 ~/.msmtprc
@ -366,8 +366,8 @@ TELEGRAM_BOT_TOKEN=8531397113:AAHmvzpQoWfnSGJo2-vaHuDNrpJSMOjs-AU
TELEGRAM_CHAT_ID=7117174865
# Email (neuer Server)
EMAIL_TO=till@manacore.ai
EMAIL_FROM=alerts@manacore.ai
EMAIL_TO=till@mana.how
EMAIL_FROM=alerts@mana.how
```
### Phase 6: Testing (30 min)
@ -376,22 +376,22 @@ EMAIL_FROM=alerts@manacore.ai
```bash
# Von Mac Mini
echo "Test vom Mac Mini" | msmtp -a manacore till@manacore.ai
echo "Test vom Mac Mini" | msmtp -a mana till@mana.how
# Von extern
# Email an till@manacore.ai senden
# Email an till@mana.how senden
```
#### 6.2 Empfangen testen
```bash
# Webmail öffnen
open https://mail.manacore.ai
open https://mail.mana.how
# Oder IMAP-Client konfigurieren
# Server: mail.manacore.ai
# Server: mail.mana.how
# Port: 993 (IMAPS)
# User: till@manacore.ai
# User: till@mana.how
```
#### 6.3 Spam-Score testen
@ -404,7 +404,7 @@ open https://mail.manacore.ai
```bash
# Manuell Fehler simulieren
docker stop manacore-chat-backend
docker stop mana-chat-backend
# Health Check ausführen
./scripts/mac-mini/health-check.sh
@ -412,7 +412,7 @@ docker stop manacore-chat-backend
# Prüfen ob Alert ankommt (Telegram + Email)
# Container wieder starten
docker start manacore-chat-backend
docker start mana-chat-backend
```
## Ressourcen-Monitoring
@ -508,8 +508,8 @@ Wenn später ein separates Gerät verfügbar ist:
- [ ] Router-Zugang für Port-Forwarding
### DNS (Cloudflare)
- [ ] A-Record: mail.manacore.ai → IP (ohne Proxy)
- [ ] MX-Record: manacore.ai → mail.manacore.ai
- [ ] A-Record: mail.mana.how → IP (ohne Proxy)
- [ ] MX-Record: mana.how → mail.mana.how
- [ ] SPF-Record hinzugefügt
- [ ] DMARC-Record hinzugefügt
@ -527,7 +527,7 @@ Wenn später ein separates Gerät verfügbar ist:
- [ ] Postfächer erstellt
### Cloudflare Tunnel
- [ ] mail.manacore.ai hinzugefügt
- [ ] mail.mana.how hinzugefügt
- [ ] Tunnel neugestartet
- [ ] Webmail erreichbar

View file

@ -84,7 +84,7 @@ export class ContactsClient {
```typescript
// apps/chat/apps/backend/src/chat.service.ts
import { FoundationClients } from '@manacore/foundation-clients';
import { FoundationClients } from '@mana/foundation-clients';
@Injectable()
export class ChatService {
@ -147,8 +147,8 @@ export interface TaskCompletedEvent {
```typescript
// apps/todo/apps/backend/src/task/task.service.ts
import { RedisService } from '@manacore/shared-redis';
import { FoundationEvents } from '@manacore/foundation-events';
import { RedisService } from '@mana/shared-redis';
import { FoundationEvents } from '@mana/foundation-events';
@Injectable()
export class TaskService {
@ -174,7 +174,7 @@ export class TaskService {
```typescript
// apps/calendar/apps/backend/src/calendar.module.ts
import { FoundationEvents } from '@manacore/foundation-events';
import { FoundationEvents } from '@mana/foundation-events';
@Injectable()
export class CalendarEventSubscriber implements OnModuleInit {

View file

@ -1,6 +1,6 @@
# Test Examples
This directory contains comprehensive example test files demonstrating best practices for testing different app types in the Manacore monorepo.
This directory contains comprehensive example test files demonstrating best practices for testing different app types in the Mana monorepo.
## Directory Structure