mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-19 18:41:24 +02:00
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:
parent
6f4667c2a3
commit
22a73943e1
307 changed files with 2408 additions and 4537 deletions
|
|
@ -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', () => {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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/)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|----------|-------------|---------|
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -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` |
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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', ...]
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|-------|--------------|
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
```
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue