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>
|
|
@ -119,14 +119,14 @@ STRIPE_PORTAL_CONFIG_ID=bpc_1T1PFdAZjQCYS0ZJEhF9ob7q
|
||||||
# ============================================
|
# ============================================
|
||||||
# UMAMI ANALYTICS
|
# UMAMI ANALYTICS
|
||||||
# ============================================
|
# ============================================
|
||||||
# All app modules are tracked under the unified ManaCore website ID.
|
# All app modules are tracked under the unified Mana website ID.
|
||||||
# Module segmentation happens via the `module` event property (see analytics.ts).
|
# Module segmentation happens via the `module` event property (see analytics.ts).
|
||||||
# Register new sites at https://stats.mana.how
|
# Register new sites at https://stats.mana.how
|
||||||
UMAMI_WEBSITE_ID_MANACORE=32777167-e026-4618-933a-3429120b479b
|
UMAMI_WEBSITE_ID_MANA=32777167-e026-4618-933a-3429120b479b
|
||||||
|
|
||||||
# Landing Page Website IDs (separate Astro sites, each needs its own ID)
|
# Landing Page Website IDs (separate Astro sites, each needs its own ID)
|
||||||
UMAMI_WEBSITE_ID_CHAT_LANDING=a264b165-80d2-47ab-91f4-2efc01de0b66
|
UMAMI_WEBSITE_ID_CHAT_LANDING=a264b165-80d2-47ab-91f4-2efc01de0b66
|
||||||
UMAMI_WEBSITE_ID_MANACORE_LANDING=cef3798d-85ae-47df-a44a-e9bee09dbcf9
|
UMAMI_WEBSITE_ID_MANA_LANDING=cef3798d-85ae-47df-a44a-e9bee09dbcf9
|
||||||
UMAMI_WEBSITE_ID_CARDS_LANDING=2ac83d50-107f-4d4e-ac23-5540946e96e3
|
UMAMI_WEBSITE_ID_CARDS_LANDING=2ac83d50-107f-4d4e-ac23-5540946e96e3
|
||||||
UMAMI_WEBSITE_ID_CALENDAR_LANDING=84862d98-727e-4e25-8645-639241dd1544
|
UMAMI_WEBSITE_ID_CALENDAR_LANDING=84862d98-727e-4e25-8645-639241dd1544
|
||||||
UMAMI_WEBSITE_ID_CLOCK_LANDING=0332b471-a022-46af-a726-0f45932bfd58
|
UMAMI_WEBSITE_ID_CLOCK_LANDING=0332b471-a022-46af-a726-0f45932bfd58
|
||||||
|
|
|
||||||
4
.github/workflows/ci.yml
vendored
|
|
@ -229,8 +229,8 @@ jobs:
|
||||||
done
|
done
|
||||||
|
|
||||||
# mana-web: apps/mana/apps/web + shared packages
|
# mana-web: apps/mana/apps/web + shared packages
|
||||||
MANACORE_WEB_CHANGED=$(check_pattern "apps/mana/apps/web/|apps/mana/packages/")
|
MANA_WEB_CHANGED=$(check_pattern "apps/mana/apps/web/|apps/mana/packages/")
|
||||||
if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$SHARED_UI_CHANGED" == "true" ] || [ "$SHARED_WEB_CHANGED" == "true" ] || [ "$MANACORE_WEB_CHANGED" == "true" ]; then
|
if [ "$COMMON_CHANGED" == "true" ] || [ "$SHARED_AUTH_CHANGED" == "true" ] || [ "$SHARED_UI_CHANGED" == "true" ] || [ "$SHARED_WEB_CHANGED" == "true" ] || [ "$MANA_WEB_CHANGED" == "true" ]; then
|
||||||
echo "mana-web=true" >> $GITHUB_OUTPUT
|
echo "mana-web=true" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
echo "mana-web=false" >> $GITHUB_OUTPUT
|
echo "mana-web=false" >> $GITHUB_OUTPUT
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,10 @@ TESTING_STRATEGY_AUTH_CREDITS.md
|
||||||
.prettiercache
|
.prettiercache
|
||||||
|
|
||||||
# Astro files with JSX-style comments (valid Astro but Prettier can't parse)
|
# Astro files with JSX-style comments (valid Astro but Prettier can't parse)
|
||||||
apps/manacore/apps/landing/src/components/content/HeroSection.astro
|
apps/mana/apps/landing/src/components/content/HeroSection.astro
|
||||||
apps/manacore/apps/landing/src/components/sections/ManaPrinciple.astro
|
apps/mana/apps/landing/src/components/sections/ManaPrinciple.astro
|
||||||
apps/manacore/apps/landing/src/pages/apps/index.astro
|
apps/mana/apps/landing/src/pages/apps/index.astro
|
||||||
apps/manacore/apps/landing/src/pages/privacy/index.astro
|
apps/mana/apps/landing/src/pages/privacy/index.astro
|
||||||
games/mana-games/apps/web/src/layouts/Layout.astro
|
games/mana-games/apps/web/src/layouts/Layout.astro
|
||||||
games/mana-games/apps/web/src/pages/games/[slug].astro
|
games/mana-games/apps/web/src/pages/games/[slug].astro
|
||||||
games/mana-games/apps/web/src/pages/games/*.astro
|
games/mana-games/apps/web/src/pages/games/*.astro
|
||||||
|
|
|
||||||
16
CLAUDE.md
|
|
@ -28,7 +28,7 @@ For comprehensive guidelines on code patterns and conventions, see the `.claude/
|
||||||
| [`.claude/guidelines/error-handling.md`](.claude/guidelines/error-handling.md) | Go-style Result types, error codes |
|
| [`.claude/guidelines/error-handling.md`](.claude/guidelines/error-handling.md) | Go-style Result types, error codes |
|
||||||
| [`.claude/guidelines/sveltekit-web.md`](.claude/guidelines/sveltekit-web.md) | Svelte 5 runes, stores |
|
| [`.claude/guidelines/sveltekit-web.md`](.claude/guidelines/sveltekit-web.md) | Svelte 5 runes, stores |
|
||||||
| [`.claude/guidelines/expo-mobile.md`](.claude/guidelines/expo-mobile.md) | React Native, NativeWind |
|
| [`.claude/guidelines/expo-mobile.md`](.claude/guidelines/expo-mobile.md) | React Native, NativeWind |
|
||||||
| [`.claude/guidelines/authentication.md`](.claude/guidelines/authentication.md) | Mana Core Auth integration |
|
| [`.claude/guidelines/authentication.md`](.claude/guidelines/authentication.md) | Mana Auth integration |
|
||||||
| [`.claude/guidelines/design-ux.md`](.claude/guidelines/design-ux.md) | UI patterns, animations, a11y |
|
| [`.claude/guidelines/design-ux.md`](.claude/guidelines/design-ux.md) | UI patterns, animations, a11y |
|
||||||
|
|
||||||
**Always consult these guidelines before making changes.**
|
**Always consult these guidelines before making changes.**
|
||||||
|
|
@ -276,7 +276,7 @@ Parent workspace packages (e.g., `apps/chat/package.json`, `apps/zitare/package.
|
||||||
|
|
||||||
- SvelteKit 2.x + Svelte 5
|
- SvelteKit 2.x + Svelte 5
|
||||||
- Tailwind CSS
|
- Tailwind CSS
|
||||||
- Mana Core Auth (Better Auth + EdDSA JWT)
|
- Mana Auth (Better Auth + EdDSA JWT)
|
||||||
- Local-first data (Dexie.js + mana-sync)
|
- Local-first data (Dexie.js + mana-sync)
|
||||||
- svelte-i18n (5 languages: de, en, it, fr, es)
|
- svelte-i18n (5 languages: de, en, it, fr, es)
|
||||||
|
|
||||||
|
|
@ -294,7 +294,7 @@ Parent workspace packages (e.g., `apps/chat/package.json`, `apps/zitare/package.
|
||||||
|
|
||||||
### Authentication Architecture
|
### Authentication Architecture
|
||||||
|
|
||||||
All projects use **mana-core-auth** as the central authentication service:
|
All projects use **mana-auth** as the central authentication service:
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────┐ ┌─────────────┐ ┌────────────────┐
|
┌─────────────┐ ┌─────────────┐ ┌────────────────┐
|
||||||
|
|
@ -383,9 +383,9 @@ curl http://localhost:3033/api/v1/import/vcard \
|
||||||
|
|
||||||
When adding a new app that should participate in cross-app SSO, update **all three** locations:
|
When adding a new app that should participate in cross-app SSO, update **all three** locations:
|
||||||
|
|
||||||
1. `trustedOrigins` in `services/mana-core-auth/src/auth/better-auth.config.ts`
|
1. `trustedOrigins` in `services/mana-auth/src/auth/better-auth.config.ts`
|
||||||
2. `CORS_ORIGINS` for mana-auth in `docker-compose.macmini.yml`
|
2. `CORS_ORIGINS` for mana-auth in `docker-compose.macmini.yml`
|
||||||
3. Run `pnpm test -- src/auth/sso-config.spec.ts` (from `services/mana-core-auth/`) to verify
|
3. Run `pnpm test -- src/auth/sso-config.spec.ts` (from `services/mana-auth/`) to verify
|
||||||
|
|
||||||
Missing any of these will silently break SSO for that app.
|
Missing any of these will silently break SSO for that app.
|
||||||
|
|
||||||
|
|
@ -868,8 +868,8 @@ pnpm dev:landing-builder
|
||||||
```
|
```
|
||||||
|
|
||||||
**How it works:**
|
**How it works:**
|
||||||
1. Org admin configures landing page at `/organizations/{id}/landing` in the Manacore web dashboard
|
1. Org admin configures landing page at `/organizations/{id}/landing` in the Mana web dashboard
|
||||||
2. Config is stored in `organizations.metadata.landingPage` (mana-core-auth)
|
2. Config is stored in `organizations.metadata.landingPage` (mana-auth)
|
||||||
3. On publish, the builder service generates a static Astro site from the config
|
3. On publish, the builder service generates a static Astro site from the config
|
||||||
4. Site is deployed to Cloudflare Pages as `org-{slug}` → `{slug}.mana.how`
|
4. Site is deployed to Cloudflare Pages as `org-{slug}` → `{slug}.mana.how`
|
||||||
|
|
||||||
|
|
@ -1074,7 +1074,7 @@ Each project has its own `CLAUDE.md` with detailed information:
|
||||||
- `apps/cards/CLAUDE.md` - Card/deck management
|
- `apps/cards/CLAUDE.md` - Card/deck management
|
||||||
- `apps/chat/CLAUDE.md` - Chat API endpoints, AI models
|
- `apps/chat/CLAUDE.md` - Chat API endpoints, AI models
|
||||||
- `apps/picture/CLAUDE.md` - AI image generation
|
- `apps/picture/CLAUDE.md` - AI image generation
|
||||||
- `services/mana-core-auth/` - Central authentication service
|
- `services/mana-auth/` - Central authentication service
|
||||||
- `services/mana-search/CLAUDE.md` - Search & content extraction service (Go)
|
- `services/mana-search/CLAUDE.md` - Search & content extraction service (Go)
|
||||||
- `services/mana-crawler/CLAUDE.md` - Web crawler service (Go)
|
- `services/mana-crawler/CLAUDE.md` - Web crawler service (Go)
|
||||||
- `services/mana-notify/CLAUDE.md` - Notification service (Go)
|
- `services/mana-notify/CLAUDE.md` - Notification service (Go)
|
||||||
|
|
|
||||||
|
|
@ -401,7 +401,7 @@ Garten:
|
||||||
║ Server-autoritative Physik + Script-Execution ║
|
║ Server-autoritative Physik + Script-Execution ║
|
||||||
║ Orchestriert von Go-Service ║
|
║ Orchestriert von Go-Service ║
|
||||||
╠═══════════════════════════════════════════════════════════╣
|
╠═══════════════════════════════════════════════════════════╣
|
||||||
║ BACKEND (bestehende Manacore-Services) ║
|
║ BACKEND (bestehende Mana-Services) ║
|
||||||
║ Go: Orchestrator, Matchmaker, Sync, Notify, Search ║
|
║ Go: Orchestrator, Matchmaker, Sync, Notify, Search ║
|
||||||
║ Hono: Auth, Credits, User, Subscriptions, Analytics ║
|
║ Hono: Auth, Credits, User, Subscriptions, Analytics ║
|
||||||
║ Python: LLM (NPCs), Image Gen, STT, TTS ║
|
║ Python: LLM (NPCs), Image Gen, STT, TTS ║
|
||||||
|
|
@ -791,9 +791,9 @@ DIREKT NUTZBAR (0 Aufwand):
|
||||||
|
|
||||||
ANPASSBAR (geringer Aufwand):
|
ANPASSBAR (geringer Aufwand):
|
||||||
mana-sync (+ Chunk-Sync, Item-Sync)
|
mana-sync (+ Chunk-Sync, Item-Sync)
|
||||||
@manacore/local-store (+ Voxel Collections)
|
@mana/local-store (+ Voxel Collections)
|
||||||
@manacore/shared-auth (unveraendert)
|
@mana/shared-auth (unveraendert)
|
||||||
@manacore/shared-ui (+ Editor-Komponenten)
|
@mana/shared-ui (+ Editor-Komponenten)
|
||||||
|
|
||||||
NEU ZU BAUEN:
|
NEU ZU BAUEN:
|
||||||
Bevy Voxel Engine (Client + Server)
|
Bevy Voxel Engine (Client + Server)
|
||||||
|
|
@ -1016,4 +1016,4 @@ BUDGET: ~50 MB RAM, ~1.8M Dreiecke, 60fps Desktop, 30fps Mobile
|
||||||
---
|
---
|
||||||
|
|
||||||
*Erstellt: 28. Maerz 2026*
|
*Erstellt: 28. Maerz 2026*
|
||||||
*Projekt: ManaVoxel -- Teil des Manacore-Oekosystems*
|
*Projekt: ManaVoxel -- Teil des Mana-Oekosystems*
|
||||||
|
|
|
||||||
|
|
@ -345,7 +345,7 @@ Transaktion: Alice kauft Item in Bobs Game fuer 100 Mana
|
||||||
│ TypeScript (30%) │
|
│ TypeScript (30%) │
|
||||||
│ ├── Svelte 5 UI (Editor, Marketplace, Social) │
|
│ ├── Svelte 5 UI (Editor, Marketplace, Social) │
|
||||||
│ ├── Hono Services (auth, credits, user, subs) │
|
│ ├── Hono Services (auth, credits, user, subs) │
|
||||||
│ ├── Shared Packages (@manacore/*) │
|
│ ├── Shared Packages (@mana/*) │
|
||||||
│ ├── User Game Scripts (→ WASM kompiliert) │
|
│ ├── User Game Scripts (→ WASM kompiliert) │
|
||||||
│ └── Local-First Layer (Dexie.js) │
|
│ └── Local-First Layer (Dexie.js) │
|
||||||
│ │
|
│ │
|
||||||
|
|
|
||||||
|
|
@ -927,4 +927,4 @@ NEUER CODE: ~15.000-25.000 Zeilen TypeScript + ~5.000 Zeilen Go
|
||||||
---
|
---
|
||||||
|
|
||||||
*Erstellt: 28. Maerz 2026*
|
*Erstellt: 28. Maerz 2026*
|
||||||
*Projekt: ManaVoxel 2D -- Teil des Manacore-Oekosystems*
|
*Projekt: ManaVoxel 2D -- Teil des Mana-Oekosystems*
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Roblox Reimagined: Stack-Optionen fuer Manacore
|
# Roblox Reimagined: Stack-Optionen fuer Mana
|
||||||
|
|
||||||
## Welche Technologien koennten wir nutzen -- und was haben wir bereits?
|
## Welche Technologien koennten wir nutzen -- und was haben wir bereits?
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ Wir betreiben bereits ein komplexes, polyglot, selbst-gehostetes Oekosystem:
|
||||||
| **Hono Services (5)** | Hono 4.7 + Bun, Drizzle ORM | auth, credits, user, subscriptions, analytics |
|
| **Hono Services (5)** | Hono 4.7 + Bun, Drizzle ORM | auth, credits, user, subscriptions, analytics |
|
||||||
| **Python AI (5+)** | FastAPI, MLX, Whisper, FLUX | llm, image-gen, stt, tts, voice-bot |
|
| **Python AI (5+)** | FastAPI, MLX, Whisper, FLUX | llm, image-gen, stt, tts, voice-bot |
|
||||||
| **Frontend (19 Apps)** | SvelteKit 2 + Svelte 5 + Tailwind 4 | Todo, Chat, Calendar, Photos, etc. |
|
| **Frontend (19 Apps)** | SvelteKit 2 + Svelte 5 + Tailwind 4 | Todo, Chat, Calendar, Photos, etc. |
|
||||||
| **Mobile** | Expo 55 + React Native 0.83 + NativeWind | Mana, Traces |
|
| **Mobile** | Expo 55 + React Native 0.83 + NativeWind | Mana, Traces |
|
||||||
| **Local-First** | Dexie.js + mana-sync (Go WebSocket) | 19 Apps migriert |
|
| **Local-First** | Dexie.js + mana-sync (Go WebSocket) | 19 Apps migriert |
|
||||||
| **Datenbank** | PostgreSQL 16 | Alle Services |
|
| **Datenbank** | PostgreSQL 16 | Alle Services |
|
||||||
| **Cache** | Redis 7 | Rate Limiting, Sessions |
|
| **Cache** | Redis 7 | Rate Limiting, Sessions |
|
||||||
|
|
@ -657,16 +657,16 @@ Option B ("Ambitioniert") ist der beste Kompromiss:
|
||||||
|
|
||||||
### Anpassbar (moderater Umbau)
|
### Anpassbar (moderater Umbau)
|
||||||
|
|
||||||
| Komponente | Basis | Aenderung |
|
| Komponente | Basis | Aenderung |
|
||||||
| ---------------- | --------------------------- | ------------------------------------------- |
|
| ---------------- | ----------------------- | ------------------------------------------- |
|
||||||
| Local-First Sync | mana-sync | Game-World-Sync + Asset-Sync hinzufuegen |
|
| Local-First Sync | mana-sync | Game-World-Sync + Asset-Sync hinzufuegen |
|
||||||
| Local Store | @manacore/local-store | Game-Collections (worlds, assets, progress) |
|
| Local Store | @mana/local-store | Game-Collections (worlds, assets, progress) |
|
||||||
| Shared Auth | @manacore/shared-auth | Unveraendert, in neuer App nutzen |
|
| Shared Auth | @mana/shared-auth | Unveraendert, in neuer App nutzen |
|
||||||
| Shared UI | @manacore/shared-ui | Editor-Komponenten ergaenzen |
|
| Shared UI | @mana/shared-ui | Editor-Komponenten ergaenzen |
|
||||||
| API Client | @manacore/shared-api-client | Game-Server-Endpoints hinzufuegen |
|
| API Client | @mana/shared-api-client | Game-Server-Endpoints hinzufuegen |
|
||||||
| PWA | @manacore/shared-pwa | Offline-Game-Support |
|
| PWA | @mana/shared-pwa | Offline-Game-Support |
|
||||||
| i18n | @manacore/shared-i18n | Game-spezifische Strings |
|
| i18n | @mana/shared-i18n | Game-spezifische Strings |
|
||||||
| Analytics | mana-analytics | Game-Metriken (Plays, Retention) |
|
| Analytics | mana-analytics | Game-Metriken (Plays, Retention) |
|
||||||
|
|
||||||
### Neu zu bauen
|
### Neu zu bauen
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
# Manacore Monorepo
|
# Mana Monorepo
|
||||||
|
|
||||||
Monorepo containing all Manacore projects — a self-hosted multi-app ecosystem with shared packages and unified tooling.
|
Monorepo containing all Mana projects — a self-hosted multi-app ecosystem with shared packages and unified tooling.
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
|
|
||||||
| Project | Description | Apps |
|
| Project | Description | Apps |
|
||||||
|---------|-------------|------|
|
|---------|-------------|------|
|
||||||
| **manacore** | Multi-app ecosystem platform | Expo mobile, SvelteKit web |
|
| **mana** | Multi-app ecosystem platform | Expo mobile, SvelteKit web |
|
||||||
| **chat** | AI chat application | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
|
| **chat** | AI chat application | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
|
||||||
| **todo** | Task management | NestJS backend, SvelteKit web, Astro landing |
|
| **todo** | Task management | NestJS backend, SvelteKit web, Astro landing |
|
||||||
| **calendar** | Calendar & scheduling | NestJS backend, SvelteKit web, Astro landing |
|
| **calendar** | Calendar & scheduling | NestJS backend, SvelteKit web, Astro landing |
|
||||||
|
|
@ -62,7 +62,7 @@ See [CLAUDE.md](./CLAUDE.md) for comprehensive development documentation.
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
```
|
```
|
||||||
manacore-monorepo/
|
mana-monorepo/
|
||||||
├── apps/ # Product applications
|
├── apps/ # Product applications
|
||||||
├── services/ # Microservices (auth, search, LLM, bots)
|
├── services/ # Microservices (auth, search, LLM, bots)
|
||||||
├── packages/ # Shared packages
|
├── packages/ # Shared packages
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Troubleshooting Guide
|
# Troubleshooting Guide
|
||||||
|
|
||||||
Common issues and solutions for the manacore-monorepo.
|
Common issues and solutions for the mana-monorepo.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
|
|
@ -242,7 +242,7 @@ pnpm turbo run lint --filter=presi
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Add shared config
|
# Add shared config
|
||||||
pnpm add -D @manacore/eslint-config --filter @myapp/backend
|
pnpm add -D @mana/eslint-config --filter @myapp/backend
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Incompatible ESLint versions**
|
2. **Incompatible ESLint versions**
|
||||||
|
|
@ -297,7 +297,7 @@ Using **type-only imports** (`import {X }`) for classes that need to be injected
|
||||||
### ❌ WRONG - Type-Only Import
|
### ❌ WRONG - Type-Only Import
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// services/mana-core-auth/src/ai/ai.service.ts - DON'T DO THIS!
|
// services/mana-auth/src/ai/ai.service.ts - DON'T DO THIS!
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config'; // ❌ Type-only import
|
import { ConfigService } from '@nestjs/config'; // ❌ Type-only import
|
||||||
|
|
||||||
|
|
@ -320,7 +320,7 @@ export class AiService {
|
||||||
### ✅ CORRECT - Regular Import
|
### ✅ CORRECT - Regular Import
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// services/mana-core-auth/src/ai/ai.service.ts - CORRECT
|
// services/mana-auth/src/ai/ai.service.ts - CORRECT
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config'; // ✅ Regular import
|
import { ConfigService } from '@nestjs/config'; // ✅ Regular import
|
||||||
|
|
||||||
|
|
@ -361,8 +361,8 @@ export class AiService {
|
||||||
4. Rebuild and test:
|
4. Rebuild and test:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm --filter mana-core-auth build
|
pnpm --filter mana-auth build
|
||||||
pnpm --filter mana-core-auth start:dev
|
pnpm --filter mana-auth start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### Debugging
|
### Debugging
|
||||||
|
|
@ -384,10 +384,10 @@ export class AiModule {}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build the service
|
# Build the service
|
||||||
pnpm --filter mana-core-auth build
|
pnpm --filter mana-auth build
|
||||||
|
|
||||||
# Check the compiled output
|
# Check the compiled output
|
||||||
cat services/mana-core-auth/dist/ai/ai.service.js | grep "require"
|
cat services/mana-auth/dist/ai/ai.service.js | grep "require"
|
||||||
|
|
||||||
# Should see:
|
# Should see:
|
||||||
# const config_1 = require("@nestjs/config"); ✅ Good
|
# const config_1 = require("@nestjs/config"); ✅ Good
|
||||||
|
|
@ -401,7 +401,7 @@ If the error only happens in Docker but not locally:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build Docker image without cache
|
# Build Docker image without cache
|
||||||
docker build --no-cache -f services/mana-core-auth/Dockerfile -t test .
|
docker build --no-cache -f services/mana-auth/Dockerfile -t test .
|
||||||
|
|
||||||
# Check the compiled code in the image
|
# Check the compiled code in the image
|
||||||
docker run --rm --entrypoint cat test /app/dist/ai/ai.service.js
|
docker run --rm --entrypoint cat test /app/dist/ai/ai.service.js
|
||||||
|
|
@ -409,7 +409,7 @@ docker run --rm --entrypoint cat test /app/dist/ai/ai.service.js
|
||||||
|
|
||||||
### Related Issues
|
### Related Issues
|
||||||
|
|
||||||
- [Commit d69cc607](https://github.com/Memo-2023/manacore-monorepo/commit/d69cc607) - Fixed type-only ConfigService import in AiService
|
- [Commit d69cc607](https://github.com/Memo-2023/mana-monorepo/commit/d69cc607) - Fixed type-only ConfigService import in AiService
|
||||||
- TypeScript `import type` vs `import {}` - both erase at compile time
|
- TypeScript `import type` vs `import {}` - both erase at compile time
|
||||||
- Docker layer caching can hide fixes if source wasn't properly copied
|
- Docker layer caching can hide fixes if source wasn't properly copied
|
||||||
|
|
||||||
|
|
@ -425,7 +425,7 @@ docker run --rm --entrypoint cat test /app/dist/ai/ai.service.js
|
||||||
|
|
||||||
If you encounter an issue not covered here:
|
If you encounter an issue not covered here:
|
||||||
|
|
||||||
1. Check the [GitHub Issues](https://github.com/Memo-2023/manacore-monorepo/issues)
|
1. Check the [GitHub Issues](https://github.com/Memo-2023/mana-monorepo/issues)
|
||||||
2. Review recent commits that may have introduced the issue
|
2. Review recent commits that may have introduced the issue
|
||||||
3. Run `pnpm clean` and `pnpm install` to reset
|
3. Run `pnpm clean` and `pnpm install` to reset
|
||||||
4. Create a new issue with full error logs
|
4. Create a new issue with full error logs
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ pnpm preview # Preview build
|
||||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||||
| **Landing** | Astro 5.x, Tailwind CSS |
|
| **Landing** | Astro 5.x, Tailwind CSS |
|
||||||
| **Mobile** | React Native 0.81 + Expo SDK 54, NativeWind [TODO] |
|
| **Mobile** | React Native 0.81 + Expo SDK 54, NativeWind [TODO] |
|
||||||
| **Auth** | Mana Core Auth (JWT) |
|
| **Auth** | Mana Auth (JWT) |
|
||||||
| **i18n** | svelte-i18n (DE, EN, FR, ES, IT) |
|
| **i18n** | svelte-i18n (DE, EN, FR, ES, IT) |
|
||||||
| **Dates** | date-fns |
|
| **Dates** | date-fns |
|
||||||
| **Sync** | ical.js, tsdav (CalDAV) |
|
| **Sync** | ical.js, tsdav (CalDAV) |
|
||||||
|
|
@ -406,7 +406,7 @@ FREQ=WEEKLY;UNTIL=20241231T235959Z # Wöchentlich bis Ende 2024
|
||||||
```env
|
```env
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3014
|
PORT=3014
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/calendar
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/calendar
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
CORS_ORIGINS=http://localhost:5173,http://localhost:5179,http://localhost:8081
|
CORS_ORIGINS=http://localhost:5173,http://localhost:5179,http://localhost:8081
|
||||||
|
|
||||||
|
|
@ -536,7 +536,7 @@ Priority: explicit duration in text > history estimate > default fallback > 1h (
|
||||||
docker compose -f docker-compose.dev.yml up -d postgres
|
docker compose -f docker-compose.dev.yml up -d postgres
|
||||||
|
|
||||||
# Datenbank erstellen
|
# Datenbank erstellen
|
||||||
PGPASSWORD=devpassword psql -h localhost -U manacore -d postgres -c "CREATE DATABASE calendar;"
|
PGPASSWORD=devpassword psql -h localhost -U mana -d postgres -c "CREATE DATABASE calendar;"
|
||||||
|
|
||||||
# Schema pushen
|
# Schema pushen
|
||||||
pnpm calendar:db:push
|
pnpm calendar:db:push
|
||||||
|
|
@ -615,7 +615,7 @@ curl -X POST http://localhost:3014/api/v1/events \
|
||||||
| **Accessibility** | ✅ | Focus trapping in all modals, ARIA roles, keyboard navigation |
|
| **Accessibility** | ✅ | Focus trapping in all modals, ARIA roles, keyboard navigation |
|
||||||
| **Rate Limiting** | ✅ | ThrottlerGuard global (100 req/min) |
|
| **Rate Limiting** | ✅ | ThrottlerGuard global (100 req/min) |
|
||||||
| **API Validation** | ✅ | DTOs with class-validator, whitelist + forbidNonWhitelisted |
|
| **API Validation** | ✅ | DTOs with class-validator, whitelist + forbidNonWhitelisted |
|
||||||
| **Auth** | ✅ | JWT via mana-core-auth, guards on all controllers |
|
| **Auth** | ✅ | JWT via mana-auth, guards on all controllers |
|
||||||
| **Toast System** | ✅ | All toast messages localized via svelte-i18n |
|
| **Toast System** | ✅ | All toast messages localized via svelte-i18n |
|
||||||
| **Docker** | ✅ | Multi-stage build, health checks, entrypoint script |
|
| **Docker** | ✅ | Multi-stage build, health checks, entrypoint script |
|
||||||
| **Tests** | ✅ | 13 unit tests, 7 E2E test suites (Playwright) |
|
| **Tests** | ✅ | 13 unit tests, 7 E2E test suites (Playwright) |
|
||||||
|
|
@ -652,7 +652,7 @@ pnpm --filter @calendar/web test:e2e
|
||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
1. **Authentication**: Nutzt Mana Core Auth (JWT im Authorization Header)
|
1. **Authentication**: Nutzt Mana Auth (JWT im Authorization Header)
|
||||||
2. **Database**: PostgreSQL mit Drizzle ORM (Port 5432)
|
2. **Database**: PostgreSQL mit Drizzle ORM (Port 5432)
|
||||||
3. **Port**: Server läuft auf Port 3014
|
3. **Port**: Server läuft auf Port 3014
|
||||||
4. **Recurrence**: Verwendet RFC 5545 RRULE Format
|
4. **Recurrence**: Verwendet RFC 5545 RRULE Format
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ Eine vollständige Kalender-Anwendung mit persönlichen und geteilten Kalendern,
|
||||||
docker compose -f docker-compose.dev.yml up -d postgres
|
docker compose -f docker-compose.dev.yml up -d postgres
|
||||||
|
|
||||||
# 2. Datenbank erstellen
|
# 2. Datenbank erstellen
|
||||||
PGPASSWORD=devpassword psql -h localhost -U manacore -d postgres -c "CREATE DATABASE calendar;"
|
PGPASSWORD=devpassword psql -h localhost -U mana -d postgres -c "CREATE DATABASE calendar;"
|
||||||
|
|
||||||
# 3. Schema pushen
|
# 3. Schema pushen
|
||||||
pnpm calendar:db:push
|
pnpm calendar:db:push
|
||||||
|
|
@ -44,7 +44,7 @@ pnpm dev:calendar:app
|
||||||
- **Backend**: NestJS, Drizzle ORM, PostgreSQL
|
- **Backend**: NestJS, Drizzle ORM, PostgreSQL
|
||||||
- **Web**: SvelteKit, Svelte 5, Tailwind CSS
|
- **Web**: SvelteKit, Svelte 5, Tailwind CSS
|
||||||
- **Landing**: Astro, Tailwind CSS
|
- **Landing**: Astro, Tailwind CSS
|
||||||
- **Auth**: Mana Core Auth (JWT)
|
- **Auth**: Mana Auth (JWT)
|
||||||
|
|
||||||
## Dokumentation
|
## Dokumentation
|
||||||
|
|
||||||
|
|
@ -76,4 +76,4 @@ pnpm calendar:db:studio # Drizzle Studio öffnen
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
Proprietär - Manacore
|
Proprietär - Mana
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ const links = {
|
||||||
© {currentYear} Kalender. Alle Rechte vorbehalten.
|
© {currentYear} Kalender. Alle Rechte vorbehalten.
|
||||||
</p>
|
</p>
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
Ein <a href="https://mana.how" class="text-primary-400 hover:underline">Manacore</a> Produkt
|
Ein <a href="https://mana.how" class="text-primary-400 hover:underline">Mana</a> Produkt
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ Or create manually:
|
||||||
# Use the SAME project as Cloud Run deployment
|
# Use the SAME project as Cloud Run deployment
|
||||||
PROJECT_ID="mana-core-453821"
|
PROJECT_ID="mana-core-453821"
|
||||||
|
|
||||||
# Generate service key (used for Mana Core authentication)
|
# Generate service key (used for Mana authentication)
|
||||||
SERVICE_KEY=$(openssl rand -base64 32)
|
SERVICE_KEY=$(openssl rand -base64 32)
|
||||||
|
|
||||||
# Create secrets in the SAME project where Cloud Run will be deployed
|
# Create secrets in the SAME project where Cloud Run will be deployed
|
||||||
|
|
@ -944,7 +944,7 @@ Health check failed with HTTP 503
|
||||||
**Common Causes**:
|
**Common Causes**:
|
||||||
1. Missing environment variables
|
1. Missing environment variables
|
||||||
2. Can't connect to Supabase
|
2. Can't connect to Supabase
|
||||||
3. Can't connect to Mana Core
|
3. Can't connect to Mana
|
||||||
4. Application error on startup
|
4. Application error on startup
|
||||||
|
|
||||||
**Debugging**:
|
**Debugging**:
|
||||||
|
|
@ -1174,9 +1174,9 @@ Adjust in workflow:
|
||||||
| Variable | Location | Purpose |
|
| Variable | Location | Purpose |
|
||||||
|----------|----------|---------|
|
|----------|----------|---------|
|
||||||
| `NODE_ENV` | Cloud Run | Set to `production` |
|
| `NODE_ENV` | Cloud Run | Set to `production` |
|
||||||
| `MANA_SERVICE_URL` | GCP Secret | Mana Core API URL |
|
| `MANA_SERVICE_URL` | GCP Secret | Mana API URL |
|
||||||
| `APP_ID` | GCP Secret | Cards app identifier |
|
| `APP_ID` | GCP Secret | Cards app identifier |
|
||||||
| `SERVICE_KEY` | GCP Secret | Mana Core auth key |
|
| `SERVICE_KEY` | GCP Secret | Mana auth key |
|
||||||
| `SUPABASE_URL` | GCP Secret | Supabase project URL |
|
| `SUPABASE_URL` | GCP Secret | Supabase project URL |
|
||||||
| `SUPABASE_ANON_KEY` | GCP Secret | Supabase anonymous key |
|
| `SUPABASE_ANON_KEY` | GCP Secret | Supabase anonymous key |
|
||||||
| `SUPABASE_SERVICE_KEY` | GCP Secret | Supabase service role key |
|
| `SUPABASE_SERVICE_KEY` | GCP Secret | Supabase service role key |
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
# Cards Credit System
|
# Cards Credit System
|
||||||
|
|
||||||
This document explains how the Mana Core credit system is integrated into Cards.
|
This document explains how the Mana credit system is integrated into Cards.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Cards uses **Mana** as its credit currency to charge for operations like deck creation, card generation, and AI features. The credit system is powered by [Mana Core](https://github.com/Memo-2023/mana-core-nestjs-package), which provides:
|
Cards uses **Mana** as its credit currency to charge for operations like deck creation, card generation, and AI features. The credit system is powered by [Mana](https://github.com/Memo-2023/mana-core-nestjs-package), which provides:
|
||||||
|
|
||||||
- Credit validation before operations
|
- Credit validation before operations
|
||||||
- Credit consumption after successful operations
|
- Credit consumption after successful operations
|
||||||
|
|
@ -51,7 +51,7 @@ These costs are defined in `backend/src/config/credit-operations.ts`.
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
┌─────────────┐
|
┌─────────────┐
|
||||||
│ Mana Core │ - Validate balance
|
│ Mana │ - Validate balance
|
||||||
│ Service │ - Deduct credits
|
│ Service │ - Deduct credits
|
||||||
│ │ - Record transaction
|
│ │ - Record transaction
|
||||||
└─────────────┘
|
└─────────────┘
|
||||||
|
|
@ -61,7 +61,7 @@ These costs are defined in `backend/src/config/credit-operations.ts`.
|
||||||
|
|
||||||
### 1. Service Key Configuration
|
### 1. Service Key Configuration
|
||||||
|
|
||||||
The backend needs a service key from Mana Core to perform credit operations.
|
The backend needs a service key from Mana to perform credit operations.
|
||||||
|
|
||||||
**backend/.env**:
|
**backend/.env**:
|
||||||
```env
|
```env
|
||||||
|
|
@ -500,7 +500,7 @@ SERVICE_KEY=your-actual-service-key-from-mana-core
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [Mana Core Documentation](https://docs.mana-core.com)
|
- [Mana Documentation](https://docs.mana-core.com)
|
||||||
- [Mana Core NestJS Package](https://github.com/Memo-2023/mana-core-nestjs-package)
|
- [Mana NestJS Package](https://github.com/Memo-2023/mana-core-nestjs-package)
|
||||||
- [Integration Guide](./MANA_CORE_INTEGRATION_GUIDE.md)
|
- [Integration Guide](./MANA_CORE_INTEGRATION_GUIDE.md)
|
||||||
- [Example Implementation](./apps/mobile/examples/DeckCreationExample.tsx)
|
- [Example Implementation](./apps/mobile/examples/DeckCreationExample.tsx)
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ for SECRET in MANA_SERVICE_URL CARDS_APP_ID CARDS_SERVICE_KEY CARDS_SUPABASE_URL
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
**IMPORTANT**: Add the generated `SERVICE_KEY` to mana-core-middleware's `APP_SERVICE_KEYS`:
|
**IMPORTANT**: Add the generated `SERVICE_KEY` to mana-middleware's `APP_SERVICE_KEYS`:
|
||||||
|
|
||||||
```
|
```
|
||||||
APP_SERVICE_KEYS=existing-apps,YOUR_APP_ID:YOUR_SERVICE_KEY
|
APP_SERVICE_KEYS=existing-apps,YOUR_APP_ID:YOUR_SERVICE_KEY
|
||||||
|
|
@ -219,7 +219,7 @@ gcloud secrets add-iam-policy-binding CARDS_APP_ID \
|
||||||
|
|
||||||
1. Missing environment variables/secrets
|
1. Missing environment variables/secrets
|
||||||
2. Can't connect to Supabase
|
2. Can't connect to Supabase
|
||||||
3. Can't connect to Mana Core
|
3. Can't connect to Mana
|
||||||
|
|
||||||
**Debug**:
|
**Debug**:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Mana Core Architecture in Storyteller
|
# Mana Architecture in Storyteller
|
||||||
|
|
||||||
This document explains the architecture and data flow of the Mana Core integration in the Storyteller project.
|
This document explains the architecture and data flow of the Mana integration in the Storyteller project.
|
||||||
|
|
||||||
## System Architecture
|
## System Architecture
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@ This document explains the architecture and data flow of the Mana Core integrati
|
||||||
├─────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────┤
|
||||||
│ │
|
│ │
|
||||||
│ ┌───────────────────────────────────────────────────────────┐ │
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
||||||
│ │ Mana Core NestJS Integration │ │
|
│ │ Mana NestJS Integration │ │
|
||||||
│ ├───────────────────────────────────────────────────────────┤ │
|
│ ├───────────────────────────────────────────────────────────┤ │
|
||||||
│ │ │ │
|
│ │ │ │
|
||||||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
||||||
|
|
@ -73,7 +73,7 @@ This document explains the architecture and data flow of the Mana Core integrati
|
||||||
│ Credit Operations)
|
│ Credit Operations)
|
||||||
▼
|
▼
|
||||||
┌─────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
│ Mana Core Service │
|
│ Mana Service │
|
||||||
│ (Authentication & Credits) │
|
│ (Authentication & Credits) │
|
||||||
├─────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────┤
|
||||||
│ │
|
│ │
|
||||||
|
|
@ -383,7 +383,7 @@ const CREDIT_COSTS = {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Mana Core**: Processes credit operations
|
3. **Mana**: Processes credit operations
|
||||||
- Validates user has sufficient credits
|
- Validates user has sufficient credits
|
||||||
- Deducts credits from user's balance
|
- Deducts credits from user's balance
|
||||||
- Records transaction in ledger
|
- Records transaction in ledger
|
||||||
|
|
@ -476,8 +476,8 @@ async getCharacters(
|
||||||
### Backend `.env`
|
### Backend `.env`
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Mana Core (Required)
|
# Mana (Required)
|
||||||
MANA_SERVICE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MANA_SERVICE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
APP_ID=8d2f5ddb-e251-4b3b-8802-84022a7ac77f
|
APP_ID=8d2f5ddb-e251-4b3b-8802-84022a7ac77f
|
||||||
MANA_SUPABASE_SECRET_KEY=your-service-key
|
MANA_SUPABASE_SECRET_KEY=your-service-key
|
||||||
|
|
||||||
|
|
@ -504,7 +504,7 @@ EXPO_PUBLIC_STORYTELLER_BACKEND_URL=http://localhost:3002
|
||||||
|
|
||||||
## Key Takeaways
|
## Key Takeaways
|
||||||
|
|
||||||
### What Mana Core Provides
|
### What Mana Provides
|
||||||
|
|
||||||
1. **Authentication System**
|
1. **Authentication System**
|
||||||
- ✅ Email/password sign-in/sign-up
|
- ✅ Email/password sign-in/sign-up
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Mana Core Integration Checklist
|
# Mana Integration Checklist
|
||||||
|
|
||||||
Use this checklist when integrating `@mana-core/nestjs-integration` into a new NestJS project.
|
Use this checklist when integrating `@mana-core/nestjs-integration` into a new NestJS project.
|
||||||
|
|
||||||
|
|
@ -7,7 +7,7 @@ Use this checklist when integrating `@mana-core/nestjs-integration` into a new N
|
||||||
- [ ] NestJS v10+ application set up
|
- [ ] NestJS v10+ application set up
|
||||||
- [ ] `@nestjs/config` installed
|
- [ ] `@nestjs/config` installed
|
||||||
- [ ] Node.js v18+ and npm/yarn
|
- [ ] Node.js v18+ and npm/yarn
|
||||||
- [ ] Mana Core credentials obtained:
|
- [ ] Mana credentials obtained:
|
||||||
- [ ] `MANA_SERVICE_URL`
|
- [ ] `MANA_SERVICE_URL`
|
||||||
- [ ] `APP_ID`
|
- [ ] `APP_ID`
|
||||||
- [ ] `MANA_SUPABASE_SECRET_KEY` (service key)
|
- [ ] `MANA_SUPABASE_SECRET_KEY` (service key)
|
||||||
|
|
@ -329,7 +329,7 @@ Use this checklist when integrating `@mana-core/nestjs-integration` into a new N
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Create integration tests with real Mana Core module
|
- [ ] Create integration tests with real Mana module
|
||||||
|
|
||||||
- [ ] Test credit validation flow
|
- [ ] Test credit validation flow
|
||||||
|
|
||||||
|
|
@ -412,7 +412,7 @@ Use this checklist when integrating `@mana-core/nestjs-integration` into a new N
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
- [ ] Update README with Mana Core setup instructions
|
- [ ] Update README with Mana setup instructions
|
||||||
|
|
||||||
- [ ] Document custom operation types and credit costs
|
- [ ] Document custom operation types and credit costs
|
||||||
|
|
||||||
|
|
@ -443,7 +443,7 @@ If something doesn't work, check:
|
||||||
## Support Resources
|
## Support Resources
|
||||||
|
|
||||||
- **Full Integration Guide**: See `MANA_CORE_INTEGRATION_GUIDE.md`
|
- **Full Integration Guide**: See `MANA_CORE_INTEGRATION_GUIDE.md`
|
||||||
- **Mana Core Docs**: https://docs.mana-core.com
|
- **Mana Docs**: https://docs.mana-core.com
|
||||||
- **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
- **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
||||||
- **Example Code**: Check Storyteller project for working implementation
|
- **Example Code**: Check Storyteller project for working implementation
|
||||||
|
|
||||||
|
|
@ -451,7 +451,7 @@ If something doesn't work, check:
|
||||||
|
|
||||||
## Integration Complete! 🎉
|
## Integration Complete! 🎉
|
||||||
|
|
||||||
Once all items are checked, your application is fully integrated with Mana Core.
|
Once all items are checked, your application is fully integrated with Mana.
|
||||||
|
|
||||||
**Estimated Time**: 2-4 hours for basic integration, 1-2 days for complete implementation with testing.
|
**Estimated Time**: 2-4 hours for basic integration, 1-2 days for complete implementation with testing.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Mana Core NestJS Integration Guide
|
# Mana NestJS Integration Guide
|
||||||
|
|
||||||
This document provides a comprehensive guide on how the `@mana-core/nestjs-integration` package was integrated into the Storyteller project. Use this guide to integrate the same authentication and credit system into your own NestJS application.
|
This document provides a comprehensive guide on how the `@mana-core/nestjs-integration` package was integrated into the Storyteller project. Use this guide to integrate the same authentication and credit system into your own NestJS application.
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ This document provides a comprehensive guide on how the `@mana-core/nestjs-integ
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The Mana Core NestJS integration package provides:
|
The Mana NestJS integration package provides:
|
||||||
- **Complete Authentication System**: Email/password, Google OAuth, Apple Sign-in
|
- **Complete Authentication System**: Email/password, Google OAuth, Apple Sign-in
|
||||||
- **JWT Token Management**: Automatic validation, refresh, and storage
|
- **JWT Token Management**: Automatic validation, refresh, and storage
|
||||||
- **Credit Management**: Pre-flight validation and consumption with app-level tracking
|
- **Credit Management**: Pre-flight validation and consumption with app-level tracking
|
||||||
|
|
@ -33,7 +33,7 @@ Frontend (React Native/Web)
|
||||||
↓ HTTP Requests with JWT
|
↓ HTTP Requests with JWT
|
||||||
Backend (NestJS)
|
Backend (NestJS)
|
||||||
↓ Token Validation & Credit Checks
|
↓ Token Validation & Credit Checks
|
||||||
Mana Core Service
|
Mana Service
|
||||||
↓ Authentication & Credit Management
|
↓ Authentication & Credit Management
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -41,11 +41,11 @@ Mana Core Service
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Before integrating Mana Core, ensure you have:
|
Before integrating Mana, ensure you have:
|
||||||
|
|
||||||
1. **Mana Core Credentials**:
|
1. **Mana Credentials**:
|
||||||
- `MANA_SERVICE_URL`: URL of your Mana Core instance
|
- `MANA_SERVICE_URL`: URL of your Mana instance
|
||||||
- `APP_ID`: Your application ID from Mana Core
|
- `APP_ID`: Your application ID from Mana
|
||||||
- `MANA_SUPABASE_SECRET_KEY`: Service key for backend operations (optional but recommended)
|
- `MANA_SUPABASE_SECRET_KEY`: Service key for backend operations (optional but recommended)
|
||||||
|
|
||||||
2. **NestJS Application**:
|
2. **NestJS Application**:
|
||||||
|
|
@ -106,8 +106,8 @@ Create or update your `.env` file in the backend directory:
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3002
|
PORT=3002
|
||||||
|
|
||||||
# Mana Core Configuration
|
# Mana Configuration
|
||||||
MANA_SERVICE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MANA_SERVICE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
APP_ID=your-app-id-from-mana-core
|
APP_ID=your-app-id-from-mana-core
|
||||||
MANA_SUPABASE_SECRET_KEY=your-service-role-key
|
MANA_SUPABASE_SECRET_KEY=your-service-role-key
|
||||||
|
|
||||||
|
|
@ -116,8 +116,8 @@ SIGNUP_REDIRECT_URL=https://yourapp.com/welcome
|
||||||
```
|
```
|
||||||
|
|
||||||
**Important Notes**:
|
**Important Notes**:
|
||||||
- `MANA_SERVICE_URL`: Your Mana Core instance URL
|
- `MANA_SERVICE_URL`: Your Mana instance URL
|
||||||
- `APP_ID`: Obtained from Mana Core admin panel
|
- `APP_ID`: Obtained from Mana admin panel
|
||||||
- `MANA_SUPABASE_SECRET_KEY`: Required for credit operations and service-level auth
|
- `MANA_SUPABASE_SECRET_KEY`: Required for credit operations and service-level auth
|
||||||
- `SIGNUP_REDIRECT_URL`: Optional redirect after successful signup
|
- `SIGNUP_REDIRECT_URL`: Optional redirect after successful signup
|
||||||
|
|
||||||
|
|
@ -138,12 +138,12 @@ import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
validationSchema: validationSchema, // Optional: Joi validation
|
validationSchema: validationSchema, // Optional: Joi validation
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Mana Core Module - async configuration
|
// Mana Module - async configuration
|
||||||
ManaModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
// Required: Mana service URL
|
// Required: Mana service URL
|
||||||
manaServiceUrl: 'https://mana-core-middleware-111768794939.europe-west3.run.app',
|
manaServiceUrl: 'https://mana-middleware-111768794939.europe-west3.run.app',
|
||||||
|
|
||||||
// Required: Your app ID
|
// Required: Your app ID
|
||||||
appId: '8d2f5ddb-e251-4b3b-8802-84022a7ac77f',
|
appId: '8d2f5ddb-e251-4b3b-8802-84022a7ac77f',
|
||||||
|
|
@ -172,7 +172,7 @@ export class AppModule {}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Configuration Options**:
|
**Configuration Options**:
|
||||||
- `manaServiceUrl` (required): URL of your Mana Core service
|
- `manaServiceUrl` (required): URL of your Mana service
|
||||||
- `appId` (required): Your application ID
|
- `appId` (required): Your application ID
|
||||||
- `serviceKey` (recommended): Service role key for backend operations
|
- `serviceKey` (recommended): Service role key for backend operations
|
||||||
- `signupRedirectUrl` (optional): URL to redirect users after signup
|
- `signupRedirectUrl` (optional): URL to redirect users after signup
|
||||||
|
|
@ -596,7 +596,7 @@ if (response.ok) {
|
||||||
|
|
||||||
## Credit Management
|
## Credit Management
|
||||||
|
|
||||||
The Mana Core package includes a complete credit consumption system for tracking and billing user operations.
|
The Mana package includes a complete credit consumption system for tracking and billing user operations.
|
||||||
|
|
||||||
### Step 1: Inject CreditClientService
|
### Step 1: Inject CreditClientService
|
||||||
|
|
||||||
|
|
@ -847,7 +847,7 @@ try {
|
||||||
|
|
||||||
### Unit Testing
|
### Unit Testing
|
||||||
|
|
||||||
Mock the Mana Core services in your tests:
|
Mock the Mana services in your tests:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { Test, TestingModule } from '@nestjs/testing';
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
|
@ -895,7 +895,7 @@ describe('CharacterController', () => {
|
||||||
|
|
||||||
### Integration Testing
|
### Integration Testing
|
||||||
|
|
||||||
Test with the Mana Core module:
|
Test with the Mana module:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { ManaModule } from '@mana-core/nestjs-integration';
|
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
|
|
@ -1042,7 +1042,7 @@ ManaModule.forRootAsync({
|
||||||
|
|
||||||
### Support Resources
|
### Support Resources
|
||||||
|
|
||||||
- **Mana Core Documentation**: https://docs.mana-core.com
|
- **Mana Documentation**: https://docs.mana-core.com
|
||||||
- **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
- **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
||||||
- **Storyteller Example**: Check this repository for working examples
|
- **Storyteller Example**: Check this repository for working examples
|
||||||
|
|
||||||
|
|
@ -1093,7 +1093,7 @@ After following this guide, your application now has:
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `backend/src/app.module.ts` | Mana Core module configuration |
|
| `backend/src/app.module.ts` | Mana module configuration |
|
||||||
| `backend/src/character/character.controller.ts` | Example of AuthGuard and CreditClientService usage |
|
| `backend/src/character/character.controller.ts` | Example of AuthGuard and CreditClientService usage |
|
||||||
| `backend/src/story/story.controller.ts` | Example of credit validation and consumption |
|
| `backend/src/story/story.controller.ts` | Example of credit validation and consumption |
|
||||||
| `backend/src/decorators/user.decorator.ts` | Custom @UserToken() decorator |
|
| `backend/src/decorators/user.decorator.ts` | Custom @UserToken() decorator |
|
||||||
|
|
@ -1107,7 +1107,7 @@ After following this guide, your application now has:
|
||||||
|
|
||||||
If you have questions or run into issues:
|
If you have questions or run into issues:
|
||||||
|
|
||||||
1. Check the [Mana Core Documentation](https://docs.mana-core.com)
|
1. Check the [Mana Documentation](https://docs.mana-core.com)
|
||||||
2. Review the Storyteller codebase for working examples
|
2. Review the Storyteller codebase for working examples
|
||||||
3. Open an issue on the [GitHub repository](https://github.com/Memo-2023/mana-core-nestjs-package)
|
3. Open an issue on the [GitHub repository](https://github.com/Memo-2023/mana-core-nestjs-package)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Mana Core Integration Documentation
|
# Mana Integration Documentation
|
||||||
|
|
||||||
Complete documentation for integrating the `@mana-core/nestjs-integration` package into your NestJS application, based on the Storyteller project implementation.
|
Complete documentation for integrating the `@mana-core/nestjs-integration` package into your NestJS application, based on the Storyteller project implementation.
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ Start here for a high-level understanding and quick reference.
|
||||||
- Testing strategies
|
- Testing strategies
|
||||||
- Troubleshooting common issues
|
- Troubleshooting common issues
|
||||||
|
|
||||||
**Use this when**: You're implementing Mana Core for the first time or need detailed explanations.
|
**Use this when**: You're implementing Mana for the first time or need detailed explanations.
|
||||||
|
|
||||||
### 3. **[Integration Checklist](./MANA_CORE_INTEGRATION_CHECKLIST.md)** - Step-by-Step Checklist
|
### 3. **[Integration Checklist](./MANA_CORE_INTEGRATION_CHECKLIST.md)** - Step-by-Step Checklist
|
||||||
✅ **Actionable checklist** with checkboxes covering:
|
✅ **Actionable checklist** with checkboxes covering:
|
||||||
|
|
@ -47,9 +47,9 @@ Start here for a high-level understanding and quick reference.
|
||||||
|
|
||||||
## 🚀 Quick Start
|
## 🚀 Quick Start
|
||||||
|
|
||||||
### What is Mana Core?
|
### What is Mana?
|
||||||
|
|
||||||
Mana Core is a centralized authentication and credit management system that provides:
|
Mana is a centralized authentication and credit management system that provides:
|
||||||
- **Authentication**: Email/password, Google OAuth, Apple Sign-in
|
- **Authentication**: Email/password, Google OAuth, Apple Sign-in
|
||||||
- **JWT Token Management**: Automatic validation, refresh, and multi-device support
|
- **JWT Token Management**: Automatic validation, refresh, and multi-device support
|
||||||
- **Credit System**: Pre-flight validation, consumption tracking, and billing
|
- **Credit System**: Pre-flight validation, consumption tracking, and billing
|
||||||
|
|
@ -88,7 +88,7 @@ npm install git+https://github.com/Memo-2023/mana-core-nestjs-package.git
|
||||||
|
|
||||||
**Backend `.env`**:
|
**Backend `.env`**:
|
||||||
```env
|
```env
|
||||||
MANA_SERVICE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MANA_SERVICE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
APP_ID=your-app-id
|
APP_ID=your-app-id
|
||||||
MANA_SUPABASE_SECRET_KEY=your-service-key
|
MANA_SUPABASE_SECRET_KEY=your-service-key
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
|
|
@ -111,7 +111,7 @@ import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
ManaModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
manaServiceUrl: 'https://mana-core-middleware-111768794939.europe-west3.run.app',
|
manaServiceUrl: 'https://mana-middleware-111768794939.europe-west3.run.app',
|
||||||
appId: '8d2f5ddb-e251-4b3b-8802-84022a7ac77f',
|
appId: '8d2f5ddb-e251-4b3b-8802-84022a7ac77f',
|
||||||
serviceKey: configService.get('MANA_SUPABASE_SECRET_KEY'),
|
serviceKey: configService.get('MANA_SUPABASE_SECRET_KEY'),
|
||||||
debug: configService.get('NODE_ENV') === 'development',
|
debug: configService.get('NODE_ENV') === 'development',
|
||||||
|
|
@ -324,9 +324,9 @@ Mobile App (React Native)
|
||||||
▼
|
▼
|
||||||
Backend (NestJS)
|
Backend (NestJS)
|
||||||
│
|
│
|
||||||
│ 2. Forward to Mana Core
|
│ 2. Forward to Mana
|
||||||
▼
|
▼
|
||||||
Mana Core Service
|
Mana Service
|
||||||
│
|
│
|
||||||
│ 3. Validate & Generate Tokens
|
│ 3. Validate & Generate Tokens
|
||||||
▼
|
▼
|
||||||
|
|
@ -358,7 +358,7 @@ Mobile App
|
||||||
|
|
||||||
### Sign In
|
### Sign In
|
||||||
|
|
||||||
**Backend** (Auto-provided by Mana Core):
|
**Backend** (Auto-provided by Mana):
|
||||||
```
|
```
|
||||||
POST /auth/signin
|
POST /auth/signin
|
||||||
{
|
{
|
||||||
|
|
@ -516,7 +516,7 @@ MANA_CORE_README.md ← You are here (Quick start)
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `backend/src/app.module.ts` | Mana Core module configuration |
|
| `backend/src/app.module.ts` | Mana module configuration |
|
||||||
| `backend/src/character/character.controller.ts` | AuthGuard + Credit usage example |
|
| `backend/src/character/character.controller.ts` | AuthGuard + Credit usage example |
|
||||||
| `backend/src/story/story.controller.ts` | Credit validation + consumption |
|
| `backend/src/story/story.controller.ts` | Credit validation + consumption |
|
||||||
| `backend/src/decorators/user.decorator.ts` | Custom @UserToken() for RLS |
|
| `backend/src/decorators/user.decorator.ts` | Custom @UserToken() for RLS |
|
||||||
|
|
@ -533,8 +533,8 @@ MANA_CORE_README.md ← You are here (Quick start)
|
||||||
|
|
||||||
## 🔗 Resources
|
## 🔗 Resources
|
||||||
|
|
||||||
- **Mana Core Package**: https://github.com/Memo-2023/mana-core-nestjs-package
|
- **Mana Package**: https://github.com/Memo-2023/mana-core-nestjs-package
|
||||||
- **Mana Core Docs**: https://docs.mana-core.com
|
- **Mana Docs**: https://docs.mana-core.com
|
||||||
- **NestJS Docs**: https://docs.nestjs.com
|
- **NestJS Docs**: https://docs.nestjs.com
|
||||||
- **Storyteller Source**: This repository
|
- **Storyteller Source**: This repository
|
||||||
|
|
||||||
|
|
@ -559,7 +559,7 @@ MANA_CORE_README.md ← You are here (Quick start)
|
||||||
|
|
||||||
1. **Documentation**: Check all four documentation files
|
1. **Documentation**: Check all four documentation files
|
||||||
2. **Code Examples**: Study Storyteller implementation
|
2. **Code Examples**: Study Storyteller implementation
|
||||||
3. **Mana Core Docs**: https://docs.mana-core.com
|
3. **Mana Docs**: https://docs.mana-core.com
|
||||||
4. **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
4. **GitHub Issues**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
@ -573,7 +573,7 @@ If you find issues or improvements in this documentation:
|
||||||
|
|
||||||
## ✨ Summary
|
## ✨ Summary
|
||||||
|
|
||||||
This documentation provides everything you need to integrate Mana Core into your NestJS application:
|
This documentation provides everything you need to integrate Mana into your NestJS application:
|
||||||
|
|
||||||
- **Complete integration guide** with step-by-step instructions
|
- **Complete integration guide** with step-by-step instructions
|
||||||
- **Actionable checklist** to track progress
|
- **Actionable checklist** to track progress
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
# Cards
|
# Cards
|
||||||
|
|
||||||
A deck management system with Mana Core authentication and credit system integration.
|
A deck management system with Mana authentication and credit system integration.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- 🔐 **Mana Core Authentication** - Complete auth system with JWT tokens, device tracking, and automatic token refresh
|
- 🔐 **Mana Authentication** - Complete auth system with JWT tokens, device tracking, and automatic token refresh
|
||||||
- ⚡ **Credit System** - Mana-based billing for operations (10 mana to create a deck, 5 for AI features, etc.)
|
- ⚡ **Credit System** - Mana-based billing for operations (10 mana to create a deck, 5 for AI features, etc.)
|
||||||
- 📱 **React Native/Expo** - Cross-platform mobile app (iOS, Android, Web)
|
- 📱 **React Native/Expo** - Cross-platform mobile app (iOS, Android, Web)
|
||||||
- 🚀 **NestJS Backend** - Type-safe API with AuthGuard protection
|
- 🚀 **NestJS Backend** - Type-safe API with AuthGuard protection
|
||||||
|
|
@ -19,7 +19,7 @@ A deck management system with Mana Core authentication and credit system integra
|
||||||
- npm or yarn
|
- npm or yarn
|
||||||
- Expo CLI (`npm install -g expo-cli`)
|
- Expo CLI (`npm install -g expo-cli`)
|
||||||
- Supabase account
|
- Supabase account
|
||||||
- Mana Core credentials (APP_ID, SERVICE_KEY)
|
- Mana credentials (APP_ID, SERVICE_KEY)
|
||||||
|
|
||||||
### Backend Setup
|
### Backend Setup
|
||||||
|
|
||||||
|
|
@ -40,8 +40,8 @@ A deck management system with Mana Core authentication and credit system integra
|
||||||
|
|
||||||
Edit `.env` and add your credentials:
|
Edit `.env` and add your credentials:
|
||||||
```env
|
```env
|
||||||
# Mana Core
|
# Mana
|
||||||
MANA_SERVICE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MANA_SERVICE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
APP_ID=your-app-id-from-mana-core
|
APP_ID=your-app-id-from-mana-core
|
||||||
SERVICE_KEY=your-service-key-from-mana-core # Required for credits
|
SERVICE_KEY=your-service-key-from-mana-core # Required for credits
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ A deck management system with Mana Core authentication and credit system integra
|
||||||
│ │
|
│ │
|
||||||
▼ ▼
|
▼ ▼
|
||||||
┌─────────────────┐ ┌──────────────────┐
|
┌─────────────────┐ ┌──────────────────┐
|
||||||
│ Mana Core │ │ Supabase │
|
│ Mana │ │ Supabase │
|
||||||
│ - Auth │ │ - Database │
|
│ - Auth │ │ - Database │
|
||||||
│ - Credits │ │ - Storage │
|
│ - Credits │ │ - Storage │
|
||||||
│ - Transactions │ │ - Real-time │
|
│ - Transactions │ │ - Real-time │
|
||||||
|
|
@ -181,7 +181,7 @@ function MyScreen() {
|
||||||
|
|
||||||
## API Endpoints
|
## API Endpoints
|
||||||
|
|
||||||
### Authentication (via Mana Core)
|
### Authentication (via Mana)
|
||||||
|
|
||||||
- `POST /v1/auth/signin` - Sign in
|
- `POST /v1/auth/signin` - Sign in
|
||||||
- `POST /v1/auth/signup` - Sign up
|
- `POST /v1/auth/signup` - Sign up
|
||||||
|
|
@ -220,7 +220,7 @@ cards/
|
||||||
│ │ │ └── health.controller.ts # Health checks
|
│ │ │ └── health.controller.ts # Health checks
|
||||||
│ │ ├── services/
|
│ │ ├── services/
|
||||||
│ │ │ └── supabase.service.ts # Supabase integration
|
│ │ │ └── supabase.service.ts # Supabase integration
|
||||||
│ │ ├── app.module.ts # Main module (Mana Core config)
|
│ │ ├── app.module.ts # Main module (Mana config)
|
||||||
│ │ └── main.ts # Entry point
|
│ │ └── main.ts # Entry point
|
||||||
│ ├── .env # Environment variables
|
│ ├── .env # Environment variables
|
||||||
│ └── package.json
|
│ └── package.json
|
||||||
|
|
@ -315,9 +315,9 @@ npm run build:prod # Production build
|
||||||
|
|
||||||
| Variable | Description | Example |
|
| Variable | Description | Example |
|
||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `MANA_SERVICE_URL` | Mana Core service URL | `https://mana-core-middleware-*.run.app` |
|
| `MANA_SERVICE_URL` | Mana service URL | `https://mana-middleware-*.run.app` |
|
||||||
| `APP_ID` | Your app ID from Mana Core | `cea4bfc6-a4de-4e17-91e2-54275940156e` |
|
| `APP_ID` | Your app ID from Mana | `cea4bfc6-a4de-4e17-91e2-54275940156e` |
|
||||||
| `SERVICE_KEY` | Service key for credit operations | Get from Mana Core |
|
| `SERVICE_KEY` | Service key for credit operations | Get from Mana |
|
||||||
| `SUPABASE_URL` | Supabase project URL | `https://abc.supabase.co` |
|
| `SUPABASE_URL` | Supabase project URL | `https://abc.supabase.co` |
|
||||||
| `SUPABASE_ANON_KEY` | Supabase anonymous key | Your anon key |
|
| `SUPABASE_ANON_KEY` | Supabase anonymous key | Your anon key |
|
||||||
| `PORT` | Backend port | `8080` |
|
| `PORT` | Backend port | `8080` |
|
||||||
|
|
@ -393,14 +393,14 @@ import { CreditClientService } from '@mana-core/nestjs-integration/services';
|
||||||
### Backend won't start
|
### Backend won't start
|
||||||
|
|
||||||
- Check all environment variables are set
|
- Check all environment variables are set
|
||||||
- Verify Mana Core credentials are correct
|
- Verify Mana credentials are correct
|
||||||
- Check if port 8080 is available
|
- Check if port 8080 is available
|
||||||
|
|
||||||
### Credits not working
|
### Credits not working
|
||||||
|
|
||||||
- Ensure `SERVICE_KEY` is set in backend `.env`
|
- Ensure `SERVICE_KEY` is set in backend `.env`
|
||||||
- Check backend logs for credit validation errors
|
- Check backend logs for credit validation errors
|
||||||
- Verify user has credits in Mana Core dashboard
|
- Verify user has credits in Mana dashboard
|
||||||
|
|
||||||
### Frontend can't connect to backend
|
### Frontend can't connect to backend
|
||||||
|
|
||||||
|
|
@ -417,16 +417,16 @@ import { CreditClientService } from '@mana-core/nestjs-integration/services';
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
- **[Credit System](./CREDIT_SYSTEM.md)** - Complete credit system documentation
|
- **[Credit System](./CREDIT_SYSTEM.md)** - Complete credit system documentation
|
||||||
- **[Mana Core Integration Guide](./MANA_CORE_INTEGRATION_GUIDE.md)** - Step-by-step integration
|
- **[Mana Integration Guide](./MANA_CORE_INTEGRATION_GUIDE.md)** - Step-by-step integration
|
||||||
- **[Integration Checklist](./MANA_CORE_INTEGRATION_CHECKLIST.md)** - Checkboxes for tracking
|
- **[Integration Checklist](./MANA_CORE_INTEGRATION_CHECKLIST.md)** - Checkboxes for tracking
|
||||||
- **[Architecture Guide](./MANA_CORE_ARCHITECTURE.md)** - System architecture and flows
|
- **[Architecture Guide](./MANA_CORE_ARCHITECTURE.md)** - System architecture and flows
|
||||||
- **[Mana Core README](./MANA_CORE_README.md)** - Quick reference
|
- **[Mana README](./MANA_CORE_README.md)** - Quick reference
|
||||||
- **[Example Implementation](./apps/mobile/examples/DeckCreationExample.tsx)** - Working code example
|
- **[Example Implementation](./apps/mobile/examples/DeckCreationExample.tsx)** - Working code example
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [Mana Core Documentation](https://docs.mana-core.com)
|
- [Mana Documentation](https://docs.mana-core.com)
|
||||||
- [Mana Core NestJS Package](https://github.com/Memo-2023/mana-core-nestjs-package)
|
- [Mana NestJS Package](https://github.com/Memo-2023/mana-core-nestjs-package)
|
||||||
- [Expo Documentation](https://docs.expo.dev)
|
- [Expo Documentation](https://docs.expo.dev)
|
||||||
- [NestJS Documentation](https://docs.nestjs.com)
|
- [NestJS Documentation](https://docs.nestjs.com)
|
||||||
- [Supabase Documentation](https://supabase.com/docs)
|
- [Supabase Documentation](https://supabase.com/docs)
|
||||||
|
|
@ -438,5 +438,5 @@ Private project - All rights reserved
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
For issues related to:
|
For issues related to:
|
||||||
- **Mana Core**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
- **Mana**: https://github.com/Memo-2023/mana-core-nestjs-package/issues
|
||||||
- **This project**: Contact the development team
|
- **This project**: Contact the development team
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## What's Been Completed
|
## What's Been Completed
|
||||||
|
|
||||||
Your Mana Core integration is now **100% complete** with a fully functional credit system! 🎉
|
Your Mana integration is now **100% complete** with a fully functional credit system! 🎉
|
||||||
|
|
||||||
### ✅ Backend (Complete)
|
### ✅ Backend (Complete)
|
||||||
- [x] ManaModule configured with environment variables
|
- [x] ManaModule configured with environment variables
|
||||||
|
|
@ -35,14 +35,14 @@ Your Mana Core integration is now **100% complete** with a fully functional cred
|
||||||
|
|
||||||
### 1. Add Your Service Key (5 minutes) ⚠️ REQUIRED
|
### 1. Add Your Service Key (5 minutes) ⚠️ REQUIRED
|
||||||
|
|
||||||
The backend needs a service key from Mana Core to validate and consume credits.
|
The backend needs a service key from Mana to validate and consume credits.
|
||||||
|
|
||||||
**backend/.env**:
|
**backend/.env**:
|
||||||
```env
|
```env
|
||||||
SERVICE_KEY=your-actual-service-key-here
|
SERVICE_KEY=your-actual-service-key-here
|
||||||
```
|
```
|
||||||
|
|
||||||
**Where to get it**: Contact Mana Core admin or check your Mana Core dashboard.
|
**Where to get it**: Contact Mana admin or check your Mana dashboard.
|
||||||
|
|
||||||
Without this key, credit operations will fail with authentication errors.
|
Without this key, credit operations will fail with authentication errors.
|
||||||
|
|
||||||
|
|
@ -267,7 +267,7 @@ Before deploying to production:
|
||||||
|
|
||||||
### Backend
|
### Backend
|
||||||
- [ ] Set `NODE_ENV=production` in production environment
|
- [ ] Set `NODE_ENV=production` in production environment
|
||||||
- [ ] Add real `SERVICE_KEY` from Mana Core
|
- [ ] Add real `SERVICE_KEY` from Mana
|
||||||
- [ ] Configure proper CORS for your frontend domain
|
- [ ] Configure proper CORS for your frontend domain
|
||||||
- [ ] Set up proper logging/monitoring
|
- [ ] Set up proper logging/monitoring
|
||||||
- [ ] Add rate limiting
|
- [ ] Add rate limiting
|
||||||
|
|
@ -323,7 +323,7 @@ Add `onPurchase` handler to modal in your screens
|
||||||
2. **Integration**: See [MANA_CORE_INTEGRATION_GUIDE.md](./MANA_CORE_INTEGRATION_GUIDE.md)
|
2. **Integration**: See [MANA_CORE_INTEGRATION_GUIDE.md](./MANA_CORE_INTEGRATION_GUIDE.md)
|
||||||
3. **Architecture**: See [MANA_CORE_ARCHITECTURE.md](./MANA_CORE_ARCHITECTURE.md)
|
3. **Architecture**: See [MANA_CORE_ARCHITECTURE.md](./MANA_CORE_ARCHITECTURE.md)
|
||||||
4. **Example Code**: See [apps/mobile/examples/DeckCreationExample.tsx](./apps/mobile/examples/DeckCreationExample.tsx)
|
4. **Example Code**: See [apps/mobile/examples/DeckCreationExample.tsx](./apps/mobile/examples/DeckCreationExample.tsx)
|
||||||
5. **Mana Core**: https://github.com/Memo-2023/mana-core-nestjs-package
|
5. **Mana**: https://github.com/Memo-2023/mana-core-nestjs-package
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
Cards is a React Native/Expo application using Expo Router for navigation, TypeScript for type safety, NativeWind (Tailwind CSS) for styling, and Mana Core Auth for authentication. The app uses Zustand for state management and connects to the NestJS backend (port 3009).
|
Cards is a React Native/Expo application using Expo Router for navigation, TypeScript for type safety, NativeWind (Tailwind CSS) for styling, and Mana Auth for authentication. The app uses Zustand for state management and connects to the NestJS backend (port 3009).
|
||||||
|
|
||||||
## Essential Commands
|
## Essential Commands
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ Uses Expo Router v5 with file-based routing:
|
||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
|
|
||||||
- Mana Core Auth via `@manacore/shared-auth` in `services/authService.ts`
|
- Mana Auth via `@mana/shared-auth` in `services/authService.ts`
|
||||||
- Zustand auth store in `store/authStore.ts`
|
- Zustand auth store in `store/authStore.ts`
|
||||||
- Tokens stored in Expo SecureStore (encrypted)
|
- Tokens stored in Expo SecureStore (encrypted)
|
||||||
- Supports email/password, Google, and Apple sign-in
|
- Supports email/password, Google, and Apple sign-in
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ pnpm preview # Preview production build
|
||||||
- **Web**: SvelteKit 2.x, Svelte 5, Tailwind CSS 4
|
- **Web**: SvelteKit 2.x, Svelte 5, Tailwind CSS 4
|
||||||
- **Landing**: Astro 5.16, Tailwind CSS
|
- **Landing**: Astro 5.16, Tailwind CSS
|
||||||
- **Server**: Hono + Bun, OpenRouter AI + mana-llm (local), Drizzle ORM, PostgreSQL
|
- **Server**: Hono + Bun, OpenRouter AI + mana-llm (local), Drizzle ORM, PostgreSQL
|
||||||
- **Auth**: Mana Core Auth (JWT)
|
- **Auth**: Mana Auth (JWT)
|
||||||
- **Types**: TypeScript 5.x
|
- **Types**: TypeScript 5.x
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
@ -103,7 +103,7 @@ MANA_LLM_URL=http://localhost:3025 # mana-llm service URL
|
||||||
LLM_TIMEOUT=120000 # Timeout in ms (default: 120s)
|
LLM_TIMEOUT=120000 # Timeout in ms (default: 120s)
|
||||||
|
|
||||||
# Database (uses shared Docker PostgreSQL)
|
# Database (uses shared Docker PostgreSQL)
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/chat
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
@ -172,7 +172,7 @@ pnpm --filter @chat/server db:add-local-models
|
||||||
2. **Create `.env`** in `apps/chat/apps/server/`:
|
2. **Create `.env`** in `apps/chat/apps/server/`:
|
||||||
```env
|
```env
|
||||||
OPENROUTER_API_KEY=sk-or-v1-xxx
|
OPENROUTER_API_KEY=sk-or-v1-xxx
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/chat
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
PORT=3002
|
PORT=3002
|
||||||
```
|
```
|
||||||
|
|
@ -190,6 +190,6 @@ pnpm --filter @chat/server db:add-local-models
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
1. **Security**: API keys are stored in the server only - never in client apps
|
1. **Security**: API keys are stored in the server only - never in client apps
|
||||||
2. **Authentication**: Uses Mana Core Auth (JWT tokens)
|
2. **Authentication**: Uses Mana Auth (JWT tokens)
|
||||||
3. **Database**: PostgreSQL with Drizzle ORM (uses shared Docker container)
|
3. **Database**: PostgreSQL with Drizzle ORM (uses shared Docker container)
|
||||||
4. **Deployment**: Server runs on port 3002
|
4. **Deployment**: Server runs on port 3002
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# ✅ Mana Core Auth Integration - COMPLETE
|
# ✅ Mana Auth Integration - COMPLETE
|
||||||
|
|
||||||
**Date:** 2025-11-25
|
**Date:** 2025-11-25
|
||||||
**Status:** 🎉 All code changes implemented
|
**Status:** 🎉 All code changes implemented
|
||||||
|
|
@ -8,25 +8,25 @@
|
||||||
|
|
||||||
## 🎯 Summary
|
## 🎯 Summary
|
||||||
|
|
||||||
The Chat project has been **fully migrated** from Supabase Auth to **Mana Core Auth**! All three apps (backend, web, mobile) now use the centralized authentication system with built-in credit management.
|
The Chat project has been **fully migrated** from Supabase Auth to **Mana Auth**! All three apps (backend, web, mobile) now use the centralized authentication system with built-in credit management.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ What Was Done
|
## ✅ What Was Done
|
||||||
|
|
||||||
### 1. **Updated `@manacore/shared-auth` Package** ✅
|
### 1. **Updated `@mana/shared-auth` Package** ✅
|
||||||
|
|
||||||
**Location:** `/packages/shared-auth/src/core/authService.ts`
|
**Location:** `/packages/shared-auth/src/core/authService.ts`
|
||||||
|
|
||||||
**Changes:**
|
**Changes:**
|
||||||
|
|
||||||
- Updated API endpoints to match Mana Core Auth (`/api/v1/auth/*`)
|
- Updated API endpoints to match Mana Auth (`/api/v1/auth/*`)
|
||||||
- Fixed login response handling (`accessToken` instead of `appToken`)
|
- Fixed login response handling (`accessToken` instead of `appToken`)
|
||||||
- Fixed signup flow (register then login separately)
|
- Fixed signup flow (register then login separately)
|
||||||
- Updated refresh token endpoint
|
- Updated refresh token endpoint
|
||||||
- Updated credits balance endpoint
|
- Updated credits balance endpoint
|
||||||
|
|
||||||
**Status:** Package is now 100% compatible with Mana Core Auth API
|
**Status:** Package is now 100% compatible with Mana Auth API
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -43,7 +43,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
|
|
||||||
**Changes:**
|
**Changes:**
|
||||||
|
|
||||||
- Created JWT Auth Guard that validates tokens with Mana Core Auth
|
- Created JWT Auth Guard that validates tokens with Mana Auth
|
||||||
- Created CurrentUser decorator to inject user data into controllers
|
- Created CurrentUser decorator to inject user data into controllers
|
||||||
- Updated all controllers to use JwtAuthGuard
|
- Updated all controllers to use JwtAuthGuard
|
||||||
- Removed userId from request body (now extracted from JWT)
|
- Removed userId from request body (now extracted from JWT)
|
||||||
|
|
@ -54,7 +54,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
|
|
||||||
- All endpoints now protected with JWT validation
|
- All endpoints now protected with JWT validation
|
||||||
- User context automatically injected via @CurrentUser decorator
|
- User context automatically injected via @CurrentUser decorator
|
||||||
- Token validation happens via Mana Core Auth API
|
- Token validation happens via Mana Auth API
|
||||||
- Proper error handling for invalid/expired tokens
|
- Proper error handling for invalid/expired tokens
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -68,7 +68,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
|
|
||||||
**Changes:**
|
**Changes:**
|
||||||
|
|
||||||
- Completely rewrote auth store to use `@manacore/shared-auth`
|
- Completely rewrote auth store to use `@mana/shared-auth`
|
||||||
- Removed Supabase auth dependencies
|
- Removed Supabase auth dependencies
|
||||||
- Added `initializeWebAuth()` initialization
|
- Added `initializeWebAuth()` initialization
|
||||||
- Added `getCredits()` method for credit balance
|
- Added `getCredits()` method for credit balance
|
||||||
|
|
@ -92,7 +92,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
|
|
||||||
**Changes:**
|
**Changes:**
|
||||||
|
|
||||||
- Rewrote AuthProvider to use `@manacore/shared-auth`
|
- Rewrote AuthProvider to use `@mana/shared-auth`
|
||||||
- Created SecureStore adapter for token storage
|
- Created SecureStore adapter for token storage
|
||||||
- Created React Native device adapter
|
- Created React Native device adapter
|
||||||
- Created React Native network adapter
|
- Created React Native network adapter
|
||||||
|
|
@ -165,12 +165,12 @@ EXPO_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
||||||
|
|
||||||
## 🚀 How to Run
|
## 🚀 How to Run
|
||||||
|
|
||||||
### 1. Start Mana Core Auth (Terminal 1)
|
### 1. Start Mana Auth (Terminal 1)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# Edit .env and add JWT keys (see mana-core-auth/QUICKSTART.md)
|
# Edit .env and add JWT keys (see mana-auth/QUICKSTART.md)
|
||||||
pnpm start:dev
|
pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -221,7 +221,7 @@ pnpm dev
|
||||||
|
|
||||||
- [ ] Start backend on port 3002
|
- [ ] Start backend on port 3002
|
||||||
- [ ] Try accessing `/api/chat/models` without token → Should return 401
|
- [ ] Try accessing `/api/chat/models` without token → Should return 401
|
||||||
- [ ] Login via Mana Core Auth
|
- [ ] Login via Mana Auth
|
||||||
- [ ] Access `/api/chat/models` with token → Should work
|
- [ ] Access `/api/chat/models` with token → Should work
|
||||||
- [ ] Access `/api/conversations` with token → Should work
|
- [ ] Access `/api/conversations` with token → Should work
|
||||||
|
|
||||||
|
|
@ -271,10 +271,10 @@ const credits = await authService.getUserCredits();
|
||||||
|
|
||||||
## 🔄 What Changed for Users
|
## 🔄 What Changed for Users
|
||||||
|
|
||||||
| Aspect | Before (Supabase) | After (Mana Core) | Impact |
|
| Aspect | Before (Supabase) | After (Mana) | Impact |
|
||||||
| ----------------- | ----------------- | ------------------------ | ------------------------------ |
|
| ----------------- | ----------------- | ------------------------ | ------------------------------ |
|
||||||
| **Registration** | Immediate session | Register → Login | Minimal (auto-login in mobile) |
|
| **Registration** | Immediate session | Register → Login | Minimal (auto-login in mobile) |
|
||||||
| **Login** | Supabase JWT | Mana Core JWT | None (transparent) |
|
| **Login** | Supabase JWT | Mana JWT | None (transparent) |
|
||||||
| **Token Storage** | Supabase cookies | localStorage/SecureStore | None (same security) |
|
| **Token Storage** | Supabase cookies | localStorage/SecureStore | None (same security) |
|
||||||
| **Sessions** | Supabase sessions | JWT + refresh tokens | Better (token rotation) |
|
| **Sessions** | Supabase sessions | JWT + refresh tokens | Better (token rotation) |
|
||||||
| **Credits** | ❌ None | ✅ 150 initial + 5 daily | **NEW FEATURE!** |
|
| **Credits** | ❌ None | ✅ 150 initial + 5 daily | **NEW FEATURE!** |
|
||||||
|
|
@ -283,23 +283,23 @@ const credits = await authService.getUserCredits();
|
||||||
|
|
||||||
## 📊 Port Configuration
|
## 📊 Port Configuration
|
||||||
|
|
||||||
| Service | Port | URL |
|
| Service | Port | URL |
|
||||||
| ------------------ | ---- | --------------------- |
|
| ---------------- | ---- | --------------------- |
|
||||||
| **Mana Core Auth** | 3001 | http://localhost:3001 |
|
| **Mana Auth** | 3001 | http://localhost:3001 |
|
||||||
| **Chat Backend** | 3002 | http://localhost:3002 |
|
| **Chat Backend** | 3002 | http://localhost:3002 |
|
||||||
| **Web App** | 5173 | http://localhost:5173 |
|
| **Web App** | 5173 | http://localhost:5173 |
|
||||||
| **Mobile App** | 8081 | exp://localhost:8081 |
|
| **Mobile App** | 8081 | exp://localhost:8081 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🐛 Potential Issues & Solutions
|
## 🐛 Potential Issues & Solutions
|
||||||
|
|
||||||
### Issue: "Connection refused" to Mana Core Auth
|
### Issue: "Connection refused" to Mana Auth
|
||||||
|
|
||||||
**Solution:** Make sure Mana Core Auth is running on port 3001
|
**Solution:** Make sure Mana Auth is running on port 3001
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth && pnpm start:dev
|
cd mana-auth && pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### Issue: "Invalid token" errors
|
### Issue: "Invalid token" errors
|
||||||
|
|
@ -317,10 +317,10 @@ await SecureStore.deleteItemAsync('@auth/refreshToken');
|
||||||
|
|
||||||
### Issue: CORS errors from web app
|
### Issue: CORS errors from web app
|
||||||
|
|
||||||
**Solution:** Add web app URL to Mana Core Auth CORS config
|
**Solution:** Add web app URL to Mana Auth CORS config
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# In mana-core-auth/.env
|
# In mana-auth/.env
|
||||||
CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -336,7 +336,7 @@ MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
## 📚 API Endpoint Reference
|
## 📚 API Endpoint Reference
|
||||||
|
|
||||||
### Mana Core Auth (Port 3001)
|
### Mana Auth (Port 3001)
|
||||||
|
|
||||||
- POST `/api/v1/auth/register` - Register new user
|
- POST `/api/v1/auth/register` - Register new user
|
||||||
- POST `/api/v1/auth/login` - Login with email/password
|
- POST `/api/v1/auth/login` - Login with email/password
|
||||||
|
|
@ -388,15 +388,15 @@ MANA_AUTH_URL=http://localhost:3001
|
||||||
## 📖 Documentation
|
## 📖 Documentation
|
||||||
|
|
||||||
- **Integration Guide:** `/chat/MANA_AUTH_INTEGRATION.md`
|
- **Integration Guide:** `/chat/MANA_AUTH_INTEGRATION.md`
|
||||||
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
- **Mana Auth README:** `/mana-auth/README.md`
|
||||||
- **Quick Start:** `/mana-core-auth/QUICKSTART.md`
|
- **Quick Start:** `/mana-auth/QUICKSTART.md`
|
||||||
- **Master Plan:** `/.hive-mind/MASTER_PLAN_CENTRAL_AUTH_SYSTEM.md`
|
- **Master Plan:** `/.hive-mind/MASTER_PLAN_CENTRAL_AUTH_SYSTEM.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✨ Benefits of Migration
|
## ✨ Benefits of Migration
|
||||||
|
|
||||||
1. **✅ Centralized Authentication** - Single auth system for all Mana Core apps
|
1. **✅ Centralized Authentication** - Single auth system for all Mana apps
|
||||||
2. **✅ Built-in Credits** - No need to build separate credit system
|
2. **✅ Built-in Credits** - No need to build separate credit system
|
||||||
3. **✅ Better Security** - RS256 JWT, refresh token rotation, optimistic locking
|
3. **✅ Better Security** - RS256 JWT, refresh token rotation, optimistic locking
|
||||||
4. **✅ Cost Savings** - Self-hosted, no per-user charges
|
4. **✅ Cost Savings** - Self-hosted, no per-user charges
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
# Mana Core Auth Integration Guide - Chat Project
|
# Mana Auth Integration Guide - Chat Project
|
||||||
|
|
||||||
This guide explains how to integrate the Chat project with the new **Mana Core Auth** system, replacing Supabase Auth.
|
This guide explains how to integrate the Chat project with the new **Mana Auth** system, replacing Supabase Auth.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The Chat project currently uses **Supabase Auth** across all apps. We're migrating to **Mana Core Auth**, our centralized authentication system with built-in credit management.
|
The Chat project currently uses **Supabase Auth** across all apps. We're migrating to **Mana Auth**, our centralized authentication system with built-in credit management.
|
||||||
|
|
||||||
### Benefits
|
### Benefits
|
||||||
|
|
||||||
- ✅ **Unified Authentication** - Single auth system for all Mana Core apps
|
- ✅ **Unified Authentication** - Single auth system for all Mana apps
|
||||||
- ✅ **Built-in Credits** - Automatic credit balance management (150 signup bonus + 5 daily)
|
- ✅ **Built-in Credits** - Automatic credit balance management (150 signup bonus + 5 daily)
|
||||||
- ✅ **Better Security** - RS256 JWT, refresh token rotation, optimistic locking
|
- ✅ **Better Security** - RS256 JWT, refresh token rotation, optimistic locking
|
||||||
- ✅ **Cost Savings** - Self-hosted, no per-user charges
|
- ✅ **Cost Savings** - Self-hosted, no per-user charges
|
||||||
|
|
@ -19,9 +19,9 @@ The Chat project currently uses **Supabase Auth** across all apps. We're migrati
|
||||||
```
|
```
|
||||||
Chat Apps (Web, Mobile, Landing)
|
Chat Apps (Web, Mobile, Landing)
|
||||||
↓
|
↓
|
||||||
@manacore/shared-auth (Client Library)
|
@mana/shared-auth (Client Library)
|
||||||
↓
|
↓
|
||||||
Mana Core Auth Service (NestJS)
|
Mana Auth Service (NestJS)
|
||||||
↓
|
↓
|
||||||
PostgreSQL (Users, Sessions, Credits)
|
PostgreSQL (Users, Sessions, Credits)
|
||||||
```
|
```
|
||||||
|
|
@ -30,7 +30,7 @@ PostgreSQL (Users, Sessions, Credits)
|
||||||
|
|
||||||
### 1. Shared Auth Package Updated ✅
|
### 1. Shared Auth Package Updated ✅
|
||||||
|
|
||||||
The `@manacore/shared-auth` package has been updated to work with Mana Core Auth endpoints:
|
The `@mana/shared-auth` package has been updated to work with Mana Auth endpoints:
|
||||||
|
|
||||||
**Updated endpoints:**
|
**Updated endpoints:**
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ The `@manacore/shared-auth` package has been updated to work with Mana Core Auth
|
||||||
# SUPABASE_URL=...
|
# SUPABASE_URL=...
|
||||||
# SUPABASE_SERVICE_KEY=...
|
# SUPABASE_SERVICE_KEY=...
|
||||||
|
|
||||||
# Add Mana Core Auth URL
|
# Add Mana Auth URL
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -114,7 +114,7 @@ export class JwtAuthGuard implements CanActivate {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Get public key from Mana Core Auth
|
// Get public key from Mana Auth
|
||||||
const authUrl = this.configService.get<string>('MANA_AUTH_URL');
|
const authUrl = this.configService.get<string>('MANA_AUTH_URL');
|
||||||
const response = await fetch(`${authUrl}/api/v1/auth/validate`, {
|
const response = await fetch(`${authUrl}/api/v1/auth/validate`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|
@ -177,11 +177,11 @@ import { JwtAuthGuard } from './common/guards/jwt-auth.guard';
|
||||||
Edit `chat/apps/web/src/lib/stores/auth.svelte.ts`:
|
Edit `chat/apps/web/src/lib/stores/auth.svelte.ts`:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { initializeWebAuth } from '@manacore/shared-auth';
|
import { initializeWebAuth } from '@mana/shared-auth';
|
||||||
|
|
||||||
const MANA_AUTH_URL = import.meta.env.PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
const MANA_AUTH_URL = import.meta.env.PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// Initialize Mana Core Auth
|
// Initialize Mana Auth
|
||||||
const { authService, tokenManager } = initializeWebAuth({
|
const { authService, tokenManager } = initializeWebAuth({
|
||||||
baseUrl: MANA_AUTH_URL,
|
baseUrl: MANA_AUTH_URL,
|
||||||
});
|
});
|
||||||
|
|
@ -247,7 +247,7 @@ export const handle: Handle = async ({ event, resolve }) => {
|
||||||
|
|
||||||
if (token) {
|
if (token) {
|
||||||
try {
|
try {
|
||||||
// Validate token with Mana Core Auth
|
// Validate token with Mana Auth
|
||||||
const authUrl = process.env.PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
const authUrl = process.env.PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
const response = await fetch(`${authUrl}/api/v1/auth/validate`, {
|
const response = await fetch(`${authUrl}/api/v1/auth/validate`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|
@ -290,8 +290,8 @@ import {
|
||||||
setDeviceAdapter,
|
setDeviceAdapter,
|
||||||
setNetworkAdapter,
|
setNetworkAdapter,
|
||||||
type UserData,
|
type UserData,
|
||||||
} from '@manacore/shared-auth';
|
} from '@mana/shared-auth';
|
||||||
import { createSecureStoreAdapter } from '@manacore/shared-auth/native'; // You may need to create this
|
import { createSecureStoreAdapter } from '@mana/shared-auth/native'; // You may need to create this
|
||||||
|
|
||||||
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
|
|
@ -415,11 +415,11 @@ pnpm remove @supabase/supabase-js
|
||||||
|
|
||||||
### Step 6: Test the Integration
|
### Step 6: Test the Integration
|
||||||
|
|
||||||
#### 6.1 Start Mana Core Auth
|
#### 6.1 Start Mana Auth
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# From monorepo root
|
# From monorepo root
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
pnpm start:dev
|
pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -465,9 +465,9 @@ pnpm dev
|
||||||
|
|
||||||
## API Compatibility
|
## API Compatibility
|
||||||
|
|
||||||
### Mana Core Auth vs Supabase
|
### Mana Auth vs Supabase
|
||||||
|
|
||||||
| Feature | Supabase Auth | Mana Core Auth | Status |
|
| Feature | Supabase Auth | Mana Auth | Status |
|
||||||
| ------------------ | ------------- | -------------- | -------- |
|
| ------------------ | ------------- | -------------- | -------- |
|
||||||
| Email/Password | ✅ | ✅ | Migrated |
|
| Email/Password | ✅ | ✅ | Migrated |
|
||||||
| OAuth (Google) | ✅ | 🚧 | TODO |
|
| OAuth (Google) | ✅ | 🚧 | TODO |
|
||||||
|
|
@ -480,7 +480,7 @@ pnpm dev
|
||||||
|
|
||||||
## Credits System
|
## Credits System
|
||||||
|
|
||||||
Mana Core Auth includes a built-in credit system:
|
Mana Auth includes a built-in credit system:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Get credit balance
|
// Get credit balance
|
||||||
|
|
@ -501,12 +501,12 @@ console.log(credits);
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### "Connection refused" to Mana Core Auth
|
### "Connection refused" to Mana Auth
|
||||||
|
|
||||||
**Solution:** Make sure Mana Core Auth is running:
|
**Solution:** Make sure Mana Auth is running:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
pnpm start:dev
|
pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -520,7 +520,7 @@ await authService.clearAuthStorage();
|
||||||
|
|
||||||
### CORS errors
|
### CORS errors
|
||||||
|
|
||||||
**Solution:** Add Chat app URLs to Mana Core Auth `.env`:
|
**Solution:** Add Chat app URLs to Mana Auth `.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
CORS_ORIGINS=http://localhost:3000,http://localhost:8081
|
CORS_ORIGINS=http://localhost:3000,http://localhost:8081
|
||||||
|
|
@ -528,7 +528,7 @@ CORS_ORIGINS=http://localhost:3000,http://localhost:8081
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
1. ✅ Update `@manacore/shared-auth` package
|
1. ✅ Update `@mana/shared-auth` package
|
||||||
2. ⏳ Integrate into Chat backend
|
2. ⏳ Integrate into Chat backend
|
||||||
3. ⏳ Update Chat web app
|
3. ⏳ Update Chat web app
|
||||||
4. ⏳ Update Chat mobile app
|
4. ⏳ Update Chat mobile app
|
||||||
|
|
@ -539,10 +539,10 @@ CORS_ORIGINS=http://localhost:3000,http://localhost:8081
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
- **Mana Auth README:** `/mana-auth/README.md`
|
||||||
- **Shared Auth Package:** `/packages/shared-auth/`
|
- **Shared Auth Package:** `/packages/shared-auth/`
|
||||||
- **API Documentation:** `/mana-core-auth/README.md#api-endpoints`
|
- **API Documentation:** `/mana-auth/README.md#api-endpoints`
|
||||||
- **Quick Start:** `/mana-core-auth/QUICKSTART.md`
|
- **Quick Start:** `/mana-auth/QUICKSTART.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Testing Guide - Mana Core Auth Integration
|
# Testing Guide - Mana Auth Integration
|
||||||
|
|
||||||
This guide walks you through testing the Chat project with Mana Core Auth.
|
This guide walks you through testing the Chat project with Mana Auth.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -11,16 +11,16 @@ Before testing, make sure you have:
|
||||||
- ✅ Node.js 20+
|
- ✅ Node.js 20+
|
||||||
- ✅ pnpm installed
|
- ✅ pnpm installed
|
||||||
- ✅ All dependencies installed (`pnpm install` from monorepo root)
|
- ✅ All dependencies installed (`pnpm install` from monorepo root)
|
||||||
- ✅ PostgreSQL running (or Docker for Mana Core Auth)
|
- ✅ PostgreSQL running (or Docker for Mana Auth)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 1: Generate JWT Keys for Mana Core Auth
|
## Step 1: Generate JWT Keys for Mana Auth
|
||||||
|
|
||||||
Mana Core Auth requires RS256 JWT keys. Generate them first:
|
Mana Auth requires RS256 JWT keys. Generate them first:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
chmod +x scripts/generate-keys.sh
|
chmod +x scripts/generate-keys.sh
|
||||||
./scripts/generate-keys.sh
|
./scripts/generate-keys.sh
|
||||||
```
|
```
|
||||||
|
|
@ -51,18 +51,18 @@ MIIBIjANBg...
|
||||||
|
|
||||||
## Step 2: Configure Environment Variables
|
## Step 2: Configure Environment Variables
|
||||||
|
|
||||||
### 2.1 Mana Core Auth
|
### 2.1 Mana Auth
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
Edit `mana-core-auth/.env` and add:
|
Edit `mana-auth/.env` and add:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Database
|
# Database
|
||||||
DATABASE_URL=postgresql://manacore:password@localhost:5432/manacore
|
DATABASE_URL=postgresql://mana:password@localhost:5432/mana
|
||||||
|
|
||||||
# Paste the keys from Step 1
|
# Paste the keys from Step 1
|
||||||
JWT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
|
JWT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
|
@ -94,7 +94,7 @@ AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com
|
||||||
AZURE_OPENAI_API_KEY=your-api-key
|
AZURE_OPENAI_API_KEY=your-api-key
|
||||||
AZURE_OPENAI_API_VERSION=2024-12-01-preview
|
AZURE_OPENAI_API_VERSION=2024-12-01-preview
|
||||||
|
|
||||||
# Mana Core Auth (NEW)
|
# Mana Auth (NEW)
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Supabase (for database, not auth)
|
# Supabase (for database, not auth)
|
||||||
|
|
@ -115,7 +115,7 @@ cp .env.example .env
|
||||||
Edit `chat/apps/web/.env`:
|
Edit `chat/apps/web/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Mana Core Auth (NEW)
|
# Mana Auth (NEW)
|
||||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Backend API (NEW PORT)
|
# Backend API (NEW PORT)
|
||||||
|
|
@ -136,7 +136,7 @@ cp .env.example .env
|
||||||
Edit `chat/apps/mobile/.env`:
|
Edit `chat/apps/mobile/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Mana Core Auth (NEW)
|
# Mana Auth (NEW)
|
||||||
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Backend API (NEW PORT)
|
# Backend API (NEW PORT)
|
||||||
|
|
@ -151,10 +151,10 @@ EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
||||||
|
|
||||||
## Step 3: Start Services (4 Terminals)
|
## Step 3: Start Services (4 Terminals)
|
||||||
|
|
||||||
### Terminal 1: Mana Core Auth
|
### Terminal 1: Mana Auth
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
|
|
||||||
# Start PostgreSQL (if using Docker)
|
# Start PostgreSQL (if using Docker)
|
||||||
docker-compose up postgres -d
|
docker-compose up postgres -d
|
||||||
|
|
@ -169,7 +169,7 @@ pnpm start:dev
|
||||||
**Expected output:**
|
**Expected output:**
|
||||||
|
|
||||||
```
|
```
|
||||||
🚀 Mana Core Auth running on: http://localhost:3001
|
🚀 Mana Auth running on: http://localhost:3001
|
||||||
📚 Environment: development
|
📚 Environment: development
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -432,7 +432,7 @@ curl http://localhost:3002/api/chat/models \
|
||||||
|
|
||||||
### 7.3 Test Token Refresh
|
### 7.3 Test Token Refresh
|
||||||
|
|
||||||
The `@manacore/shared-auth` package automatically refreshes tokens. To test:
|
The `@mana/shared-auth` package automatically refreshes tokens. To test:
|
||||||
|
|
||||||
1. Wait 15+ minutes (or change `JWT_ACCESS_TOKEN_EXPIRY=1m` for testing)
|
1. Wait 15+ minutes (or change `JWT_ACCESS_TOKEN_EXPIRY=1m` for testing)
|
||||||
2. Make an API call from web/mobile app
|
2. Make an API call from web/mobile app
|
||||||
|
|
@ -505,12 +505,12 @@ curl http://localhost:3001/api/v1/credits/transactions \
|
||||||
|
|
||||||
### Issue 1: "Connection refused" to port 3001
|
### Issue 1: "Connection refused" to port 3001
|
||||||
|
|
||||||
**Problem:** Mana Core Auth not running
|
**Problem:** Mana Auth not running
|
||||||
|
|
||||||
**Solution:**
|
**Solution:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
pnpm start:dev
|
pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -522,20 +522,20 @@ pnpm start:dev
|
||||||
|
|
||||||
1. Clear tokens: `localStorage.clear()` in browser
|
1. Clear tokens: `localStorage.clear()` in browser
|
||||||
2. Login again
|
2. Login again
|
||||||
3. Verify JWT keys are identical in Mana Core Auth .env
|
3. Verify JWT keys are identical in Mana Auth .env
|
||||||
|
|
||||||
### Issue 3: CORS errors in browser
|
### Issue 3: CORS errors in browser
|
||||||
|
|
||||||
**Problem:** Web app URL not in CORS whitelist
|
**Problem:** Web app URL not in CORS whitelist
|
||||||
|
|
||||||
**Solution:**
|
**Solution:**
|
||||||
Edit `mana-core-auth/.env`:
|
Edit `mana-auth/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
||||||
```
|
```
|
||||||
|
|
||||||
Restart Mana Core Auth
|
Restart Mana Auth
|
||||||
|
|
||||||
### Issue 4: "Database connection failed"
|
### Issue 4: "Database connection failed"
|
||||||
|
|
||||||
|
|
@ -545,7 +545,7 @@ Restart Mana Core Auth
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# If using Docker
|
# If using Docker
|
||||||
cd mana-core-auth
|
cd mana-auth
|
||||||
docker-compose up postgres -d
|
docker-compose up postgres -d
|
||||||
|
|
||||||
# Check it's running
|
# Check it's running
|
||||||
|
|
@ -598,7 +598,7 @@ Save this as `test-auth.sh`:
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "🧪 Testing Mana Core Auth Integration"
|
echo "🧪 Testing Mana Auth Integration"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Test 1: Register user
|
# Test 1: Register user
|
||||||
|
|
@ -660,7 +660,7 @@ chmod +x test-auth.sh
|
||||||
|
|
||||||
Use this checklist to verify everything works:
|
Use this checklist to verify everything works:
|
||||||
|
|
||||||
### Mana Core Auth ✅
|
### Mana Auth ✅
|
||||||
|
|
||||||
- [ ] Service starts on port 3001
|
- [ ] Service starts on port 3001
|
||||||
- [ ] Can register new user
|
- [ ] Can register new user
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ apps/citycorners/
|
||||||
```
|
```
|
||||||
|
|
||||||
### Tech Stack
|
### Tech Stack
|
||||||
- **Data Layer:** Local-first via @manacore/local-store (Dexie.js/IndexedDB)
|
- **Data Layer:** Local-first via @mana/local-store (Dexie.js/IndexedDB)
|
||||||
- **Sync:** mana-sync (Go, WebSocket) for server synchronization
|
- **Sync:** mana-sync (Go, WebSocket) for server synchronization
|
||||||
- **Web:** SvelteKit 2, Svelte 5 runes, Tailwind 4, OpenStreetMap embeds, svelte-i18n (DE/EN), PWA
|
- **Web:** SvelteKit 2, Svelte 5 runes, Tailwind 4, OpenStreetMap embeds, svelte-i18n (DE/EN), PWA
|
||||||
- **Landing:** Astro 5, Tailwind 3, static site generation
|
- **Landing:** Astro 5, Tailwind 3, static site generation
|
||||||
- **Auth:** mana-core-auth (JWT, guest mode supported)
|
- **Auth:** mana-auth (JWT, guest mode supported)
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ pnpm dev:citycorners:web
|
||||||
|
|
||||||
## Data Model (Local-First)
|
## Data Model (Local-First)
|
||||||
|
|
||||||
Three IndexedDB collections managed by `@manacore/local-store`:
|
Three IndexedDB collections managed by `@mana/local-store`:
|
||||||
|
|
||||||
### Cities
|
### Cities
|
||||||
- **id** (string, PK)
|
- **id** (string, PK)
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ pnpm build # Build for production
|
||||||
- `company`, `job_title`, `department` (VARCHAR)
|
- `company`, `job_title`, `department` (VARCHAR)
|
||||||
- `website`, `birthday`, `notes`, `photo_url` (VARCHAR/TEXT/DATE)
|
- `website`, `birthday`, `notes`, `photo_url` (VARCHAR/TEXT/DATE)
|
||||||
- `is_favorite`, `is_archived` (BOOLEAN)
|
- `is_favorite`, `is_archived` (BOOLEAN)
|
||||||
- `organization_id`, `team_id` (UUID) - Manacore integration
|
- `organization_id`, `team_id` (UUID) - Mana integration
|
||||||
- `visibility` (VARCHAR) - private/team/organization/public
|
- `visibility` (VARCHAR) - private/team/organization/public
|
||||||
- `shared_with` (JSONB) - Array of user IDs
|
- `shared_with` (JSONB) - Array of user IDs
|
||||||
- `created_at`, `updated_at` (TIMESTAMP)
|
- `created_at`, `updated_at` (TIMESTAMP)
|
||||||
|
|
@ -177,7 +177,7 @@ pnpm build # Build for production
|
||||||
```
|
```
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3015
|
PORT=3015
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/contacts
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/contacts
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
CORS_ORIGINS=http://localhost:5173,http://localhost:5184,http://localhost:8081
|
CORS_ORIGINS=http://localhost:5173,http://localhost:5184,http://localhost:8081
|
||||||
S3_ENDPOINT=http://localhost:9000
|
S3_ENDPOINT=http://localhost:9000
|
||||||
|
|
@ -253,8 +253,8 @@ Implementation: `duplicate-detector.ts` — runs fully offline, no server calls.
|
||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
1. **Authentication**: Uses Mana Core Auth (JWT in Authorization header)
|
1. **Authentication**: Uses Mana Auth (JWT in Authorization header)
|
||||||
2. **Database**: PostgreSQL with Drizzle ORM
|
2. **Database**: PostgreSQL with Drizzle ORM
|
||||||
3. **Port**: Backend runs on port 3015, Web on port 5184 by default
|
3. **Port**: Backend runs on port 3015, Web on port 5184 by default
|
||||||
4. **Storage**: Uses MinIO/S3 for contact photos via @manacore/shared-storage
|
4. **Storage**: Uses MinIO/S3 for contact photos via @mana/shared-storage
|
||||||
5. **Manacore Integration**: Contacts can be linked to Organizations and Teams
|
5. **Mana Integration**: Contacts can be linked to Organizations and Teams
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ const links = {
|
||||||
© {currentYear} ManaContacts. Alle Rechte vorbehalten.
|
© {currentYear} ManaContacts. Alle Rechte vorbehalten.
|
||||||
</p>
|
</p>
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
Ein <a href="https://mana.how" class="text-primary-400 hover:underline">Manacore</a> Produkt
|
Ein <a href="https://mana.how" class="text-primary-400 hover:underline">Mana</a> Produkt
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "contacts",
|
"name": "contacts",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Contacts App - Contact Management with Manacore Integration",
|
"description": "Contacts App - Contact Management with Mana Integration",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "pnpm run --filter=@contacts/* --parallel dev",
|
"dev": "pnpm run --filter=@contacts/* --parallel dev",
|
||||||
"dev:server": "pnpm --filter @contacts/server dev",
|
"dev:server": "pnpm --filter @contacts/server dev",
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ pnpm setup:db:context # Create DB + push schema
|
||||||
| **Backend** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
| **Backend** | Hono + Bun, Drizzle ORM, PostgreSQL |
|
||||||
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
| **Web** | SvelteKit 2.x, Svelte 5 (runes mode), Tailwind CSS 4 |
|
||||||
| **Mobile** | React Native 0.76 + Expo SDK 52, NativeWind |
|
| **Mobile** | React Native 0.76 + Expo SDK 52, NativeWind |
|
||||||
| **Auth** | Mana Core Auth (JWT) |
|
| **Auth** | Mana Auth (JWT) |
|
||||||
| **AI** | Azure OpenAI (GPT-4.1), Google Gemini (Pro, Flash) |
|
| **AI** | Azure OpenAI (GPT-4.1), Google Gemini (Pro, Flash) |
|
||||||
| **i18n** | svelte-i18n (DE, EN) |
|
| **i18n** | svelte-i18n (DE, EN) |
|
||||||
|
|
||||||
|
|
@ -187,7 +187,7 @@ pnpm setup:db:context # Create DB + push schema
|
||||||
```env
|
```env
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3020
|
PORT=3020
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/context
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/context
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
AZURE_OPENAI_API_KEY=your-key
|
AZURE_OPENAI_API_KEY=your-key
|
||||||
AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
|
AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
|
||||||
|
|
@ -202,7 +202,7 @@ PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
## Important Patterns
|
## Important Patterns
|
||||||
|
|
||||||
1. **API Client pattern** - All web services use `@manacore/shared-api-client` (Go-style `{ data, error }`)
|
1. **API Client pattern** - All web services use `@mana/shared-api-client` (Go-style `{ data, error }`)
|
||||||
2. **Svelte 5 runes** - `$state`, `$derived`, `$effect` throughout
|
2. **Svelte 5 runes** - `$state`, `$derived`, `$effect` throughout
|
||||||
3. **Server-side AI keys** - API keys only on backend, never in frontend
|
3. **Server-side AI keys** - API keys only on backend, never in frontend
|
||||||
4. **Auto word/token count** - Backend calculates on create/update
|
4. **Auto word/token count** - Backend calculates on create/update
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ export default defineConfig({
|
||||||
site: 'https://docs.mana.how',
|
site: 'https://docs.mana.how',
|
||||||
integrations: [
|
integrations: [
|
||||||
starlight({
|
starlight({
|
||||||
title: 'Manacore Docs',
|
title: 'Mana Docs',
|
||||||
description:
|
description:
|
||||||
'Documentation for the Manacore ecosystem - a multi-app platform with shared infrastructure.',
|
'Documentation for the Mana ecosystem - a multi-app platform with shared infrastructure.',
|
||||||
logo: {
|
logo: {
|
||||||
light: './src/assets/logo-light.svg',
|
light: './src/assets/logo-light.svg',
|
||||||
dark: './src/assets/logo-dark.svg',
|
dark: './src/assets/logo-dark.svg',
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
---
|
---
|
||||||
title: API Reference
|
title: API Reference
|
||||||
description: API documentation for Manacore services.
|
description: API documentation for Mana services.
|
||||||
---
|
---
|
||||||
|
|
||||||
# API Reference
|
# API Reference
|
||||||
|
|
||||||
This section contains API documentation for all Manacore backend services.
|
This section contains API documentation for all Mana backend services.
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { Aside, Tabs, TabItem, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
|
|
||||||
All Manacore applications use **Mana Core Auth** as the central authentication service, providing EdDSA JWT-based authentication.
|
All Mana applications use **Mana Core Auth** as the central authentication service, providing EdDSA JWT-based authentication.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
@ -36,8 +36,8 @@ Mana Core Auth uses **EdDSA (Ed25519)** for JWT signing:
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"sid": "session-uuid",
|
"sid": "session-uuid",
|
||||||
"exp": 1764606251,
|
"exp": 1764606251,
|
||||||
"iss": "manacore",
|
"iss": "mana",
|
||||||
"aud": "manacore"
|
"aud": "mana"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -48,18 +48,18 @@ Mana Core Auth uses **EdDSA (Ed25519)** for JWT signing:
|
||||||
| `role` | User role (`user`, `admin`) |
|
| `role` | User role (`user`, `admin`) |
|
||||||
| `sid` | Session ID for invalidation |
|
| `sid` | Session ID for invalidation |
|
||||||
| `exp` | Expiration timestamp |
|
| `exp` | Expiration timestamp |
|
||||||
| `iss` | Issuer (`manacore`) |
|
| `iss` | Issuer (`mana`) |
|
||||||
| `aud` | Audience (`manacore`) |
|
| `aud` | Audience (`mana`) |
|
||||||
|
|
||||||
## Backend Integration
|
## Backend Integration
|
||||||
|
|
||||||
### Option 1: Simple Auth Only
|
### Option 1: Simple Auth Only
|
||||||
|
|
||||||
Use `@manacore/shared-nestjs-auth` for JWT validation:
|
Use `@mana/shared-nestjs-auth` for JWT validation:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// app.module.ts
|
// app.module.ts
|
||||||
import { JwtAuthModule } from '@manacore/shared-nestjs-auth';
|
import { JwtAuthModule } from '@mana/shared-nestjs-auth';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -73,7 +73,7 @@ export class AppModule {}
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// controller.ts
|
// controller.ts
|
||||||
import { JwtAuthGuard, CurrentUser, CurrentUserData } from '@manacore/shared-nestjs-auth';
|
import { JwtAuthGuard, CurrentUser, CurrentUserData } from '@mana/shared-nestjs-auth';
|
||||||
|
|
||||||
@Controller('api')
|
@Controller('api')
|
||||||
@UseGuards(JwtAuthGuard)
|
@UseGuards(JwtAuthGuard)
|
||||||
|
|
@ -140,7 +140,7 @@ export class ApiController {
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// src/lib/auth.ts
|
// src/lib/auth.ts
|
||||||
import { createAuthService } from '@manacore/shared-auth';
|
import { createAuthService } from '@mana/shared-auth';
|
||||||
|
|
||||||
export const auth = createAuthService({
|
export const auth = createAuthService({
|
||||||
authUrl: import.meta.env.PUBLIC_MANA_AUTH_URL,
|
authUrl: import.meta.env.PUBLIC_MANA_AUTH_URL,
|
||||||
|
|
@ -157,7 +157,7 @@ if (data) {
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// src/services/auth.ts
|
// src/services/auth.ts
|
||||||
import { createAuthService } from '@manacore/shared-auth';
|
import { createAuthService } from '@mana/shared-auth';
|
||||||
|
|
||||||
export const auth = createAuthService({
|
export const auth = createAuthService({
|
||||||
authUrl: process.env.EXPO_PUBLIC_MANA_AUTH_URL,
|
authUrl: process.env.EXPO_PUBLIC_MANA_AUTH_URL,
|
||||||
|
|
@ -277,7 +277,7 @@ Never enable auth bypass in production!
|
||||||
| Backend | Package | Port |
|
| Backend | Package | Port |
|
||||||
|---------|---------|------|
|
|---------|---------|------|
|
||||||
| Chat | `@mana-core/nestjs-integration` | 3002 |
|
| Chat | `@mana-core/nestjs-integration` | 3002 |
|
||||||
| Picture | `@manacore/shared-nestjs-auth` | 3006 |
|
| Picture | `@mana/shared-nestjs-auth` | 3006 |
|
||||||
| Zitare | `@manacore/shared-nestjs-auth` | 3007 |
|
| Zitare | `@mana/shared-nestjs-auth` | 3007 |
|
||||||
| Cards | `@mana-core/nestjs-integration` | 3009 |
|
| Cards | `@mana-core/nestjs-integration` | 3009 |
|
||||||
| Contacts | `@manacore/shared-nestjs-auth` | 3015 |
|
| Contacts | `@mana/shared-nestjs-auth` | 3015 |
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Backend (NestJS)
|
title: Backend (NestJS)
|
||||||
description: NestJS backend architecture patterns in Manacore.
|
description: NestJS backend architecture patterns in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Backend Architecture
|
# Backend Architecture
|
||||||
|
|
||||||
All Manacore backends use **NestJS 10-11** with consistent patterns for structure, validation, and error handling.
|
All Mana backends use **NestJS 10-11** with consistent patterns for structure, validation, and error handling.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ import {
|
||||||
HttpCode,
|
HttpCode,
|
||||||
HttpStatus,
|
HttpStatus,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { JwtAuthGuard, CurrentUser, CurrentUserData } from '@manacore/shared-nestjs-auth';
|
import { JwtAuthGuard, CurrentUser, CurrentUserData } from '@mana/shared-nestjs-auth';
|
||||||
import { UsersService } from './users.service';
|
import { UsersService } from './users.service';
|
||||||
import { CreateUserDto } from './dto/create-user.dto';
|
import { CreateUserDto } from './dto/create-user.dto';
|
||||||
|
|
||||||
|
|
@ -109,7 +109,7 @@ Services contain business logic and database operations:
|
||||||
```typescript
|
```typescript
|
||||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||||
import { Inject } from '@nestjs/common';
|
import { Inject } from '@nestjs/common';
|
||||||
import { DRIZZLE } from '@manacore/shared-drizzle';
|
import { DRIZZLE } from '@mana/shared-drizzle';
|
||||||
import { eq, and } from 'drizzle-orm';
|
import { eq, and } from 'drizzle-orm';
|
||||||
import { users } from '../drizzle/schema';
|
import { users } from '../drizzle/schema';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Mobile (Expo)
|
title: Mobile (Expo)
|
||||||
description: Expo React Native mobile application patterns in Manacore.
|
description: Expo React Native mobile application patterns in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Mobile Architecture
|
# Mobile Architecture
|
||||||
|
|
||||||
Manacore mobile apps use **Expo SDK 52+** with React Native, Expo Router, and NativeWind for styling.
|
Mana mobile apps use **Expo SDK 52+** with React Native, Expo Router, and NativeWind for styling.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Architecture Overview
|
title: Architecture Overview
|
||||||
description: High-level architecture of the Manacore ecosystem.
|
description: High-level architecture of the Mana ecosystem.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Card, CardGrid } from '@astrojs/starlight/components';
|
import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Architecture Overview
|
# Architecture Overview
|
||||||
|
|
||||||
Manacore is a multi-app ecosystem with shared infrastructure, enabling rapid development of interconnected applications.
|
Mana is a multi-app ecosystem with shared infrastructure, enabling rapid development of interconnected applications.
|
||||||
|
|
||||||
## System Architecture
|
## System Architecture
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Search Service
|
# Search Service
|
||||||
|
|
||||||
**Mana Search** provides web search and content extraction capabilities for Manacore applications.
|
**Mana Search** provides web search and content extraction capabilities for Mana applications.
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Storage
|
title: Storage
|
||||||
description: S3-compatible object storage for files and media in Manacore.
|
description: S3-compatible object storage for files and media in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Storage
|
# Storage
|
||||||
|
|
||||||
Manacore uses S3-compatible object storage for file uploads, generated images, and other media.
|
Mana uses S3-compatible object storage for file uploads, generated images, and other media.
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
|
|
@ -50,7 +50,7 @@ import {
|
||||||
createPictureStorage,
|
createPictureStorage,
|
||||||
generateUserFileKey,
|
generateUserFileKey,
|
||||||
getContentType,
|
getContentType,
|
||||||
} from '@manacore/shared-storage';
|
} from '@mana/shared-storage';
|
||||||
|
|
||||||
const storage = createPictureStorage();
|
const storage = createPictureStorage();
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ import {
|
||||||
createChatStorage,
|
createChatStorage,
|
||||||
createCardsStorage,
|
createCardsStorage,
|
||||||
createContactsStorage,
|
createContactsStorage,
|
||||||
} from '@manacore/shared-storage';
|
} from '@mana/shared-storage';
|
||||||
|
|
||||||
// Each creates a client configured for that bucket
|
// Each creates a client configured for that bucket
|
||||||
const pictureStorage = createPictureStorage();
|
const pictureStorage = createPictureStorage();
|
||||||
|
|
@ -111,7 +111,7 @@ const chatStorage = createChatStorage();
|
||||||
### Custom Storage Client
|
### Custom Storage Client
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { createStorageClient } from '@manacore/shared-storage';
|
import { createStorageClient } from '@mana/shared-storage';
|
||||||
|
|
||||||
const customStorage = createStorageClient({
|
const customStorage = createStorageClient({
|
||||||
bucket: 'my-custom-bucket',
|
bucket: 'my-custom-bucket',
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Web (SvelteKit)
|
title: Web (SvelteKit)
|
||||||
description: SvelteKit web application patterns in Manacore.
|
description: SvelteKit web application patterns in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Web Architecture
|
# Web Architecture
|
||||||
|
|
||||||
All Manacore web applications use **SvelteKit 2** with **Svelte 5** (runes mode) and Tailwind CSS.
|
All Mana web applications use **SvelteKit 2** with **Svelte 5** (runes mode) and Tailwind CSS.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,10 @@ All landing pages and static sites are deployed to **Cloudflare Pages** using Di
|
||||||
|---------|---------|-------------------|-----|
|
|---------|---------|-------------------|-----|
|
||||||
| Chat | `@chat/landing` | `chat-landing` | chat.mana.how |
|
| Chat | `@chat/landing` | `chat-landing` | chat.mana.how |
|
||||||
| Picture | `@picture/landing` | `picture-landing` | picture.mana.how |
|
| Picture | `@picture/landing` | `picture-landing` | picture.mana.how |
|
||||||
| Manacore | `@manacore/landing` | `manacore-landing` | mana.how |
|
| Mana | `@mana/landing` | `mana-landing` | mana.how |
|
||||||
| Cards | `@cards/landing` | `cards-landing` | cards.mana.how |
|
| Cards | `@cards/landing` | `cards-landing` | cards.mana.how |
|
||||||
| Zitare | `@zitare/landing` | `zitare-landing` | zitare.mana.how |
|
| Zitare | `@zitare/landing` | `zitare-landing` | zitare.mana.how |
|
||||||
| Docs | `@manacore/docs` | `manacore-docs` | docs.mana.how |
|
| Docs | `@mana/docs` | `mana-docs` | docs.mana.how |
|
||||||
|
|
||||||
## Quick Deploy
|
## Quick Deploy
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Mac Mini Server
|
title: Mac Mini Server
|
||||||
description: Production server setup and management for Manacore backends.
|
description: Production server setup and management for Mana backends.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
@ -37,7 +37,7 @@ Requires `cloudflared` installed: `brew install cloudflare/cloudflare/cloudflare
|
||||||
## Directory Structure
|
## Directory Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
~/projects/manacore-monorepo/
|
~/projects/mana-monorepo/
|
||||||
├── docker-compose.macmini.yml # Production compose file
|
├── docker-compose.macmini.yml # Production compose file
|
||||||
├── .env.production # Production environment
|
├── .env.production # Production environment
|
||||||
├── scripts/mac-mini/ # Server management scripts
|
├── scripts/mac-mini/ # Server management scripts
|
||||||
|
|
@ -53,7 +53,7 @@ Requires `cloudflared` installed: `brew install cloudflare/cloudflare/cloudflare
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh mana-server
|
ssh mana-server
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
./scripts/mac-mini/status.sh
|
./scripts/mac-mini/status.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ chat-backend running (healthy)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh mana-server
|
ssh mana-server
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
./scripts/mac-mini/deploy.sh
|
./scripts/mac-mini/deploy.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -117,12 +117,12 @@ services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: manacore
|
POSTGRES_USER: mana
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- postgres_data:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U manacore"]
|
test: ["CMD-SHELL", "pg_isready -U mana"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
@ -143,7 +143,7 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/mana-core-auth/Dockerfile
|
dockerfile: services/mana-core-auth/Dockerfile
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://manacore:${POSTGRES_PASSWORD}@postgres:5432/manacore
|
- DATABASE_URL=postgresql://mana:${POSTGRES_PASSWORD}@postgres:5432/mana_platform
|
||||||
- REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379
|
- REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
|
|
@ -161,7 +161,7 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: apps/chat/apps/backend/Dockerfile
|
dockerfile: apps/chat/apps/backend/Dockerfile
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://manacore:${POSTGRES_PASSWORD}@postgres:5432/chat
|
- DATABASE_URL=postgresql://mana:${POSTGRES_PASSWORD}@postgres:5432/chat
|
||||||
- MANA_AUTH_URL=http://mana-auth:3001
|
- MANA_AUTH_URL=http://mana-auth:3001
|
||||||
depends_on:
|
depends_on:
|
||||||
- mana-auth
|
- mana-auth
|
||||||
|
|
@ -234,7 +234,7 @@ tail -f /var/log/cloudflared.log
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Manual backup
|
# Manual backup
|
||||||
docker exec postgres pg_dump -U manacore manacore > backup_$(date +%Y%m%d).sql
|
docker exec postgres pg_dump -U mana mana_platform > backup_$(date +%Y%m%d).sql
|
||||||
|
|
||||||
# Automated daily backups (via cron)
|
# Automated daily backups (via cron)
|
||||||
0 2 * * * /home/till/scripts/backup-databases.sh
|
0 2 * * * /home/till/scripts/backup-databases.sh
|
||||||
|
|
@ -247,7 +247,7 @@ docker exec postgres pg_dump -U manacore manacore > backup_$(date +%Y%m%d).sql
|
||||||
docker compose -f docker-compose.macmini.yml stop chat-backend
|
docker compose -f docker-compose.macmini.yml stop chat-backend
|
||||||
|
|
||||||
# Restore
|
# Restore
|
||||||
docker exec -i postgres psql -U manacore manacore < backup_20240115.sql
|
docker exec -i postgres psql -U mana mana_platform < backup_20240115.sql
|
||||||
|
|
||||||
# Start services
|
# Start services
|
||||||
docker compose -f docker-compose.macmini.yml start chat-backend
|
docker compose -f docker-compose.macmini.yml start chat-backend
|
||||||
|
|
@ -309,7 +309,7 @@ docker image prune -a
|
||||||
docker compose -f docker-compose.macmini.yml ps postgres
|
docker compose -f docker-compose.macmini.yml ps postgres
|
||||||
|
|
||||||
# Test connection
|
# Test connection
|
||||||
docker exec -it postgres psql -U manacore -c "SELECT 1"
|
docker exec -it postgres psql -U mana -c "SELECT 1"
|
||||||
|
|
||||||
# Check logs
|
# Check logs
|
||||||
docker compose -f docker-compose.macmini.yml logs postgres
|
docker compose -f docker-compose.macmini.yml logs postgres
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Deployment Overview
|
title: Deployment Overview
|
||||||
description: Deployment strategies and infrastructure for Manacore applications.
|
description: Deployment strategies and infrastructure for Mana applications.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Card, CardGrid, Aside } from '@astrojs/starlight/components';
|
import { Card, CardGrid, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Deployment Overview
|
# Deployment Overview
|
||||||
|
|
||||||
Manacore uses multiple deployment strategies depending on the application type.
|
Mana uses multiple deployment strategies depending on the application type.
|
||||||
|
|
||||||
## Deployment Targets
|
## Deployment Targets
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ pnpm deploy:docs
|
||||||
ssh mana-server
|
ssh mana-server
|
||||||
|
|
||||||
# Pull latest changes
|
# Pull latest changes
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
git pull
|
git pull
|
||||||
|
|
||||||
# Restart services
|
# Restart services
|
||||||
|
|
@ -135,7 +135,7 @@ npx wrangler pages deployment tail <deployment-id> --project-name=chat-landing
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh mana-server
|
ssh mana-server
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
|
|
||||||
# Revert to previous commit
|
# Revert to previous commit
|
||||||
git checkout HEAD~1
|
git checkout HEAD~1
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Self-Hosting
|
title: Self-Hosting
|
||||||
description: Host your own Manacore instance with Docker Compose.
|
description: Host your own Mana instance with Docker Compose.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Self-Hosting
|
# Self-Hosting
|
||||||
|
|
||||||
Run your own Manacore instance using Docker Compose.
|
Run your own Mana instance using Docker Compose.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
|
@ -23,8 +23,8 @@ Run your own Manacore instance using Docker Compose.
|
||||||
1. **Clone the repository**
|
1. **Clone the repository**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/manacore/manacore-monorepo.git
|
git clone https://github.com/mana/mana-monorepo.git
|
||||||
cd manacore-monorepo
|
cd mana-monorepo
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Create environment file**
|
2. **Create environment file**
|
||||||
|
|
@ -37,7 +37,7 @@ Run your own Manacore instance using Docker Compose.
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Database
|
# Database
|
||||||
POSTGRES_USER=manacore
|
POSTGRES_USER=mana
|
||||||
POSTGRES_PASSWORD=your-secure-password
|
POSTGRES_PASSWORD=your-secure-password
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
|
|
@ -113,9 +113,9 @@ services:
|
||||||
|
|
||||||
# Auth Service
|
# Auth Service
|
||||||
mana-auth:
|
mana-auth:
|
||||||
image: ghcr.io/manacore/mana-core-auth:latest
|
image: ghcr.io/mana/mana-core-auth:latest
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/manacore
|
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/mana_platformcore
|
||||||
REDIS_HOST: redis
|
REDIS_HOST: redis
|
||||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||||
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
|
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
|
||||||
|
|
@ -129,7 +129,7 @@ services:
|
||||||
|
|
||||||
# Chat Backend
|
# Chat Backend
|
||||||
chat-backend:
|
chat-backend:
|
||||||
image: ghcr.io/manacore/chat-backend:latest
|
image: ghcr.io/mana/chat-backend:latest
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/chat
|
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/chat
|
||||||
MANA_AUTH_URL: http://mana-auth:3001
|
MANA_AUTH_URL: http://mana-auth:3001
|
||||||
|
|
@ -146,7 +146,7 @@ volumes:
|
||||||
|
|
||||||
## Generate JWT Keys
|
## Generate JWT Keys
|
||||||
|
|
||||||
Manacore uses EdDSA (Ed25519) for JWT signing:
|
Mana uses EdDSA (Ed25519) for JWT signing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Generate private key
|
# Generate private key
|
||||||
|
|
@ -220,18 +220,18 @@ certbot renew --dry-run
|
||||||
|
|
||||||
### Daily Database Backup
|
### Daily Database Backup
|
||||||
|
|
||||||
Create `/etc/cron.daily/manacore-backup`:
|
Create `/etc/cron.daily/mana-backup`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
BACKUP_DIR=/var/backups/manacore
|
BACKUP_DIR=/var/backups/mana
|
||||||
DATE=$(date +%Y%m%d)
|
DATE=$(date +%Y%m%d)
|
||||||
|
|
||||||
# Create backup directory
|
# Create backup directory
|
||||||
mkdir -p $BACKUP_DIR
|
mkdir -p $BACKUP_DIR
|
||||||
|
|
||||||
# Backup all databases
|
# Backup all databases
|
||||||
docker exec postgres pg_dumpall -U manacore > $BACKUP_DIR/all_$DATE.sql
|
docker exec postgres pg_dumpall -U ${POSTGRES_USER}core > $BACKUP_DIR/all_$DATE.sql
|
||||||
|
|
||||||
# Compress
|
# Compress
|
||||||
gzip $BACKUP_DIR/all_$DATE.sql
|
gzip $BACKUP_DIR/all_$DATE.sql
|
||||||
|
|
@ -247,7 +247,7 @@ find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
|
||||||
docker compose -f docker-compose.production.yml stop
|
docker compose -f docker-compose.production.yml stop
|
||||||
|
|
||||||
# Restore
|
# Restore
|
||||||
gunzip -c /var/backups/manacore/all_20240115.sql.gz | docker exec -i postgres psql -U manacore
|
gunzip -c /var/backups/mana/all_20240115.sql.gz | docker exec -i postgres psql -U ${POSTGRES_USER}core
|
||||||
|
|
||||||
# Start services
|
# Start services
|
||||||
docker compose -f docker-compose.production.yml start
|
docker compose -f docker-compose.production.yml start
|
||||||
|
|
@ -265,7 +265,7 @@ docker compose -f docker-compose.production.yml start
|
||||||
2. **Backup database** (always!)
|
2. **Backup database** (always!)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker exec postgres pg_dumpall -U manacore > backup_before_update.sql
|
docker exec postgres pg_dumpall -U ${POSTGRES_USER}core > backup_before_update.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Restart services**
|
3. **Restart services**
|
||||||
|
|
@ -301,7 +301,7 @@ docker compose -f docker-compose.production.yml logs mana-auth
|
||||||
docker compose -f docker-compose.production.yml ps postgres
|
docker compose -f docker-compose.production.yml ps postgres
|
||||||
|
|
||||||
# Check connection
|
# Check connection
|
||||||
docker exec -it postgres psql -U manacore -c "SELECT 1"
|
docker exec -it postgres psql -U ${POSTGRES_USER}core -c "SELECT 1"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Out of Memory
|
### Out of Memory
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Database Migrations
|
title: Database Migrations
|
||||||
description: Managing database schemas with Drizzle ORM in the Manacore monorepo.
|
description: Managing database schemas with Drizzle ORM in the Mana monorepo.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Database Migrations
|
# Database Migrations
|
||||||
|
|
||||||
Manacore uses **Drizzle ORM** for database management with PostgreSQL.
|
Mana uses **Drizzle ORM** for database management with PostgreSQL.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
@ -15,7 +15,7 @@ Each backend service has its own database and schema:
|
||||||
|
|
||||||
| Service | Database | Port |
|
| Service | Database | Port |
|
||||||
|---------|----------|------|
|
|---------|----------|------|
|
||||||
| mana-core-auth | manacore | 3001 |
|
| mana-core-auth | mana_platform | 3001 |
|
||||||
| chat | chat | 3002 |
|
| chat | chat | 3002 |
|
||||||
| zitare | zitare | 3007 |
|
| zitare | zitare | 3007 |
|
||||||
| contacts | contacts | 3015 |
|
| contacts | contacts | 3015 |
|
||||||
|
|
@ -188,7 +188,7 @@ export default defineConfig({
|
||||||
### NestJS Module
|
### NestJS Module
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { DrizzleModule } from '@manacore/shared-drizzle';
|
import { DrizzleModule } from '@mana/shared-drizzle';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -208,7 +208,7 @@ export class AppModule {}
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { DRIZZLE } from '@manacore/shared-drizzle';
|
import { DRIZZLE } from '@mana/shared-drizzle';
|
||||||
import { eq } from 'drizzle-orm';
|
import { eq } from 'drizzle-orm';
|
||||||
import { users } from '../drizzle/schema';
|
import { users } from '../drizzle/schema';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Docker Setup
|
title: Docker Setup
|
||||||
description: Working with Docker for local development and production in Manacore.
|
description: Working with Docker for local development and production in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Docker Setup
|
# Docker Setup
|
||||||
|
|
||||||
Manacore uses Docker for local development services and production deployment.
|
Mana uses Docker for local development services and production deployment.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Environment Variables
|
title: Environment Variables
|
||||||
description: Centralized environment variable management in the Manacore monorepo.
|
description: Centralized environment variable management in the Mana monorepo.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Environment Variables
|
# Environment Variables
|
||||||
|
|
||||||
Manacore uses a centralized environment variable system. All development variables are managed from a single file.
|
Mana uses a centralized environment variable system. All development variables are managed from a single file.
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
|
|
@ -75,8 +75,8 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
|
||||||
| `MANA_AUTH_DATABASE_URL` | PostgreSQL connection | - |
|
| `MANA_AUTH_DATABASE_URL` | PostgreSQL connection | - |
|
||||||
| `JWT_ACCESS_TOKEN_EXPIRY` | Access token TTL | `15m` |
|
| `JWT_ACCESS_TOKEN_EXPIRY` | Access token TTL | `15m` |
|
||||||
| `JWT_REFRESH_TOKEN_EXPIRY` | Refresh token TTL | `7d` |
|
| `JWT_REFRESH_TOKEN_EXPIRY` | Refresh token TTL | `7d` |
|
||||||
| `JWT_ISSUER` | JWT issuer claim | `manacore` |
|
| `JWT_ISSUER` | JWT issuer claim | `mana` |
|
||||||
| `JWT_AUDIENCE` | JWT audience claim | `manacore` |
|
| `JWT_AUDIENCE` | JWT audience claim | `mana` |
|
||||||
| `STRIPE_SECRET_KEY` | Stripe secret key | - |
|
| `STRIPE_SECRET_KEY` | Stripe secret key | - |
|
||||||
| `CREDITS_SIGNUP_BONUS` | Credits on signup | `150` |
|
| `CREDITS_SIGNUP_BONUS` | Credits on signup | `150` |
|
||||||
| `CREDITS_DAILY_FREE` | Daily free credits | `5` |
|
| `CREDITS_DAILY_FREE` | Daily free credits | `5` |
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Local Development
|
title: Local Development
|
||||||
description: Set up and run Manacore applications locally with automatic database setup.
|
description: Set up and run Mana applications locally with automatic database setup.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
@ -86,7 +86,7 @@ This is useful when setting up a fresh environment or after pulling new schema c
|
||||||
|
|
||||||
On first `pnpm docker:up`, the PostgreSQL container runs `docker/init-db/01-create-databases.sql` which creates all databases:
|
On first `pnpm docker:up`, the PostgreSQL container runs `docker/init-db/01-create-databases.sql` which creates all databases:
|
||||||
|
|
||||||
- manacore, chat, zitare, contacts, calendar, clock, todo, cards
|
- mana_platform, chat, zitare, contacts, calendar, clock, todo, cards
|
||||||
- storage, mail, moodlit, finance, inventory, techbase, voxel_lava, figgos
|
- storage, mail, moodlit, finance, inventory, techbase, voxel_lava, figgos
|
||||||
|
|
||||||
### Setup Script
|
### Setup Script
|
||||||
|
|
@ -104,13 +104,13 @@ Some apps don't have backends or don't use Drizzle:
|
||||||
|
|
||||||
| App | Reason |
|
| App | Reason |
|
||||||
|-----|--------|
|
|-----|--------|
|
||||||
| manacore | No backend (uses other services) |
|
| mana | No backend (uses other services) |
|
||||||
| cards | Backend exists but no db:push |
|
| cards | Backend exists but no db:push |
|
||||||
|
|
||||||
For these, use the regular dev commands:
|
For these, use the regular dev commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm dev:manacore:web
|
pnpm dev:mana:web
|
||||||
pnpm dev:cards:app
|
pnpm dev:cards:app
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -128,7 +128,7 @@ If you see `database "xxx" does not exist`:
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Option 2: Manual">
|
<TabItem label="Option 2: Manual">
|
||||||
```bash
|
```bash
|
||||||
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;"
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
@ -196,12 +196,12 @@ If your backend uses Drizzle ORM:
|
||||||
1. **Add database to Docker init** (`docker/init-db/01-create-databases.sql`):
|
1. **Add database to Docker init** (`docker/init-db/01-create-databases.sql`):
|
||||||
```sql
|
```sql
|
||||||
CREATE DATABASE IF NOT EXISTS newproject;
|
CREATE DATABASE IF NOT EXISTS newproject;
|
||||||
GRANT ALL PRIVILEGES ON DATABASE newproject TO manacore;
|
GRANT ALL PRIVILEGES ON DATABASE newproject TO mana;
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Add DATABASE_URL to `.env.development`**:
|
2. **Add DATABASE_URL to `.env.development`**:
|
||||||
```env
|
```env
|
||||||
NEWPROJECT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/newproject
|
NEWPROJECT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/newproject
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Update `scripts/generate-env.mjs`** to generate the backend `.env` file.
|
3. **Update `scripts/generate-env.mjs`** to generate the backend `.env` file.
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Testing
|
title: Testing
|
||||||
description: Testing patterns and practices in the Manacore monorepo.
|
description: Testing patterns and practices in the Mana monorepo.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
|
|
||||||
Manacore uses Jest for backend testing and Vitest for frontend testing.
|
Mana uses Jest for backend testing and Vitest for frontend testing.
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ src/
|
||||||
```typescript
|
```typescript
|
||||||
import { Test, TestingModule } from '@nestjs/testing';
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
import { UsersService } from './users.service';
|
import { UsersService } from './users.service';
|
||||||
import { DRIZZLE } from '@manacore/shared-drizzle';
|
import { DRIZZLE } from '@mana/shared-drizzle';
|
||||||
|
|
||||||
describe('UsersService', () => {
|
describe('UsersService', () => {
|
||||||
let service: UsersService;
|
let service: UsersService;
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
---
|
---
|
||||||
title: Introduction
|
title: Introduction
|
||||||
description: Welcome to the Manacore documentation - learn about our multi-app ecosystem platform.
|
description: Welcome to the Mana documentation - learn about our multi-app ecosystem platform.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Card, CardGrid } from '@astrojs/starlight/components';
|
import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Welcome to Manacore
|
# Welcome to Mana
|
||||||
|
|
||||||
Manacore is a **multi-app ecosystem platform** built as a pnpm monorepo. It provides shared infrastructure, authentication, and common patterns for building modern web and mobile applications.
|
Mana is a **multi-app ecosystem platform** built as a pnpm monorepo. It provides shared infrastructure, authentication, and common patterns for building modern web and mobile applications.
|
||||||
|
|
||||||
## What is Manacore?
|
## What is Mana?
|
||||||
|
|
||||||
Manacore is designed to streamline the development of multiple interconnected applications:
|
Mana is designed to streamline the development of multiple interconnected applications:
|
||||||
|
|
||||||
- **Shared Authentication** via Mana Core Auth (EdDSA JWT)
|
- **Shared Authentication** via Mana Core Auth (EdDSA JWT)
|
||||||
- **Unified Database Patterns** with Drizzle ORM and PostgreSQL
|
- **Unified Database Patterns** with Drizzle ORM and PostgreSQL
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Project Structure
|
title: Project Structure
|
||||||
description: Understand how the Manacore monorepo is organized.
|
description: Understand how the Mana monorepo is organized.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { FileTree } from '@astrojs/starlight/components';
|
import { FileTree } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Project Structure
|
# Project Structure
|
||||||
|
|
||||||
Manacore uses a pnpm workspace monorepo with Turborepo for build orchestration.
|
Mana uses a pnpm workspace monorepo with Turborepo for build orchestration.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
@ -84,21 +84,21 @@ The `services/` directory contains standalone microservices:
|
||||||
Packages in `packages/` are shared across all applications:
|
Packages in `packages/` are shared across all applications:
|
||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
- `@manacore/shared-auth` - Client-side auth utilities
|
- `@mana/shared-auth` - Client-side auth utilities
|
||||||
- `@manacore/shared-nestjs-auth` - NestJS JWT guards
|
- `@mana/shared-nestjs-auth` - NestJS JWT guards
|
||||||
- `@mana-core/nestjs-integration` - Full NestJS auth + credits module
|
- `@mana-core/nestjs-integration` - Full NestJS auth + credits module
|
||||||
|
|
||||||
### UI & Styling
|
### UI & Styling
|
||||||
- `@manacore/shared-ui` - React Native components
|
- `@mana/shared-ui` - React Native components
|
||||||
- `@manacore/shared-landing-ui` - Astro landing page components
|
- `@mana/shared-landing-ui` - Astro landing page components
|
||||||
- `@manacore/shared-theme` - Theme configuration
|
- `@mana/shared-theme` - Theme configuration
|
||||||
- `@manacore/shared-tailwind` - Tailwind presets
|
- `@mana/shared-tailwind` - Tailwind presets
|
||||||
|
|
||||||
### Data & Utilities
|
### Data & Utilities
|
||||||
- `@manacore/shared-types` - Common TypeScript types
|
- `@mana/shared-types` - Common TypeScript types
|
||||||
- `@manacore/shared-utils` - Utility functions
|
- `@mana/shared-utils` - Utility functions
|
||||||
- `@manacore/shared-storage` - S3 storage utilities
|
- `@mana/shared-storage` - S3 storage utilities
|
||||||
- `@manacore/shared-i18n` - Internationalization
|
- `@mana/shared-i18n` - Internationalization
|
||||||
|
|
||||||
## Workspace Configuration
|
## Workspace Configuration
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ Turborepo handles task orchestration with:
|
||||||
| Type | Pattern | Example |
|
| Type | Pattern | Example |
|
||||||
|------|---------|---------|
|
|------|---------|---------|
|
||||||
| App package | `@{project}/{app}` | `@chat/server` |
|
| App package | `@{project}/{app}` | `@chat/server` |
|
||||||
| Shared package | `@manacore/shared-{name}` | `@manacore/shared-auth` |
|
| Shared package | `@mana/shared-{name}` | `@mana/shared-auth` |
|
||||||
| Service | `@mana-{name}/service` | `@mana-search/service` |
|
| Service | `@mana-{name}/service` | `@mana-search/service` |
|
||||||
|
|
||||||
## Adding a New Project
|
## Adding a New Project
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Quick Start
|
title: Quick Start
|
||||||
description: Get up and running with Manacore in minutes.
|
description: Get up and running with Mana in minutes.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Steps, Tabs, TabItem, Code } from '@astrojs/starlight/components';
|
import { Steps, Tabs, TabItem, Code } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Quick Start
|
# Quick Start
|
||||||
|
|
||||||
Get the Manacore monorepo running locally in just a few steps.
|
Get the Mana monorepo running locally in just a few steps.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
|
|
@ -24,8 +24,8 @@ Before you begin, ensure you have:
|
||||||
1. **Clone the repository**
|
1. **Clone the repository**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/manacore/manacore-monorepo.git
|
git clone https://github.com/mana/mana-monorepo.git
|
||||||
cd manacore-monorepo
|
cd mana-monorepo
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Install dependencies**
|
2. **Install dependencies**
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Code Style
|
title: Code Style
|
||||||
description: Coding standards and formatting conventions for Manacore.
|
description: Coding standards and formatting conventions for Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
@ -188,7 +188,7 @@ import { Injectable } from '@nestjs/common';
|
||||||
import { eq } from 'drizzle-orm';
|
import { eq } from 'drizzle-orm';
|
||||||
|
|
||||||
// 3. Monorepo packages
|
// 3. Monorepo packages
|
||||||
import { JwtAuthGuard } from '@manacore/shared-nestjs-auth';
|
import { JwtAuthGuard } from '@mana/shared-nestjs-auth';
|
||||||
|
|
||||||
// 4. Relative imports - parent directories
|
// 4. Relative imports - parent directories
|
||||||
import { AppModule } from '../app.module';
|
import { AppModule } from '../app.module';
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Database Patterns
|
title: Database Patterns
|
||||||
description: Drizzle ORM patterns and database best practices in Manacore.
|
description: Drizzle ORM patterns and database best practices in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Database Patterns
|
# Database Patterns
|
||||||
|
|
||||||
Manacore uses **Drizzle ORM** with PostgreSQL for type-safe database access.
|
Mana uses **Drizzle ORM** with PostgreSQL for type-safe database access.
|
||||||
|
|
||||||
## Schema Design
|
## Schema Design
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Design & UX
|
title: Design & UX
|
||||||
description: UI patterns, animations, and accessibility guidelines for Manacore.
|
description: UI patterns, animations, and accessibility guidelines for Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Design & UX
|
# Design & UX
|
||||||
|
|
||||||
Consistent design patterns across all Manacore applications for a unified user experience.
|
Consistent design patterns across all Mana applications for a unified user experience.
|
||||||
|
|
||||||
## Design Principles
|
## Design Principles
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Error Handling
|
title: Error Handling
|
||||||
description: Go-style Result types and error handling patterns in Manacore.
|
description: Go-style Result types and error handling patterns in Mana.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Error Handling
|
# Error Handling
|
||||||
|
|
||||||
Manacore uses **Go-style Result types** for explicit error handling, avoiding unexpected exceptions.
|
Mana uses **Go-style Result types** for explicit error handling, avoiding unexpected exceptions.
|
||||||
|
|
||||||
## Result Type Pattern
|
## Result Type Pattern
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Manacore Documentation
|
title: Mana Documentation
|
||||||
description: Documentation for the Manacore ecosystem - a multi-app platform with shared infrastructure.
|
description: Documentation for the Mana ecosystem - a multi-app platform with shared infrastructure.
|
||||||
template: splash
|
template: splash
|
||||||
hero:
|
hero:
|
||||||
tagline: Build modern applications with shared infrastructure
|
tagline: Build modern applications with shared infrastructure
|
||||||
|
|
@ -12,7 +12,7 @@ hero:
|
||||||
icon: right-arrow
|
icon: right-arrow
|
||||||
variant: primary
|
variant: primary
|
||||||
- text: View on GitHub
|
- text: View on GitHub
|
||||||
link: https://github.com/manacore/manacore-monorepo
|
link: https://github.com/mana/mana-monorepo
|
||||||
icon: external
|
icon: external
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -21,8 +21,8 @@ import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/manacore/manacore-monorepo.git
|
git clone https://github.com/mana/mana-monorepo.git
|
||||||
cd manacore-monorepo
|
cd mana-monorepo
|
||||||
pnpm install
|
pnpm install
|
||||||
pnpm docker:up
|
pnpm docker:up
|
||||||
pnpm dev:chat:full
|
pnpm dev:chat:full
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ OLLAMA_URL=http://localhost:11434
|
||||||
OLLAMA_TIMEOUT=120000
|
OLLAMA_TIMEOUT=120000
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/chat
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
MANA_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: Projects
|
title: Projects
|
||||||
description: Overview of all projects in the Manacore ecosystem.
|
description: Overview of all projects in the Mana ecosystem.
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Card, CardGrid, Badge } from '@astrojs/starlight/components';
|
import { Card, CardGrid, Badge } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
# Projects
|
# Projects
|
||||||
|
|
||||||
Manacore contains multiple interconnected applications, each serving a specific purpose.
|
Mana contains multiple interconnected applications, each serving a specific purpose.
|
||||||
|
|
||||||
## Active Projects
|
## Active Projects
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* Manacore Docs - Custom Starlight Styles */
|
/* Mana Docs - Custom Starlight Styles */
|
||||||
|
|
||||||
/* Override Starlight CSS variables */
|
/* Override Starlight CSS variables */
|
||||||
:root {
|
:root {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ export default {
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
colors: {
|
colors: {
|
||||||
// Manacore brand colors
|
// Mana brand colors
|
||||||
accent: {
|
accent: {
|
||||||
50: '#f0f9ff',
|
50: '#f0f9ff',
|
||||||
100: '#e0f2fe',
|
100: '#e0f2fe',
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Cloudflare Pages configuration for Manacore Docs
|
# Cloudflare Pages configuration for Mana Docs
|
||||||
# Deployed via GitHub Actions (Direct Upload)
|
# Deployed via GitHub Actions (Direct Upload)
|
||||||
|
|
||||||
name = "mana-docs"
|
name = "mana-docs"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ Inventar is a schema-less inventory management system built with SvelteKit. User
|
||||||
|-------|------------|
|
|-------|------------|
|
||||||
| Frontend | SvelteKit 2, Svelte 5 (runes), Tailwind CSS 4 |
|
| Frontend | SvelteKit 2, Svelte 5 (runes), Tailwind CSS 4 |
|
||||||
| State | Svelte 5 runes ($state, $derived) with localStorage persistence |
|
| State | Svelte 5 runes ($state, $derived) with localStorage persistence |
|
||||||
| Icons | @manacore/shared-icons (Phosphor) |
|
| Icons | @mana/shared-icons (Phosphor) |
|
||||||
| PWA | @vite-pwa/sveltekit + Workbox |
|
| PWA | @vite-pwa/sveltekit + Workbox |
|
||||||
| i18n | svelte-i18n (de, en) |
|
| i18n | svelte-i18n (de, en) |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ Both apps require Supabase credentials. Copy the `.env.example` files and config
|
||||||
```
|
```
|
||||||
PUBLIC_SUPABASE_URL=your_supabase_url
|
PUBLIC_SUPABASE_URL=your_supabase_url
|
||||||
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||||
MIDDLEWARE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MIDDLEWARE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mobile App** (`apps/mobile/.env`):
|
**Mobile App** (`apps/mobile/.env`):
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ Both apps require Supabase configuration. Create `.env` files based on `.env.exa
|
||||||
```env
|
```env
|
||||||
PUBLIC_SUPABASE_URL=your_supabase_project_url
|
PUBLIC_SUPABASE_URL=your_supabase_project_url
|
||||||
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
||||||
MIDDLEWARE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
MIDDLEWARE_URL=https://mana-middleware-111768794939.europe-west3.run.app
|
||||||
PUBLIC_APP_NAME=Mana Web
|
PUBLIC_APP_NAME=Mana Web
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ _Fokus auf das vernetzte Ökosystem und die Vision eines nachhaltigen Software-M
|
||||||
### 1. Hero Section
|
### 1. Hero Section
|
||||||
|
|
||||||
**Headline:** "Ein Ökosystem. Unendliche Möglichkeiten."
|
**Headline:** "Ein Ökosystem. Unendliche Möglichkeiten."
|
||||||
**Subheadline:** "Manacore vernetzt deine KI-Tools zu einem nachhaltigen digitalen Ökosystem. Zahle nur was du nutzt, sammle Credits für später."
|
**Subheadline:** "Mana vernetzt deine KI-Tools zu einem nachhaltigen digitalen Ökosystem. Zahle nur was du nutzt, sammle Credits für später."
|
||||||
|
|
||||||
**CTA Buttons:**
|
**CTA Buttons:**
|
||||||
|
|
||||||
|
|
@ -57,7 +57,7 @@ _Fokus auf das vernetzte Ökosystem und die Vision eines nachhaltigen Software-M
|
||||||
- Dropdown: "Nutzungsintensität"
|
- Dropdown: "Nutzungsintensität"
|
||||||
- Live-Berechnung zeigt:
|
- Live-Berechnung zeigt:
|
||||||
- Klassische Lizenzen: X€/Monat
|
- Klassische Lizenzen: X€/Monat
|
||||||
- Mit Manacore: Y€/Monat
|
- Mit Mana: Y€/Monat
|
||||||
- Deine Ersparnis: Z%
|
- Deine Ersparnis: Z%
|
||||||
|
|
||||||
**Testimonial-Box:**
|
**Testimonial-Box:**
|
||||||
|
|
@ -131,7 +131,7 @@ _Fokus auf Innovation, Nachhaltigkeit und europäische Unabhängigkeit_
|
||||||
### 1. Hero Section
|
### 1. Hero Section
|
||||||
|
|
||||||
**Headline:** "Die Zukunft der Software ist nachhaltig"
|
**Headline:** "Die Zukunft der Software ist nachhaltig"
|
||||||
**Subheadline:** "Manacore baut das erste regenerative KI-Ökosystem Europas. Sei dabei, wenn Software demokratisch wird."
|
**Subheadline:** "Mana baut das erste regenerative KI-Ökosystem Europas. Sei dabei, wenn Software demokratisch wird."
|
||||||
|
|
||||||
**Vision-Statements:**
|
**Vision-Statements:**
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
|
Before Width: | Height: | Size: 364 KiB After Width: | Height: | Size: 364 KiB |
|
Before Width: | Height: | Size: 435 KiB After Width: | Height: | Size: 435 KiB |
|
Before Width: | Height: | Size: 417 KiB After Width: | Height: | Size: 417 KiB |
|
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 352 KiB |
|
Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 387 KiB |
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 370 KiB |
|
Before Width: | Height: | Size: 433 KiB After Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 342 KiB After Width: | Height: | Size: 342 KiB |
|
Before Width: | Height: | Size: 465 KiB After Width: | Height: | Size: 465 KiB |
|
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 311 KiB |
|
|
@ -121,7 +121,7 @@ const debugInfo = debug ? {
|
||||||
) : (
|
) : (
|
||||||
<Image
|
<Image
|
||||||
placeholder="dashboard"
|
placeholder="dashboard"
|
||||||
alt="Manacore Dashboard"
|
alt="Mana Dashboard"
|
||||||
width={600}
|
width={600}
|
||||||
height={400}
|
height={400}
|
||||||
rounded
|
rounded
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ function statusColor(status: string) {
|
||||||
|
|
||||||
<!-- Bottom bar -->
|
<!-- Bottom bar -->
|
||||||
<div class="footer-bottom">
|
<div class="footer-bottom">
|
||||||
<span class="footer-copyright">© {currentYear} Manacore Verein</span>
|
<span class="footer-copyright">© {currentYear} Mana Verein</span>
|
||||||
<span class="footer-domain">mana.how</span>
|
<span class="footer-domain">mana.how</span>
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ const { navLinks } = Astro.props;
|
||||||
<div
|
<div
|
||||||
class="flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900"
|
class="flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900"
|
||||||
>
|
>
|
||||||
<span class="text-xl font-bold text-mana-blue"> Manacore </span>
|
<span class="text-xl font-bold text-mana-blue"> Mana</span>
|
||||||
<button
|
<button
|
||||||
id="mobile-menu-close"
|
id="mobile-menu-close"
|
||||||
class="p-2 rounded-lg text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
|
class="p-2 rounded-lg text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ const classes = `${baseStyles} ${bgStyles} ${positionStyles}`;
|
||||||
<!-- Logo -->
|
<!-- Logo -->
|
||||||
<a href={getLocalizedRoute('/', lang)} class="flex items-center gap-2">
|
<a href={getLocalizedRoute('/', lang)} class="flex items-center gap-2">
|
||||||
<img src="/icons/mana-icon.svg" alt="Mana Logo" class="w-8 h-8" />
|
<img src="/icons/mana-icon.svg" alt="Mana Logo" class="w-8 h-8" />
|
||||||
<span class="text-2xl font-bold text-mana-blue"> Manacore </span>
|
<span class="text-2xl font-bold text-mana-blue"> Mana</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Desktop Navigation -->
|
<!-- Desktop Navigation -->
|
||||||
|
|
|
||||||
|
|
@ -75,9 +75,9 @@ const { class: className } = Astro.props;
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Manacore -->
|
<!-- Mana -->
|
||||||
<div>
|
<div>
|
||||||
<Text size="sm" class="text-gray-600 dark:text-gray-400 mb-1"> Mit Manacore </Text>
|
<Text size="sm" class="text-gray-600 dark:text-gray-400 mb-1"> Mit Mana</Text>
|
||||||
<div class="flex items-baseline gap-2">
|
<div class="flex items-baseline gap-2">
|
||||||
<span id="manaCost" class="text-3xl font-bold text-mana-blue">30€</span>
|
<span id="manaCost" class="text-3xl font-bold text-mana-blue">30€</span>
|
||||||
<span class="text-sm text-gray-500">/Monat</span>
|
<span class="text-sm text-gray-500">/Monat</span>
|
||||||
|
|
@ -155,7 +155,7 @@ const { class: className } = Astro.props;
|
||||||
// Classic license cost
|
// Classic license cost
|
||||||
const classicCost = teamSize * classicPricePerUser;
|
const classicCost = teamSize * classicPricePerUser;
|
||||||
|
|
||||||
// Manacore cost calculation
|
// Mana cost calculation
|
||||||
const plan = manaPlans[intensity];
|
const plan = manaPlans[intensity];
|
||||||
const plansNeeded = Math.ceil(teamSize / plan.users);
|
const plansNeeded = Math.ceil(teamSize / plan.users);
|
||||||
const manaCost = plansNeeded * plan.price;
|
const manaCost = plansNeeded * plan.price;
|
||||||
|
|
|
||||||
|
|
@ -73,11 +73,11 @@ Dieses Dokument analysiert den aktuellen Zustand der Mana-Infrastruktur auf dem
|
||||||
|
|
||||||
#### Tier 0: Infrastruktur (3 Services)
|
#### Tier 0: Infrastruktur (3 Services)
|
||||||
|
|
||||||
| Service | Container | Port(s) | Volume | Bemerkung |
|
| Service | Container | Port(s) | Volume | Bemerkung |
|
||||||
| ------------- | ----------------- | ---------- | ----------------- | ----------------------------- |
|
| ------------- | ------------- | ---------- | ------------- | ----------------------------- |
|
||||||
| PostgreSQL 16 | manacore-postgres | 5432 | manacore-postgres | Alle DBs in einer Instanz |
|
| PostgreSQL 16 | mana-postgres | 5432 | mana-postgres | Alle DBs in einer Instanz |
|
||||||
| Redis 7 | manacore-redis | 6379 | manacore-redis | Session-Cache + Pub/Sub |
|
| Redis 7 | mana-redis | 6379 | mana-redis | Session-Cache + Pub/Sub |
|
||||||
| MinIO | manacore-minio | 9000, 9001 | manacore-minio | S3-kompatibler Object Storage |
|
| MinIO | mana-minio | 9000, 9001 | mana-minio | S3-kompatibler Object Storage |
|
||||||
|
|
||||||
#### Tier 1: Core Auth (1 Service)
|
#### Tier 1: Core Auth (1 Service)
|
||||||
|
|
||||||
|
|
@ -109,53 +109,53 @@ Dieses Dokument analysiert den aktuellen Zustand der Mana-Infrastruktur auf dem
|
||||||
|
|
||||||
#### Tier 4: Web-Frontends (11 Services)
|
#### Tier 4: Web-Frontends (11 Services)
|
||||||
|
|
||||||
| App | Container | Port | Backend-Port |
|
| App | Container | Port | Backend-Port |
|
||||||
| ------------------ | -------------- | ---- | ------------ |
|
| -------------- | -------------- | ---- | ------------ |
|
||||||
| Mana Dashboard | manacore-web | 5173 | - |
|
| Mana Dashboard | mana-web | 5173 | - |
|
||||||
| Chat | chat-web | 3000 | 3002 |
|
| Chat | chat-web | 3000 | 3002 |
|
||||||
| Presi | presi-web | 5178 | 3008 |
|
| Presi | presi-web | 5178 | 3008 |
|
||||||
| Matrix | matrix-web | 5180 | 8008 |
|
| Matrix | matrix-web | 5180 | 8008 |
|
||||||
| Contacts | contacts-web | 5184 | 3015 |
|
| Contacts | contacts-web | 5184 | 3015 |
|
||||||
| Storage | storage-web | 5185 | 3019 |
|
| Storage | storage-web | 5185 | 3019 |
|
||||||
| Calendar | calendar-web | 5186 | 3016 |
|
| Calendar | calendar-web | 5186 | 3016 |
|
||||||
| Clock | clock-web | 5187 | 3017 |
|
| Clock | clock-web | 5187 | 3017 |
|
||||||
| Todo | todo-web | 5188 | 3018 |
|
| Todo | todo-web | 5188 | 3018 |
|
||||||
| NutriPhi | nutriphi-web | 5189 | 3023 |
|
| NutriPhi | nutriphi-web | 5189 | 3023 |
|
||||||
| LLM Playground | llm-playground | 5190 | - |
|
| LLM Playground | llm-playground | 5190 | - |
|
||||||
| SkillTree | skilltree-web | 5195 | 3024 |
|
| SkillTree | skilltree-web | 5195 | 3024 |
|
||||||
|
|
||||||
#### Tier 5: Matrix Stack (14 Services)
|
#### Tier 5: Matrix Stack (14 Services)
|
||||||
|
|
||||||
| Service | Container | Port | Funktion |
|
| Service | Container | Port | Funktion |
|
||||||
| --------------- | ------------------------------- | ---------- | ----------------------- |
|
| --------------- | --------------------------- | ---------- | ----------------------- |
|
||||||
| Synapse | manacore-synapse | 8008, 9002 | Homeserver |
|
| Synapse | mana-synapse | 8008, 9002 | Homeserver |
|
||||||
| Element Web | manacore-element | 8087 | Standard Client |
|
| Element Web | mana-element | 8087 | Standard Client |
|
||||||
| Matrix Web | manacore-matrix-web | 5180 | Custom SvelteKit Client |
|
| Matrix Web | mana-matrix-web | 5180 | Custom SvelteKit Client |
|
||||||
| Mana Bot | manacore-matrix-mana-bot | 3310 | Unified Gateway Bot |
|
| Mana Bot | mana-matrix-mana-bot | 3310 | Unified Gateway Bot |
|
||||||
| Ollama Bot | manacore-matrix-ollama-bot | 3311 | AI Chat |
|
| Ollama Bot | mana-matrix-ollama-bot | 3311 | AI Chat |
|
||||||
| Stats Bot | manacore-matrix-stats-bot | 3312 | Analytics |
|
| Stats Bot | mana-matrix-stats-bot | 3312 | Analytics |
|
||||||
| Project Doc Bot | manacore-matrix-project-doc-bot | 3313 | Dokumentation |
|
| Project Doc Bot | mana-matrix-project-doc-bot | 3313 | Dokumentation |
|
||||||
| Todo Bot | manacore-matrix-todo-bot | 3314 | Task Management |
|
| Todo Bot | mana-matrix-todo-bot | 3314 | Task Management |
|
||||||
| Calendar Bot | manacore-matrix-calendar-bot | 3315 | Termine |
|
| Calendar Bot | mana-matrix-calendar-bot | 3315 | Termine |
|
||||||
| NutriPhi Bot | manacore-matrix-nutriphi-bot | 3316 | Nutrition |
|
| NutriPhi Bot | mana-matrix-nutriphi-bot | 3316 | Nutrition |
|
||||||
| Zitare Bot | manacore-matrix-zitare-bot | 3317 | Quotes |
|
| Zitare Bot | mana-matrix-zitare-bot | 3317 | Quotes |
|
||||||
| Clock Bot | manacore-matrix-clock-bot | 3318 | Time Tracking |
|
| Clock Bot | mana-matrix-clock-bot | 3318 | Time Tracking |
|
||||||
| TTS Bot | manacore-matrix-tts-bot | 3033 | Text-to-Speech |
|
| TTS Bot | mana-matrix-tts-bot | 3033 | Text-to-Speech |
|
||||||
|
|
||||||
#### Tier 6: Monitoring & Tools (8 Services)
|
#### Tier 6: Monitoring & Tools (8 Services)
|
||||||
|
|
||||||
| Service | Container | Port | Funktion |
|
| Service | Container | Port | Funktion |
|
||||||
| ------------------ | --------------------------- | ---- | ------------------- |
|
| ------------------ | ----------------------- | ---- | ------------------- |
|
||||||
| VictoriaMetrics | manacore-victoriametrics | 8428 | Metriken-DB |
|
| VictoriaMetrics | mana-victoriametrics | 8428 | Metriken-DB |
|
||||||
| Grafana | manacore-grafana | 3100 | Dashboards |
|
| Grafana | mana-grafana | 3100 | Dashboards |
|
||||||
| Pushgateway | manacore-pushgateway | 9091 | Batch-Metriken |
|
| Pushgateway | mana-pushgateway | 9091 | Batch-Metriken |
|
||||||
| Node Exporter | manacore-node-exporter | 9100 | Host-Metriken |
|
| Node Exporter | mana-node-exporter | 9100 | Host-Metriken |
|
||||||
| cAdvisor | manacore-cadvisor | 8080 | Container-Metriken |
|
| cAdvisor | mana-cadvisor | 8080 | Container-Metriken |
|
||||||
| Postgres Exporter | manacore-postgres-exporter | 9187 | DB-Metriken |
|
| Postgres Exporter | mana-postgres-exporter | 9187 | DB-Metriken |
|
||||||
| Redis Exporter | manacore-redis-exporter | 9121 | Cache-Metriken |
|
| Redis Exporter | mana-redis-exporter | 9121 | Cache-Metriken |
|
||||||
| Umami | manacore-umami | 3200 | Web Analytics |
|
| Umami | mana-umami | 3200 | Web Analytics |
|
||||||
| n8n | manacore-n8n | 5678 | Workflow Automation |
|
| n8n | mana-n8n | 5678 | Workflow Automation |
|
||||||
| Telegram Stats Bot | manacore-telegram-stats-bot | 3300 | Telegram Reports |
|
| Telegram Stats Bot | mana-telegram-stats-bot | 3300 | Telegram Reports |
|
||||||
|
|
||||||
#### Native macOS Services (3 Services)
|
#### Native macOS Services (3 Services)
|
||||||
|
|
||||||
|
|
@ -168,9 +168,9 @@ Dieses Dokument analysiert den aktuellen Zustand der Mana-Infrastruktur auf dem
|
||||||
|
|
||||||
#### Auto-Update (1 Service)
|
#### Auto-Update (1 Service)
|
||||||
|
|
||||||
| Service | Container | Funktion |
|
| Service | Container | Funktion |
|
||||||
| ---------- | ------------------- | ----------------------------- |
|
| ---------- | --------------- | ----------------------------- |
|
||||||
| Watchtower | manacore-watchtower | Auto-Update + Telegram Notify |
|
| Watchtower | mana-watchtower | Auto-Update + Telegram Notify |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -231,14 +231,14 @@ AKTUELL (Chaotisch):
|
||||||
|
|
||||||
```
|
```
|
||||||
AKTUELL:
|
AKTUELL:
|
||||||
manacore-postgres ✓ Konsistent
|
mana-postgres ✓ Konsistent
|
||||||
manacore-redis ✓ Konsistent
|
mana-redis ✓ Konsistent
|
||||||
mana-core-auth ✗ Bindestrich-Variante
|
mana-core-auth ✗ Bindestrich-Variante
|
||||||
mana-api-gateway ✗ Bindestrich-Variante
|
mana-api-gateway ✗ Bindestrich-Variante
|
||||||
chat-backend ✗ Kein Präfix
|
chat-backend ✗ Kein Präfix
|
||||||
chat-web ✗ Kein Präfix
|
chat-web ✗ Kein Präfix
|
||||||
manacore-matrix-mana-bot ✓ Konsistent
|
mana-matrix-mana-bot ✓ Konsistent
|
||||||
manacore-synapse ✓ Konsistent
|
mana-synapse ✓ Konsistent
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Nicht-optimale Dependencies
|
### 3. Nicht-optimale Dependencies
|
||||||
|
|
@ -322,7 +322,7 @@ NEU (Strukturiert):
|
||||||
│ └── 4090: matrix-web (Custom Client) │
|
│ └── 4090: matrix-web (Custom Client) │
|
||||||
│ │
|
│ │
|
||||||
│ 5000-5099: Web Frontends │
|
│ 5000-5099: Web Frontends │
|
||||||
│ ├── 5000: manacore-web (Dashboard) │
|
│ ├── 5000: mana-web (Dashboard) │
|
||||||
│ ├── 5010: chat-web │
|
│ ├── 5010: chat-web │
|
||||||
│ ├── 5011: todo-web │
|
│ ├── 5011: todo-web │
|
||||||
│ ├── 5012: calendar-web │
|
│ ├── 5012: calendar-web │
|
||||||
|
|
@ -364,31 +364,31 @@ NEU (Strukturiert):
|
||||||
**Container-Namen:**
|
**Container-Namen:**
|
||||||
|
|
||||||
```
|
```
|
||||||
manacore-{category}-{service}
|
mana-{category}-{service}
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
- manacore-infra-postgres
|
- mana-infra-postgres
|
||||||
- manacore-infra-redis
|
- mana-infra-redis
|
||||||
- manacore-core-auth
|
- mana-core-auth
|
||||||
- manacore-api-gateway
|
- mana-api-gateway
|
||||||
- manacore-app-chat-backend
|
- mana-app-chat-backend
|
||||||
- manacore-app-chat-web
|
- mana-app-chat-web
|
||||||
- manacore-matrix-synapse
|
- mana-matrix-synapse
|
||||||
- manacore-matrix-bot-mana
|
- mana-matrix-bot-mana
|
||||||
- manacore-mon-grafana
|
- mana-mon-grafana
|
||||||
- manacore-mon-victoria
|
- mana-mon-victoria
|
||||||
```
|
```
|
||||||
|
|
||||||
**Volume-Namen:**
|
**Volume-Namen:**
|
||||||
|
|
||||||
```
|
```
|
||||||
manacore-{service}-data
|
mana-{service}-data
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
- manacore-postgres-data
|
- mana-postgres-data
|
||||||
- manacore-redis-data
|
- mana-redis-data
|
||||||
- manacore-matrix-bots-data (konsolidiert!)
|
- mana-matrix-bots-data (konsolidiert!)
|
||||||
- manacore-grafana-data
|
- mana-grafana-data
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Service-Konsolidierung
|
### 3. Service-Konsolidierung
|
||||||
|
|
@ -501,12 +501,12 @@ Mit dem neuen Schema ist die Migration zu Kubernetes wesentlich einfacher:
|
||||||
```yaml
|
```yaml
|
||||||
# Kubernetes Namespace-Struktur
|
# Kubernetes Namespace-Struktur
|
||||||
namespaces:
|
namespaces:
|
||||||
- manacore-infra # postgres, redis, minio
|
- mana-infra # postgres, redis, minio
|
||||||
- manacore-core # auth, gateway, search
|
- mana-core # auth, gateway, search
|
||||||
- manacore-apps # chat, todo, calendar, etc.
|
- mana-apps # chat, todo, calendar, etc.
|
||||||
- manacore-matrix # synapse, bots, element
|
- mana-matrix # synapse, bots, element
|
||||||
- manacore-monitoring # grafana, victoria, exporters
|
- mana-monitoring # grafana, victoria, exporters
|
||||||
- manacore-tools # n8n, telegram-bots
|
- mana-tools # n8n, telegram-bots
|
||||||
```
|
```
|
||||||
|
|
||||||
### Kubernetes Service-Typen
|
### Kubernetes Service-Typen
|
||||||
|
|
|
||||||
|
|
@ -484,7 +484,7 @@ Nach Analyse aller Optionen ist die Empfehlung:
|
||||||
```bash
|
```bash
|
||||||
# Auf dem Server
|
# Auf dem Server
|
||||||
ssh mana-server
|
ssh mana-server
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
git pull
|
git pull
|
||||||
./scripts/mac-mini/deploy.sh
|
./scripts/mac-mini/deploy.sh
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: 'Der Manacore Short'
|
title: 'Der Mana Short'
|
||||||
description: 'Ein Pay-as-you-use Modell für KI-gestützte Transkription und Analyse in Memoro'
|
description: 'Ein Pay-as-you-use Modell für KI-gestützte Transkription und Analyse in Memoro'
|
||||||
order: 1
|
order: 1
|
||||||
icon: 'mdi:information'
|
icon: 'mdi:information'
|
||||||
|
|
@ -7,11 +7,11 @@ publishedAt: 2024-01-01
|
||||||
updatedAt: 2024-01-15
|
updatedAt: 2024-01-15
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manacore: Ein nachhaltiges KI-Ökosystem für Europa
|
# Mana: Ein nachhaltiges KI-Ökosystem für Europa
|
||||||
|
|
||||||
## Vision und Mission
|
## Vision und Mission
|
||||||
|
|
||||||
Manacore steht für ein langfristig nachhaltiges Software-Ökosystem mit KI im Kern. Unser Ziel ist es, durch gutes Design und optimale Vernetzung jedem zu ermöglichen, Wissen, Erfahrungen und Ideen besser festzuhalten, zu sammeln, darzustellen und zu teilen.
|
Mana steht für ein langfristig nachhaltiges Software-Ökosystem mit KI im Kern. Unser Ziel ist es, durch gutes Design und optimale Vernetzung jedem zu ermöglichen, Wissen, Erfahrungen und Ideen besser festzuhalten, zu sammeln, darzustellen und zu teilen.
|
||||||
|
|
||||||
### Das Ökosystem
|
### Das Ökosystem
|
||||||
|
|
||||||
|
|
@ -81,13 +81,13 @@ Das Mana-System kombiniert die Vorteile von Abonnements mit der Fairness verbrau
|
||||||
|
|
||||||
**Unternehmen mit 50 Mitarbeitern:**
|
**Unternehmen mit 50 Mitarbeitern:**
|
||||||
|
|
||||||
- **Manacore**: 1x Mana Quelle XXL = 99,99€/Monat
|
- **Mana**: 1x Mana Quelle XXL = 99,99€/Monat
|
||||||
- **Klassische Lizenzen**: 50 × 19,99€ = 999,50€/Monat
|
- **Klassische Lizenzen**: 50 × 19,99€ = 999,50€/Monat
|
||||||
- **Ersparnis**: 90%
|
- **Ersparnis**: 90%
|
||||||
|
|
||||||
**Universitäres Forschungsprojekt (15 Forscher, 1 Jahr):**
|
**Universitäres Forschungsprojekt (15 Forscher, 1 Jahr):**
|
||||||
|
|
||||||
- **Manacore**: 1x Mana Quelle L Jahresabo = 191,90€
|
- **Mana**: 1x Mana Quelle L Jahresabo = 191,90€
|
||||||
- **Klassische Lizenzen**: 15 × 9,99€ × 12 Monate = 1.798,20€
|
- **Klassische Lizenzen**: 15 × 9,99€ × 12 Monate = 1.798,20€
|
||||||
- **Ersparnis**: 89%
|
- **Ersparnis**: 89%
|
||||||
|
|
||||||
|
|
@ -122,7 +122,7 @@ Das Mana-System kombiniert die Vorteile von Abonnements mit der Fairness verbrau
|
||||||
|
|
||||||
## Partizipation und Community
|
## Partizipation und Community
|
||||||
|
|
||||||
Jeder kann am Manacore-Ökosystem teilhaben:
|
Jeder kann am Mana-Ökosystem teilhaben:
|
||||||
|
|
||||||
- **Als Nutzer** der verschiedenen Tools und Apps
|
- **Als Nutzer** der verschiedenen Tools und Apps
|
||||||
- **Durch Analytics-Opt-in** für besseres Feedback und Optimierung
|
- **Durch Analytics-Opt-in** für besseres Feedback und Optimierung
|
||||||
|
|
@ -146,4 +146,4 @@ Jeder kann am Manacore-Ökosystem teilhaben:
|
||||||
|
|
||||||
## Das Ziel
|
## Das Ziel
|
||||||
|
|
||||||
Manacore macht die digitale Welt und KI-Möglichkeiten für jeden zugänglich. Wir entwickeln Software zu etwas Fließendem und schaffen eine Plattform, auf der Innovation schnell und nachhaltig gedeihen kann – mit einem Geschäftsmodell, bei dem Software allen gehört, die daran mitwirken und es mitgestalten.
|
Mana macht die digitale Welt und KI-Möglichkeiten für jeden zugänglich. Wir entwickeln Software zu etwas Fließendem und schaffen eine Plattform, auf der Innovation schnell und nachhaltig gedeihen kann -- mit einem Geschäftsmodell, bei dem Software allen gehört, die daran mitwirken und es mitgestalten.
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ Mana steht für ein langfristig nachhaltiges Software-Ökosystem mit KI im Kern.
|
||||||
|
|
||||||
### Das Mana-Ökosystem
|
### Das Mana-Ökosystem
|
||||||
|
|
||||||
Im Manacore-Netzwerk arbeiten verschiedene Applikationen zusammen:
|
Im Mana-Netzwerk arbeiten verschiedene Applikationen zusammen:
|
||||||
|
|
||||||
- Jede App unterstützt Menschen bei spezifischen Aufgaben
|
- Jede App unterstützt Menschen bei spezifischen Aufgaben
|
||||||
- Verbunden entfalten sie eine ganz neue Kraft
|
- Verbunden entfalten sie eine ganz neue Kraft
|
||||||
|
|
@ -63,7 +63,7 @@ Die Entwicklung von Mana fokussiert sich auf Europa:
|
||||||
- Aufbau eines neuen Software-Ökosystems für Europa
|
- Aufbau eines neuen Software-Ökosystems für Europa
|
||||||
- Reduzierung der Abhängigkeit von US-amerikanischen Technologien
|
- Reduzierung der Abhängigkeit von US-amerikanischen Technologien
|
||||||
- Langfristiges Ziel: Komplette technologische Unabhängigkeit
|
- Langfristiges Ziel: Komplette technologische Unabhängigkeit
|
||||||
- Open-Source-Pläne für den Manacore bei strategischer Sinnhaftigkeit
|
- Open-Source-Pläne bei strategischer Sinnhaftigkeit
|
||||||
|
|
||||||
### Einheitliche Vorteile für Nutzer
|
### Einheitliche Vorteile für Nutzer
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ stats:
|
||||||
|
|
||||||
## Zusammenfassung
|
## Zusammenfassung
|
||||||
|
|
||||||
Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem letzten Audit wurde das Backend von NestJS auf **Hono/Bun** migriert — CRUD läuft client-seitig über `@manacore/local-store` + `mana-sync`. Der Server fokussiert sich auf RRULE-Expansion, Google Calendar Sync und ICS-Import. Neue Features: Multi-Event Splitting, Elevation System, Cmd+K Spotlight.
|
Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem letzten Audit wurde das Backend von NestJS auf **Hono/Bun** migriert — CRUD läuft client-seitig über `@mana/local-store` + `mana-sync`. Der Server fokussiert sich auf RRULE-Expansion, Google Calendar Sync und ICS-Import. Neue Features: Multi-Event Splitting, Elevation System, Cmd+K Spotlight.
|
||||||
|
|
||||||
## Backend (90/100)
|
## Backend (90/100)
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem let
|
||||||
- `/api/v1/events/expand` (POST) — RRULE Expansion mit DoS-Schutz
|
- `/api/v1/events/expand` (POST) — RRULE Expansion mit DoS-Schutz
|
||||||
- `/api/v1/sync/google` (POST) — Google Calendar OAuth
|
- `/api/v1/sync/google` (POST) — Google Calendar OAuth
|
||||||
- `/api/v1/import/ics` (POST) — ICS-Datei Parsing und Import
|
- `/api/v1/import/ics` (POST) — ICS-Datei Parsing und Import
|
||||||
- `@manacore/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
- `@mana/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
||||||
- Zod-Validation für alle Eingaben
|
- Zod-Validation für alle Eingaben
|
||||||
- GDPR-konform (Daten via mana-sync)
|
- GDPR-konform (Daten via mana-sync)
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem let
|
||||||
- Offline Page mit shared OfflinePage Component
|
- Offline Page mit shared OfflinePage Component
|
||||||
- Error Tracking via GlitchTip
|
- Error Tracking via GlitchTip
|
||||||
- 5 Sprachen (DE, EN, FR, ES, IT) — vollständig inkl. Settings, Toasts, Error Pages
|
- 5 Sprachen (DE, EN, FR, ES, IT) — vollständig inkl. Settings, Toasts, Error Pages
|
||||||
- **Local-First** via @manacore/local-store (IndexedDB + mana-sync)
|
- **Local-First** via @mana/local-store (IndexedDB + mana-sync)
|
||||||
|
|
||||||
**Lücken:**
|
**Lücken:**
|
||||||
|
|
||||||
|
|
@ -178,7 +178,7 @@ Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem let
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- JWT Auth via @manacore/shared-hono authMiddleware
|
- JWT Auth via @mana/shared-hono authMiddleware
|
||||||
- Rate Limiting Middleware
|
- Rate Limiting Middleware
|
||||||
- CORS konfiguriert
|
- CORS konfiguriert
|
||||||
- RRULE DoS-Schutz
|
- RRULE DoS-Schutz
|
||||||
|
|
@ -223,7 +223,7 @@ Die Calendar-App ist eine der **ausgereiftesten Apps im Monorepo**. Seit dem let
|
||||||
| Multi-Event | Fehlte | Splitting + Duration Estimation |
|
| Multi-Event | Fehlte | Splitting + Duration Estimation |
|
||||||
| Elevation | Fehlte | Konsistentes UI-System |
|
| Elevation | Fehlte | Konsistentes UI-System |
|
||||||
| Todo-Integration | Vorhanden | Entfernt (Separation of Concerns) |
|
| Todo-Integration | Vorhanden | Entfernt (Separation of Concerns) |
|
||||||
| Local-First | Geplant | @manacore/local-store aktiv |
|
| Local-First | Geplant | @mana/local-store aktiv |
|
||||||
| Score | 97 → | **93** (Backend-Tests verloren, Test-Reduktion) |
|
| Score | 97 → | **93** (Backend-Tests verloren, Test-Reduktion) |
|
||||||
|
|
||||||
## Top-3 Empfehlungen
|
## Top-3 Empfehlungen
|
||||||
|
|
|
||||||
|
|
@ -89,9 +89,9 @@ Contacts ist eine **vollständige Kontaktverwaltung** mit Avatar Upload, vCard I
|
||||||
|
|
||||||
- ~6 API-Endpoints (server-seitige Operationen):
|
- ~6 API-Endpoints (server-seitige Operationen):
|
||||||
- Health Check
|
- Health Check
|
||||||
- Avatar Upload (S3/MinIO via @manacore/shared-storage)
|
- Avatar Upload (S3/MinIO via @mana/shared-storage)
|
||||||
- vCard Import (Parsing + Validation)
|
- vCard Import (Parsing + Validation)
|
||||||
- `@manacore/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
- `@mana/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
||||||
- S3 Storage Integration für Contact-Fotos
|
- S3 Storage Integration für Contact-Fotos
|
||||||
- CRUD delegiert an mana-sync (Local-First)
|
- CRUD delegiert an mana-sync (Local-First)
|
||||||
|
|
||||||
|
|
@ -107,7 +107,7 @@ Contacts ist eine **vollständige Kontaktverwaltung** mit Avatar Upload, vCard I
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- 15 Routes, 39 Komponenten (27 Standard + 12 Skeleton), 14 Svelte 5 Stores
|
- 15 Routes, 39 Komponenten (27 Standard + 12 Skeleton), 14 Svelte 5 Stores
|
||||||
- **Spiral-Netzwerk-Visualisierung** (@manacore/spiral-db)
|
- **Spiral-Netzwerk-Visualisierung** (@mana/spiral-db)
|
||||||
- **Cmd+K Spotlight** für schnelle Navigation und Aktionen
|
- **Cmd+K Spotlight** für schnelle Navigation und Aktionen
|
||||||
- **NL Quick-Input** mit Client-seitiger Duplikaterkennung (Fuzzy Matching)
|
- **NL Quick-Input** mit Client-seitiger Duplikaterkennung (Fuzzy Matching)
|
||||||
- Context Menus (Alphabet-Navigation, Grid-View)
|
- Context Menus (Alphabet-Navigation, Grid-View)
|
||||||
|
|
@ -121,7 +121,7 @@ Contacts ist eine **vollständige Kontaktverwaltung** mit Avatar Upload, vCard I
|
||||||
- Offline Page mit shared OfflinePage Component
|
- Offline Page mit shared OfflinePage Component
|
||||||
- Error Tracking via GlitchTip
|
- Error Tracking via GlitchTip
|
||||||
- 5 Sprachen (DE, EN, FR, ES, IT)
|
- 5 Sprachen (DE, EN, FR, ES, IT)
|
||||||
- **Local-First** via @manacore/local-store (IndexedDB + mana-sync)
|
- **Local-First** via @mana/local-store (IndexedDB + mana-sync)
|
||||||
- SyncIndicator UI (visueller Sync-Status)
|
- SyncIndicator UI (visueller Sync-Status)
|
||||||
|
|
||||||
**Lücken:**
|
**Lücken:**
|
||||||
|
|
@ -175,7 +175,7 @@ Contacts ist eine **vollständige Kontaktverwaltung** mit Avatar Upload, vCard I
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- JWT Auth via @manacore/shared-hono authMiddleware
|
- JWT Auth via @mana/shared-hono authMiddleware
|
||||||
- Rate Limiting Middleware
|
- Rate Limiting Middleware
|
||||||
- CORS konfiguriert
|
- CORS konfiguriert
|
||||||
- Security Headers (CSP, X-Frame-Options)
|
- Security Headers (CSP, X-Frame-Options)
|
||||||
|
|
@ -216,8 +216,8 @@ Contacts ist eine **vollständige Kontaktverwaltung** mit Avatar Upload, vCard I
|
||||||
| E2E Tests | Keine | 3 Playwright Suites (auth, contacts, tags) |
|
| E2E Tests | Keine | 3 Playwright Suites (auth, contacts, tags) |
|
||||||
| PWA | Nicht konfiguriert | Aktiv (@vite-pwa/sveltekit) |
|
| PWA | Nicht konfiguriert | Aktiv (@vite-pwa/sveltekit) |
|
||||||
| Landing Page | Fehlte | Astro Landing Page |
|
| Landing Page | Fehlte | Astro Landing Page |
|
||||||
| Local-First | Nicht vorhanden | @manacore/local-store aktiv |
|
| Local-First | Nicht vorhanden | @mana/local-store aktiv |
|
||||||
| Spiral-Viz | Nicht vorhanden | @manacore/spiral-db integriert |
|
| Spiral-Viz | Nicht vorhanden | @mana/spiral-db integriert |
|
||||||
| Spotlight | Fehlte | Cmd+K Actions |
|
| Spotlight | Fehlte | Cmd+K Actions |
|
||||||
| NL Quick-Input | Fehlte | Mit Fuzzy Duplikaterkennung |
|
| NL Quick-Input | Fehlte | Mit Fuzzy Duplikaterkennung |
|
||||||
| SyncIndicator | Fehlte | Visueller Sync-Status |
|
| SyncIndicator | Fehlte | Visueller Sync-Status |
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ description: 'Multi-App Ecosystem Dashboard mit 25 Web-Routes, 11 Dashboard-Widg
|
||||||
date: 2026-03-19
|
date: 2026-03-19
|
||||||
app: 'manacore'
|
app: 'manacore'
|
||||||
author: 'Till Schneider'
|
author: 'Till Schneider'
|
||||||
tags: ['audit', 'manacore', 'production-readiness', 'platform']
|
tags: ['audit', 'mana', 'production-readiness', 'platform']
|
||||||
score: 88
|
score: 88
|
||||||
scores:
|
scores:
|
||||||
backend: 55
|
backend: 55
|
||||||
|
|
@ -158,7 +158,7 @@ Mana ist das **Herzstück des Monorepos** - das Multi-App Ecosystem Dashboard mi
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- Proper JWT Integration via @manacore/shared-auth
|
- Proper JWT Integration via @mana/shared-auth
|
||||||
- Token-Manager mit Auto-Refresh
|
- Token-Manager mit Auto-Refresh
|
||||||
- Cross-Domain SSO via shared Session Cookies (.mana.how)
|
- Cross-Domain SSO via shared Session Cookies (.mana.how)
|
||||||
- Route Guards in hooks.server.ts
|
- Route Guards in hooks.server.ts
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library,
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- JwtAuthGuard auf allen Endpoints (korrekter Import aus @manacore/shared-nestjs-auth)
|
- JwtAuthGuard auf allen Endpoints (korrekter Import aus @mana/shared-nestjs-auth)
|
||||||
- CurrentUser Decorator
|
- CurrentUser Decorator
|
||||||
- ParseUUIDPipe für Input Validation
|
- ParseUUIDPipe für Input Validation
|
||||||
- ThrottlerModule Rate Limiting (100 req/60s)
|
- ThrottlerModule Rate Limiting (100 req/60s)
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ stats:
|
||||||
|
|
||||||
## Zusammenfassung
|
## Zusammenfassung
|
||||||
|
|
||||||
Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-Board, Kanban, Spiral-View, Reminders mit Background Worker, Auto-Save, Cmd+K Spotlight und Local-First Architektur. Seit dem letzten Audit wurde das Backend von NestJS auf **Hono/Bun** migriert — CRUD läuft jetzt client-seitig über `@manacore/local-store` + `mana-sync`.
|
Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-Board, Kanban, Spiral-View, Reminders mit Background Worker, Auto-Save, Cmd+K Spotlight und Local-First Architektur. Seit dem letzten Audit wurde das Backend von NestJS auf **Hono/Bun** migriert — CRUD läuft jetzt client-seitig über `@mana/local-store` + `mana-sync`.
|
||||||
|
|
||||||
## Backend (90/100)
|
## Backend (90/100)
|
||||||
|
|
||||||
|
|
@ -90,7 +90,7 @@ Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-B
|
||||||
|
|
||||||
- 3 fokussierte Route-Module: `rrule.ts`, `reminders.ts`, `admin.ts`
|
- 3 fokussierte Route-Module: `rrule.ts`, `reminders.ts`, `admin.ts`
|
||||||
- 14 API-Endpoints (server-seitige Compute-Operationen)
|
- 14 API-Endpoints (server-seitige Compute-Operationen)
|
||||||
- `@manacore/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
- `@mana/shared-hono` Middleware (Auth, Health, Errors, Rate Limiting)
|
||||||
- RRULE Expansion mit DoS-Schutz (max 5000 Occurrences, 10-Jahres-Limit)
|
- RRULE Expansion mit DoS-Schutz (max 5000 Occurrences, 10-Jahres-Limit)
|
||||||
- Background Reminder Worker mit Push/Email-Notifications via mana-notify
|
- Background Reminder Worker mit Push/Email-Notifications via mana-notify
|
||||||
- GDPR Admin-Endpoints (GET/DELETE User Data)
|
- GDPR Admin-Endpoints (GET/DELETE User Data)
|
||||||
|
|
@ -109,7 +109,7 @@ Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-B
|
||||||
- **Paper-UI Design** — physisches Notizbuch-Feeling mit Animationen
|
- **Paper-UI Design** — physisches Notizbuch-Feeling mit Animationen
|
||||||
- **Fokus-Board** als vereinheitlichte Einzelansicht
|
- **Fokus-Board** als vereinheitlichte Einzelansicht
|
||||||
- Kanban-Board mit Subtask Drag & Drop
|
- Kanban-Board mit Subtask Drag & Drop
|
||||||
- Spiral-View Visualisierung (@manacore/spiral-db)
|
- Spiral-View Visualisierung (@mana/spiral-db)
|
||||||
- **Cmd+K Spotlight** für schnelle Navigation und Aktionen
|
- **Cmd+K Spotlight** für schnelle Navigation und Aktionen
|
||||||
- Inline Title Editing direkt in der Liste
|
- Inline Title Editing direkt in der Liste
|
||||||
- Auto-Save mit 500ms Debounce
|
- Auto-Save mit 500ms Debounce
|
||||||
|
|
@ -123,7 +123,7 @@ Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-B
|
||||||
- Offline Page mit shared OfflinePage Component
|
- Offline Page mit shared OfflinePage Component
|
||||||
- Error Tracking via GlitchTip
|
- Error Tracking via GlitchTip
|
||||||
- 5 Sprachen (DE, EN, FR, ES, IT)
|
- 5 Sprachen (DE, EN, FR, ES, IT)
|
||||||
- **Local-First** via @manacore/local-store (IndexedDB + mana-sync)
|
- **Local-First** via @mana/local-store (IndexedDB + mana-sync)
|
||||||
|
|
||||||
**Lücken:**
|
**Lücken:**
|
||||||
|
|
||||||
|
|
@ -177,7 +177,7 @@ Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-B
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- JWT Auth via @manacore/shared-hono authMiddleware
|
- JWT Auth via @mana/shared-hono authMiddleware
|
||||||
- Rate Limiting Middleware
|
- Rate Limiting Middleware
|
||||||
- CORS konfiguriert
|
- CORS konfiguriert
|
||||||
- RRULE DoS-Schutz (max 5000 Occurrences, 10-Jahres-Limit)
|
- RRULE DoS-Schutz (max 5000 Occurrences, 10-Jahres-Limit)
|
||||||
|
|
@ -218,7 +218,7 @@ Todo ist eine **feature-reiche Aufgabenverwaltung** mit Paper-UI Design, Fokus-B
|
||||||
| Reminders | Server-seitig (NestJS) | Background Worker + mana-notify |
|
| Reminders | Server-seitig (NestJS) | Background Worker + mana-notify |
|
||||||
| Completion | Standard | Animated + "Heute erledigt" |
|
| Completion | Standard | Animated + "Heute erledigt" |
|
||||||
| Kanban | Basis | Subtask Drag & Drop |
|
| Kanban | Basis | Subtask Drag & Drop |
|
||||||
| Local-First | Konzept | @manacore/local-store aktiv |
|
| Local-First | Konzept | @mana/local-store aktiv |
|
||||||
| Score | 96 → | **93** (Backend-Tests verloren) |
|
| Score | 96 → | **93** (Backend-Tests verloren) |
|
||||||
|
|
||||||
## Top-3 Empfehlungen
|
## Top-3 Empfehlungen
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ Die Architektur-Migration hat alle Apps gleichzeitig verbessert:
|
||||||
- **Hono + Bun**: ~120 LOC Compute-Server statt ~3.500 LOC NestJS
|
- **Hono + Bun**: ~120 LOC Compute-Server statt ~3.500 LOC NestJS
|
||||||
- **~50ms Cold Start**: statt 2-5 Sekunden
|
- **~50ms Cold Start**: statt 2-5 Sekunden
|
||||||
- **~30MB RAM**: statt ~200MB pro Service
|
- **~30MB RAM**: statt ~200MB pro Service
|
||||||
- **Shared Package**: `@manacore/shared-hono` (Auth, Credits, Health)
|
- **Shared Package**: `@mana/shared-hono` (Auth, Credits, Health)
|
||||||
|
|
||||||
### UX (+5-10 Punkte)
|
### UX (+5-10 Punkte)
|
||||||
- **Time to Interactive**: < 500ms (war 3-5s mit Login)
|
- **Time to Interactive**: < 500ms (war 3-5s mit Login)
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ Calc ist ein **feature-reicher Taschenrechner** mit 8 Berechnungsmodi, 5 visuell
|
||||||
|
|
||||||
## Database (55/100)
|
## Database (55/100)
|
||||||
|
|
||||||
- IndexedDB via Dexie.js (@manacore/local-store)
|
- IndexedDB via Dexie.js (@mana/local-store)
|
||||||
- 2 Collections: calculations, savedFormulas
|
- 2 Collections: calculations, savedFormulas
|
||||||
- Live Queries für reaktive Updates
|
- Live Queries für reaktive Updates
|
||||||
- Sync-fähig über mana-sync
|
- Sync-fähig über mana-sync
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ CityCorners ist ein **Stadtführer** mit interaktiven Leaflet-Karten, Marker-Clu
|
||||||
|
|
||||||
## Database (55/100)
|
## Database (55/100)
|
||||||
|
|
||||||
- IndexedDB via Dexie.js (@manacore/local-store)
|
- IndexedDB via Dexie.js (@mana/local-store)
|
||||||
- 3 Collections: cities (slug/country/name), locations (cityId/category/name), favorites (locationId)
|
- 3 Collections: cities (slug/country/name), locations (cityId/category/name), favorites (locationId)
|
||||||
- Live Queries mit Dexie liveQuery
|
- Live Queries mit Dexie liveQuery
|
||||||
- Sync über mana-sync WebSocket
|
- Sync über mana-sync WebSocket
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ ManaVoxel ist ein **2D Top-Down Pixel-Plattform** mit vollständiger Game-Engine
|
||||||
|
|
||||||
## Database (55/100)
|
## Database (55/100)
|
||||||
|
|
||||||
- IndexedDB via Dexie.js (@manacore/local-store)
|
- IndexedDB via Dexie.js (@mana/local-store)
|
||||||
- 4 Collections: worlds, areas, items, inventories
|
- 4 Collections: worlds, areas, items, inventories
|
||||||
- Item-Persistenz: Sprites, Properties, Behaviors in IndexedDB
|
- Item-Persistenz: Sprites, Properties, Behaviors in IndexedDB
|
||||||
- Inventory-Persistenz: Slot-Zuweisungen pro Player
|
- Inventory-Persistenz: Slot-Zuweisungen pro Player
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ Times ist eine **vollwertige Zeiterfassung** mit Live-Timer, Projekt-/Kunden-Man
|
||||||
|
|
||||||
## Database (60/100)
|
## Database (60/100)
|
||||||
|
|
||||||
- IndexedDB via Dexie.js (@manacore/local-store)
|
- IndexedDB via Dexie.js (@mana/local-store)
|
||||||
- 6 Collections: clients, projects, timeEntries, tags, templates, settings
|
- 6 Collections: clients, projects, timeEntries, tags, templates, settings
|
||||||
- Compound-Indizes (date+projectId)
|
- Compound-Indizes (date+projectId)
|
||||||
- Live Queries mit useLiveQueryWithDefault()
|
- Live Queries mit useLiveQueryWithDefault()
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ Memoro ist eine KI-gestützte Sprachnotiz-App mit Web (SvelteKit), Mobile (Expo)
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- Saubere Hono-Architektur mit `@manacore/shared-hono` (Auth-Middleware, Error-Handler)
|
- Saubere Hono-Architektur mit `@mana/shared-hono` (Auth-Middleware, Error-Handler)
|
||||||
- Zwei spezialisierte Server: Main-Server (3015) + Audio-Server (3016) mit Fire-and-Forget-Pattern
|
- Zwei spezialisierte Server: Main-Server (3015) + Audio-Server (3016) mit Fire-and-Forget-Pattern
|
||||||
- Service-Key-Auth für Server-to-Server-Kommunikation
|
- Service-Key-Auth für Server-to-Server-Kommunikation
|
||||||
- Credit-System mit Validierung vor Verarbeitung
|
- Credit-System mit Validierung vor Verarbeitung
|
||||||
|
|
@ -104,7 +104,7 @@ Memoro ist eine KI-gestützte Sprachnotiz-App mit Web (SvelteKit), Mobile (Expo)
|
||||||
- Svelte 5 Runes korrekt verwendet ($state, $derived, $props)
|
- Svelte 5 Runes korrekt verwendet ($state, $derived, $props)
|
||||||
- 79 Komponenten mit sauberem Tailwind CSS v4
|
- 79 Komponenten mit sauberem Tailwind CSS v4
|
||||||
- Dark/Light Mode mit Flash-Prevention
|
- Dark/Light Mode mit Flash-Prevention
|
||||||
- PWA-Manifest konfiguriert mit @manacore/shared-pwa
|
- PWA-Manifest konfiguriert mit @mana/shared-pwa
|
||||||
- Keyboard-Shortcuts (Ctrl+1-9 Navigation)
|
- Keyboard-Shortcuts (Ctrl+1-9 Navigation)
|
||||||
- Loading-Skeletons für alle Seiten
|
- Loading-Skeletons für alle Seiten
|
||||||
- Local-First mit Dexie.js und Guest-Mode
|
- Local-First mit Dexie.js und Guest-Mode
|
||||||
|
|
@ -186,7 +186,7 @@ Memoro ist eine KI-gestützte Sprachnotiz-App mit Web (SvelteKit), Mobile (Expo)
|
||||||
|
|
||||||
**Stärken:**
|
**Stärken:**
|
||||||
|
|
||||||
- JWT-Auth via @manacore/shared-hono Middleware
|
- JWT-Auth via @mana/shared-hono Middleware
|
||||||
- Service-Key-Auth für interne Server-Kommunikation
|
- Service-Key-Auth für interne Server-Kommunikation
|
||||||
- CORS korrekt konfiguriert mit Origin-Whitelist
|
- CORS korrekt konfiguriert mit Origin-Whitelist
|
||||||
- RLS-Policies in Supabase
|
- RLS-Policies in Supabase
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ Bewertet die Tiefe der Umami-Analytics-Integration pro App:
|
||||||
| ---------------------- | ---------------------------------------------------------------------- |
|
| ---------------------- | ---------------------------------------------------------------------- |
|
||||||
| **Page View Tracking** | Umami-Script via `hooks.server.ts` injiziert (automatische Page Views) |
|
| **Page View Tracking** | Umami-Script via `hooks.server.ts` injiziert (automatische Page Views) |
|
||||||
| **Custom Events** | App-spezifische Events implementiert (z.B. `TodoEvents`, `ChatEvents`) |
|
| **Custom Events** | App-spezifische Events implementiert (z.B. `TodoEvents`, `ChatEvents`) |
|
||||||
| **Auth Tracking** | Login/Signup/Logout automatisch via `@manacore/shared-auth` getrackt |
|
| **Auth Tracking** | Login/Signup/Logout automatisch via `@mana/shared-auth` getrackt |
|
||||||
| **Landing Tracking** | Landing Page Events (CTA-Clicks, Pricing Views) via `Analytics.astro` |
|
| **Landing Tracking** | Landing Page Events (CTA-Clicks, Pricing Views) via `Analytics.astro` |
|
||||||
| **Public Dashboard** | Öffentliches Dashboard auf `stats.mana.how` konfiguriert |
|
| **Public Dashboard** | Öffentliches Dashboard auf `stats.mana.how` konfiguriert |
|
||||||
|
|
||||||
|
|
@ -251,7 +251,7 @@ Der **Ecosystem Health Score** ist ein eigenständiges Dashboard unter `/manasco
|
||||||
| **Icon Consistency** | 10% | Verhältnis Phosphor-Icon-Imports vs. verbleibende inline SVGs |
|
| **Icon Consistency** | 10% | Verhältnis Phosphor-Icon-Imports vs. verbleibende inline SVGs |
|
||||||
| **i18n Coverage** | 10% | Apps mit `svelte-i18n` Internationalisierung |
|
| **i18n Coverage** | 10% | Apps mit `svelte-i18n` Internationalisierung |
|
||||||
| **Style Consistency** | 10% | Apps mit Theme-CSS-Variablen + Tailwind CSS |
|
| **Style Consistency** | 10% | Apps mit Theme-CSS-Variablen + Tailwind CSS |
|
||||||
| **Local-First** | 8% | Apps mit `@manacore/local-store` (Offline-fähig) |
|
| **Local-First** | 8% | Apps mit `@mana/local-store` (Offline-fähig) |
|
||||||
| **Error Boundaries** | 8% | Apps mit `+error.svelte` Error Page + Offline Page |
|
| **Error Boundaries** | 8% | Apps mit `+error.svelte` Error Page + Offline Page |
|
||||||
| **TypeScript Strict** | 7% | Apps mit `strict: true` in tsconfig |
|
| **TypeScript Strict** | 7% | Apps mit `strict: true` in tsconfig |
|
||||||
| **Test Coverage** | 7% | Apps mit mindestens einem Unit- oder E2E-Test |
|
| **Test Coverage** | 7% | Apps mit mindestens einem Unit- oder E2E-Test |
|
||||||
|
|
@ -278,8 +278,8 @@ Jede Metrik ist ein Prozentwert (0-100%):
|
||||||
| Metrik | Aktion |
|
| Metrik | Aktion |
|
||||||
| ------------------- | ------------------------------------------------------------------------------- |
|
| ------------------- | ------------------------------------------------------------------------------- |
|
||||||
| Shared Packages ↑ | Fehlende Core-Packages in `package.json` hinzufügen |
|
| Shared Packages ↑ | Fehlende Core-Packages in `package.json` hinzufügen |
|
||||||
| Icon Consistency ↑ | Inline SVGs durch `@manacore/shared-icons` Phosphor-Komponenten ersetzen |
|
| Icon Consistency ↑ | Inline SVGs durch `@mana/shared-icons` Phosphor-Komponenten ersetzen |
|
||||||
| Modal Consistency ↑ | Custom-Modals auf `<Modal>` aus `@manacore/shared-ui` migrieren |
|
| Modal Consistency ↑ | Custom-Modals auf `<Modal>` aus `@mana/shared-ui` migrieren |
|
||||||
| Error Handling ↑ | `instanceof Error` durch shared `getErrorMessage()` Helper ersetzen |
|
| Error Handling ↑ | `instanceof Error` durch shared `getErrorMessage()` Helper ersetzen |
|
||||||
| Error Boundaries ↑ | `+error.svelte` in jeder App anlegen |
|
| Error Boundaries ↑ | `+error.svelte` in jeder App anlegen |
|
||||||
| Test Coverage ↑ | Mindestens einen Unit-Test pro App schreiben |
|
| Test Coverage ↑ | Mindestens einen Unit-Test pro App schreiben |
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,13 @@ lang: de
|
||||||
|
|
||||||
**KI für alle zugänglich machen.**
|
**KI für alle zugänglich machen.**
|
||||||
|
|
||||||
Wir glauben an eine Welt, in der jeder Zugang zu den besten KI-Tools hat - unabhängig von Unternehmensgröße, technischem Know-how oder Budget. Manacore revolutioniert die Art, wie Menschen und Unternehmen auf KI-Tools zugreifen: Ein Konto, ein Guthaben, unendliche Möglichkeiten.
|
Wir glauben an eine Welt, in der jeder Zugang zu den besten KI-Tools hat - unabhängig von Unternehmensgröße, technischem Know-how oder Budget. Mana revolutioniert die Art, wie Menschen und Unternehmen auf KI-Tools zugreifen: Ein Konto, ein Guthaben, unendliche Möglichkeiten.
|
||||||
|
|
||||||
## Mission
|
## Mission
|
||||||
|
|
||||||
**Ein langfristig nachhaltiges Software-Ökosystem mit KI im Kern aufbauen.**
|
**Ein langfristig nachhaltiges Software-Ökosystem mit KI im Kern aufbauen.**
|
||||||
|
|
||||||
Durch gutes Design und optimale Vernetzung ermöglichen wir jedem, Wissen, Erfahrungen und Ideen besser festzuhalten, zu sammeln, darzustellen und zu teilen. Im Manacore-Netzwerk arbeiten verschiedene Applikationen zusammen - jede unterstützt Menschen bei spezifischen Aufgaben, verbunden entfalten sie eine ganz neue Kraft.
|
Durch gutes Design und optimale Vernetzung ermöglichen wir jedem, Wissen, Erfahrungen und Ideen besser festzuhalten, zu sammeln, darzustellen und zu teilen. Im Mana-Netzwerk arbeiten verschiedene Applikationen zusammen - jede unterstützt Menschen bei spezifischen Aufgaben, verbunden entfalten sie eine ganz neue Kraft.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ Keine versteckten Kosten, keine Lock-ins. Kostenersparnisse werden direkt an Nut
|
||||||
|
|
||||||
### 3. Community-getrieben
|
### 3. Community-getrieben
|
||||||
|
|
||||||
Unsere Nutzer gestalten aktiv mit. Feedback wird gehört und umgesetzt. Jeder kann am Manacore-Ökosystem teilhaben:
|
Unsere Nutzer gestalten aktiv mit. Feedback wird gehört und umgesetzt. Jeder kann am Mana-Ökosystem teilhaben:
|
||||||
|
|
||||||
- Als Nutzer der verschiedenen Tools
|
- Als Nutzer der verschiedenen Tools
|
||||||
- Durch aktives Feedback über verschiedene Kanäle
|
- Durch aktives Feedback über verschiedene Kanäle
|
||||||
|
|
@ -192,4 +192,4 @@ Diese Werte sind unser Versprechen an dich. Du kannst uns daran messen. Wenn wir
|
||||||
|
|
||||||
## In einem Satz
|
## In einem Satz
|
||||||
|
|
||||||
> Manacore macht die digitale Welt und KI-Möglichkeiten für jeden zugänglich - mit einem Geschäftsmodell, bei dem Software allen gehört, die daran mitwirken und es mitgestalten.
|
> Mana macht die digitale Welt und KI-Möglichkeiten für jeden zugänglich - mit einem Geschäftsmodell, bei dem Software allen gehört, die daran mitwirken und es mitgestalten.
|
||||||
|
|
|
||||||