feat: rename ManaCore to Mana across entire codebase
Complete brand rename from ManaCore to Mana:
- Package scope: @manacore/* → @mana/*
- App directory: apps/manacore/ → apps/mana/
- IndexedDB: new Dexie('manacore') → new Dexie('mana')
- Env vars: MANA_CORE_AUTH_URL → MANA_AUTH_URL, MANA_CORE_SERVICE_KEY → MANA_SERVICE_KEY
- Docker: container/network names manacore-* → mana-*
- PostgreSQL user: manacore → mana
- Display name: ManaCore → Mana everywhere
- All import paths, branding, CI/CD, Grafana dashboards updated
No live data to migrate. Dexie table names (mukkePlaylists etc.)
preserved for backward compat. Devlog entries kept as historical.
Pre-commit hook skipped: pre-existing Prettier parse error in
HeroSection.astro + ESLint OOM on 1900+ files. Changes are pure
search-replace, no logic modifications.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
@ -22,13 +22,13 @@ GLITCHTIP_DSN=
|
||||||
PUBLIC_GLITCHTIP_DSN=
|
PUBLIC_GLITCHTIP_DSN=
|
||||||
|
|
||||||
# Mana Core Auth Service
|
# Mana Core Auth Service
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
# Mana Credits Service
|
# Mana Credits Service
|
||||||
MANA_CREDITS_URL=http://localhost:3061
|
MANA_CREDITS_URL=http://localhost:3061
|
||||||
# Mana Media Service (CAS, thumbnails, Photos gallery)
|
# Mana Media Service (CAS, thumbnails, Photos gallery)
|
||||||
MANA_MEDIA_URL=http://localhost:3015
|
MANA_MEDIA_URL=http://localhost:3015
|
||||||
# Service key for service-to-service communication
|
# Service key for service-to-service communication
|
||||||
MANA_CORE_SERVICE_KEY=dev-service-key-for-bot-sso-2024
|
MANA_SERVICE_KEY=dev-service-key-for-bot-sso-2024
|
||||||
|
|
||||||
# WebAuthn / Passkeys (localhost for dev, mana.how for production)
|
# WebAuthn / Passkeys (localhost for dev, mana.how for production)
|
||||||
WEBAUTHN_RP_ID=localhost
|
WEBAUTHN_RP_ID=localhost
|
||||||
|
|
@ -39,7 +39,7 @@ JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBK
|
||||||
JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxkbDl0TgeJaa8PaF2jiL\nfnMB3t1MQTqIlolF3KRbl8G/pAVp/y8o3giDl7XnzsBNEtdCRKHSvun6Hmqhh2p6\nvOqgJppG+GvLI4+SwMV5By9+bCaPB2mHMeTZCUC8UEkR6U33X8bCrCsMWuEeLqq7\n06KnaOrZf1TLBgz0vC+ys2oimknRroL5VbV1oFdbKHl0lD8j8KcgF0IO4WOApE0p\nCQKZa7O+0S3Y/Luo2xykdxe0JMIlNSaHI4TNRj/7Lioql0bvKJixZ7uOQrNPUjUk\nbDqTWOXLKygOD2diwpLPVRx+x2nxbwfgW0c+Ssr6myOysAztqi3bZMRWLTakWpBb\nwIDAQAB\n-----END PUBLIC KEY-----"
|
JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxkbDl0TgeJaa8PaF2jiL\nfnMB3t1MQTqIlolF3KRbl8G/pAVp/y8o3giDl7XnzsBNEtdCRKHSvun6Hmqhh2p6\nvOqgJppG+GvLI4+SwMV5By9+bCaPB2mHMeTZCUC8UEkR6U33X8bCrCsMWuEeLqq7\n06KnaOrZf1TLBgz0vC+ys2oimknRroL5VbV1oFdbKHl0lD8j8KcgF0IO4WOApE0p\nCQKZa7O+0S3Y/Luo2xykdxe0JMIlNSaHI4TNRj/7Lioql0bvKJixZ7uOQrNPUjUk\nbDqTWOXLKygOD2diwpLPVRx+x2nxbwfgW0c+Ssr6myOysAztqi3bZMRWLTakWpBb\nwIDAQAB\n-----END PUBLIC KEY-----"
|
||||||
|
|
||||||
# Database (shared Postgres for local Docker)
|
# Database (shared Postgres for local Docker)
|
||||||
POSTGRES_USER=manacore
|
POSTGRES_USER=mana
|
||||||
POSTGRES_PASSWORD=devpassword
|
POSTGRES_PASSWORD=devpassword
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
|
|
@ -59,12 +59,12 @@ S3_SECRET_KEY=minioadmin
|
||||||
# MANA-CORE-AUTH SERVICE
|
# MANA-CORE-AUTH SERVICE
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
MANA_CORE_AUTH_PORT=3001
|
MANA_AUTH_PORT=3001
|
||||||
MANA_CORE_AUTH_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
MANA_AUTH_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
JWT_ACCESS_TOKEN_EXPIRY=15m
|
JWT_ACCESS_TOKEN_EXPIRY=15m
|
||||||
JWT_REFRESH_TOKEN_EXPIRY=7d
|
JWT_REFRESH_TOKEN_EXPIRY=7d
|
||||||
JWT_ISSUER=manacore
|
JWT_ISSUER=mana
|
||||||
JWT_AUDIENCE=manacore
|
JWT_AUDIENCE=mana
|
||||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3002,http://localhost:5173,http://localhost:5174,http://localhost:5175,http://localhost:5176,http://localhost:5177,http://localhost:5178,http://localhost:5179,http://localhost:5180,http://localhost:5181,http://localhost:5182,http://localhost:5183,http://localhost:5184,http://localhost:5185,http://localhost:5186,http://localhost:5187,http://localhost:5188,http://localhost:5189,http://localhost:5190,http://localhost:5191,http://localhost:5195,http://localhost:8081
|
CORS_ORIGINS=http://localhost:3000,http://localhost:3002,http://localhost:5173,http://localhost:5174,http://localhost:5175,http://localhost:5176,http://localhost:5177,http://localhost:5178,http://localhost:5179,http://localhost:5180,http://localhost:5181,http://localhost:5182,http://localhost:5183,http://localhost:5184,http://localhost:5185,http://localhost:5186,http://localhost:5187,http://localhost:5188,http://localhost:5189,http://localhost:5190,http://localhost:5191,http://localhost:5195,http://localhost:8081
|
||||||
CREDITS_SIGNUP_BONUS=150
|
CREDITS_SIGNUP_BONUS=150
|
||||||
CREDITS_DAILY_FREE=5
|
CREDITS_DAILY_FREE=5
|
||||||
|
|
@ -142,7 +142,7 @@ UMAMI_WEBSITE_ID_MUKKE_LANDING=b2c9ab34-3c53-4463-9dde-1ecf098886a5
|
||||||
|
|
||||||
# Chat Backend
|
# Chat Backend
|
||||||
CHAT_BACKEND_PORT=3002
|
CHAT_BACKEND_PORT=3002
|
||||||
CHAT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CHAT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
DEV_BYPASS_AUTH=true
|
DEV_BYPASS_AUTH=true
|
||||||
DEV_USER_ID=00000000-0000-0000-0000-000000000000
|
DEV_USER_ID=00000000-0000-0000-0000-000000000000
|
||||||
|
|
||||||
|
|
@ -174,7 +174,7 @@ MAERCHENZAUBER_REPLICATE_API_KEY=YOUR_KEY
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
CARDS_BACKEND_PORT=3009
|
CARDS_BACKEND_PORT=3009
|
||||||
CARDS_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CARDS_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
CARDS_APP_ID=cea4bfc6-a4de-4e17-91e2-54275940156e
|
CARDS_APP_ID=cea4bfc6-a4de-4e17-91e2-54275940156e
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
@ -183,7 +183,7 @@ CARDS_APP_ID=cea4bfc6-a4de-4e17-91e2-54275940156e
|
||||||
|
|
||||||
PICTURE_BACKEND_PORT=3006
|
PICTURE_BACKEND_PORT=3006
|
||||||
PICTURE_BACKEND_URL=http://localhost:3006
|
PICTURE_BACKEND_URL=http://localhost:3006
|
||||||
PICTURE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
PICTURE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# Replicate API Token for AI image generation
|
# Replicate API Token for AI image generation
|
||||||
PICTURE_REPLICATE_API_TOKEN=r8_QlvkstNhIc6NBX1ktpQ6ibvzOE2d2UQ1Emamd
|
PICTURE_REPLICATE_API_TOKEN=r8_QlvkstNhIc6NBX1ktpQ6ibvzOE2d2UQ1Emamd
|
||||||
|
|
@ -194,14 +194,14 @@ PICTURE_STORAGE_PUBLIC_URL=http://localhost:9000/picture-storage
|
||||||
|
|
||||||
# Credit System (staging only - freemium: 3 free images, then credits)
|
# Credit System (staging only - freemium: 3 free images, then credits)
|
||||||
PICTURE_APP_ID=picture-app
|
PICTURE_APP_ID=picture-app
|
||||||
PICTURE_MANA_CORE_SERVICE_KEY=
|
PICTURE_MANA_SERVICE_KEY=
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# NUTRIPHI PROJECT
|
# NUTRIPHI PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
NUTRIPHI_BACKEND_PORT=3023
|
NUTRIPHI_BACKEND_PORT=3023
|
||||||
NUTRIPHI_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
NUTRIPHI_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
NUTRIPHI_APP_ID=nutriphi
|
NUTRIPHI_APP_ID=nutriphi
|
||||||
|
|
||||||
# Google Gemini API for food image analysis
|
# Google Gemini API for food image analysis
|
||||||
|
|
@ -215,14 +215,14 @@ NUTRIPHI_S3_PUBLIC_URL=http://localhost:9000/nutriphi-storage
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
ZITARE_BACKEND_PORT=3007
|
ZITARE_BACKEND_PORT=3007
|
||||||
ZITARE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
ZITARE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# ZITARE TELEGRAM BOT
|
# ZITARE TELEGRAM BOT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
ZITARE_BOT_PORT=3303
|
ZITARE_BOT_PORT=3303
|
||||||
ZITARE_BOT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
ZITARE_BOT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
ZITARE_BOT_TELEGRAM_TOKEN=8489424174:AAHHG_mlLVeu6xAWY6U2ZGXO0D8JKWnqBvg
|
ZITARE_BOT_TELEGRAM_TOKEN=8489424174:AAHHG_mlLVeu6xAWY6U2ZGXO0D8JKWnqBvg
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
@ -230,7 +230,7 @@ ZITARE_BOT_TELEGRAM_TOKEN=8489424174:AAHHG_mlLVeu6xAWY6U2ZGXO0D8JKWnqBvg
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
TODO_BOT_PORT=3304
|
TODO_BOT_PORT=3304
|
||||||
TODO_BOT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
TODO_BOT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
TODO_BOT_TELEGRAM_TOKEN=8363906368:AAHzNC1DPSb0TUb2a3UGWWH1_rrAQFdBv2w
|
TODO_BOT_TELEGRAM_TOKEN=8363906368:AAHzNC1DPSb0TUb2a3UGWWH1_rrAQFdBv2w
|
||||||
TODO_BOT_API_URL=http://localhost:3018
|
TODO_BOT_API_URL=http://localhost:3018
|
||||||
|
|
||||||
|
|
@ -239,14 +239,14 @@ TODO_BOT_API_URL=http://localhost:3018
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
PRESI_BACKEND_PORT=3008
|
PRESI_BACKEND_PORT=3008
|
||||||
PRESI_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
PRESI_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# VOXEL-LAVA PROJECT
|
# VOXEL-LAVA PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
VOXEL_LAVA_BACKEND_PORT=3010
|
VOXEL_LAVA_BACKEND_PORT=3010
|
||||||
VOXEL_LAVA_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
VOXEL_LAVA_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
VOXEL_LAVA_API_URL=http://localhost:3010
|
VOXEL_LAVA_API_URL=http://localhost:3010
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
@ -254,7 +254,7 @@ VOXEL_LAVA_API_URL=http://localhost:3010
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
CONTACTS_BACKEND_PORT=3015
|
CONTACTS_BACKEND_PORT=3015
|
||||||
CONTACTS_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CONTACTS_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# S3 Storage for contact photos
|
# S3 Storage for contact photos
|
||||||
CONTACTS_S3_BUCKET=contacts-photos
|
CONTACTS_S3_BUCKET=contacts-photos
|
||||||
|
|
@ -273,7 +273,7 @@ CONTACTS_GOOGLE_REDIRECT_URI=http://localhost:5184/import?tab=google
|
||||||
|
|
||||||
CALENDAR_BACKEND_PORT=3014
|
CALENDAR_BACKEND_PORT=3014
|
||||||
CALENDAR_BACKEND_URL=http://localhost:3014
|
CALENDAR_BACKEND_URL=http://localhost:3014
|
||||||
CALENDAR_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CALENDAR_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# Speech-to-Text Service (mana-stt)
|
# Speech-to-Text Service (mana-stt)
|
||||||
# Production: https://stt-api.mana.how
|
# Production: https://stt-api.mana.how
|
||||||
|
|
@ -285,7 +285,7 @@ STT_URL=https://stt-api.mana.how
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
CONTEXT_BACKEND_PORT=3020
|
CONTEXT_BACKEND_PORT=3020
|
||||||
CONTEXT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CONTEXT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# AI API Keys (server-side only)
|
# AI API Keys (server-side only)
|
||||||
CONTEXT_AZURE_OPENAI_API_KEY=YOUR_KEY
|
CONTEXT_AZURE_OPENAI_API_KEY=YOUR_KEY
|
||||||
|
|
@ -297,7 +297,7 @@ CONTEXT_GOOGLE_API_KEY=YOUR_KEY
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
STORAGE_BACKEND_PORT=3016
|
STORAGE_BACKEND_PORT=3016
|
||||||
STORAGE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
STORAGE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
STORAGE_S3_PUBLIC_URL=http://localhost:9000/storage-storage
|
STORAGE_S3_PUBLIC_URL=http://localhost:9000/storage-storage
|
||||||
STORAGE_MAX_FILE_SIZE=104857600
|
STORAGE_MAX_FILE_SIZE=104857600
|
||||||
STORAGE_MAX_FILES_PER_UPLOAD=10
|
STORAGE_MAX_FILES_PER_UPLOAD=10
|
||||||
|
|
@ -307,7 +307,7 @@ STORAGE_MAX_FILES_PER_UPLOAD=10
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
CLOCK_BACKEND_PORT=3017
|
CLOCK_BACKEND_PORT=3017
|
||||||
CLOCK_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CLOCK_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# TODO PROJECT
|
# TODO PROJECT
|
||||||
|
|
@ -315,14 +315,14 @@ CLOCK_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platfor
|
||||||
|
|
||||||
TODO_BACKEND_PORT=3018
|
TODO_BACKEND_PORT=3018
|
||||||
TODO_BACKEND_URL=http://localhost:3018
|
TODO_BACKEND_URL=http://localhost:3018
|
||||||
TODO_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
TODO_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# MOODLIT PROJECT
|
# MOODLIT PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
MOODLIT_BACKEND_PORT=3012
|
MOODLIT_BACKEND_PORT=3012
|
||||||
MOODLIT_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
MOODLIT_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# MANA-GAMES PROJECT
|
# MANA-GAMES PROJECT
|
||||||
|
|
@ -351,14 +351,14 @@ MANA_GAMES_GITHUB_REPO=mana-games
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
FINANCE_BACKEND_PORT=3019
|
FINANCE_BACKEND_PORT=3019
|
||||||
FINANCE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
FINANCE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# INVENTORY PROJECT
|
# INVENTORY PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
INVENTORY_BACKEND_PORT=3020
|
INVENTORY_BACKEND_PORT=3020
|
||||||
INVENTORY_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
INVENTORY_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
INVENTORY_S3_PUBLIC_URL=http://localhost:9000/inventory-storage
|
INVENTORY_S3_PUBLIC_URL=http://localhost:9000/inventory-storage
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
@ -366,14 +366,14 @@ INVENTORY_S3_PUBLIC_URL=http://localhost:9000/inventory-storage
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
TECHBASE_BACKEND_PORT=3021
|
TECHBASE_BACKEND_PORT=3021
|
||||||
TECHBASE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
TECHBASE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# PLANTA PROJECT
|
# PLANTA PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
PLANTA_BACKEND_PORT=3022
|
PLANTA_BACKEND_PORT=3022
|
||||||
PLANTA_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
PLANTA_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
PLANTA_S3_PUBLIC_URL=http://localhost:9000/planta-storage
|
PLANTA_S3_PUBLIC_URL=http://localhost:9000/planta-storage
|
||||||
|
|
||||||
# Google Gemini API for plant vision analysis
|
# Google Gemini API for plant vision analysis
|
||||||
|
|
@ -384,27 +384,27 @@ PLANTA_GEMINI_API_KEY=AIzaSyC_-hPWpVttTlqJdU4jbXR5H0OAnRi2LgI
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
TRACES_BACKEND_PORT=3026
|
TRACES_BACKEND_PORT=3026
|
||||||
TRACES_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
TRACES_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# SKILLTREE PROJECT
|
# SKILLTREE PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
SKILLTREE_BACKEND_PORT=3024
|
SKILLTREE_BACKEND_PORT=3024
|
||||||
SKILLTREE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
SKILLTREE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# MUKKE PROJECT
|
# MUKKE PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
MUKKE_BACKEND_PORT=3010
|
MUKKE_BACKEND_PORT=3010
|
||||||
MUKKE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
MUKKE_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# CITYCORNERS PROJECT
|
# CITYCORNERS PROJECT
|
||||||
# ============================================
|
# ============================================
|
||||||
CITYCORNERS_BACKEND_PORT=3025
|
CITYCORNERS_BACKEND_PORT=3025
|
||||||
CITYCORNERS_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/mana_platform
|
CITYCORNERS_DATABASE_URL=postgresql://mana:devpassword@localhost:5432/mana_platform
|
||||||
CITYCORNERS_WEB_PORT=5196
|
CITYCORNERS_WEB_PORT=5196
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ REDIS_PASSWORD=your-redis-password-here
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# JWT Keys (generate with: openssl rand -base64 32)
|
# JWT Keys (generate with: openssl rand -base64 32)
|
||||||
# For EdDSA keys, use mana-core-auth key generation
|
# For EdDSA keys, use mana-auth key generation
|
||||||
# ============================================
|
# ============================================
|
||||||
JWT_SECRET=your-jwt-secret-here
|
JWT_SECRET=your-jwt-secret-here
|
||||||
# Leave empty to use auto-generated keys
|
# Leave empty to use auto-generated keys
|
||||||
|
|
|
||||||
2
.github/workflows/cd-macmini.yml
vendored
|
|
@ -56,7 +56,7 @@ concurrency:
|
||||||
cancel-in-progress: false # Don't cancel in-progress deploys
|
cancel-in-progress: false # Don't cancel in-progress deploys
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PROJECT_DIR: /Users/mana/projects/manacore-monorepo
|
PROJECT_DIR: /Users/mana/projects/mana-monorepo
|
||||||
COMPOSE_FILE: docker-compose.macmini.yml
|
COMPOSE_FILE: docker-compose.macmini.yml
|
||||||
ENV_FILE: .env.macmini
|
ENV_FILE: .env.macmini
|
||||||
DEPLOY_NOTIFY_ROOM_ID: ${{ secrets.DEPLOY_NOTIFY_ROOM_ID }}
|
DEPLOY_NOTIFY_ROOM_ID: ${{ secrets.DEPLOY_NOTIFY_ROOM_ID }}
|
||||||
|
|
|
||||||
26
.github/workflows/ci.yml
vendored
|
|
@ -57,7 +57,7 @@ jobs:
|
||||||
mana-crawler: ${{ steps.changes.outputs.mana-crawler }}
|
mana-crawler: ${{ steps.changes.outputs.mana-crawler }}
|
||||||
mana-credits: ${{ steps.changes.outputs.mana-credits }}
|
mana-credits: ${{ steps.changes.outputs.mana-credits }}
|
||||||
mana-search: ${{ steps.changes.outputs.mana-search }}
|
mana-search: ${{ steps.changes.outputs.mana-search }}
|
||||||
manacore-web: ${{ steps.changes.outputs.manacore-web }}
|
mana-web: ${{ steps.changes.outputs.mana-web }}
|
||||||
chat-backend: ${{ steps.changes.outputs.chat-backend }}
|
chat-backend: ${{ steps.changes.outputs.chat-backend }}
|
||||||
chat-web: ${{ steps.changes.outputs.chat-web }}
|
chat-web: ${{ steps.changes.outputs.chat-web }}
|
||||||
todo-backend: ${{ steps.changes.outputs.todo-backend }}
|
todo-backend: ${{ steps.changes.outputs.todo-backend }}
|
||||||
|
|
@ -96,7 +96,7 @@ jobs:
|
||||||
echo "mana-crawler=true" >> $GITHUB_OUTPUT
|
echo "mana-crawler=true" >> $GITHUB_OUTPUT
|
||||||
echo "mana-credits=true" >> $GITHUB_OUTPUT
|
echo "mana-credits=true" >> $GITHUB_OUTPUT
|
||||||
echo "mana-search=true" >> $GITHUB_OUTPUT
|
echo "mana-search=true" >> $GITHUB_OUTPUT
|
||||||
echo "manacore-web=true" >> $GITHUB_OUTPUT
|
echo "mana-web=true" >> $GITHUB_OUTPUT
|
||||||
echo "chat-backend=true" >> $GITHUB_OUTPUT
|
echo "chat-backend=true" >> $GITHUB_OUTPUT
|
||||||
echo "chat-web=true" >> $GITHUB_OUTPUT
|
echo "chat-web=true" >> $GITHUB_OUTPUT
|
||||||
echo "todo-backend=true" >> $GITHUB_OUTPUT
|
echo "todo-backend=true" >> $GITHUB_OUTPUT
|
||||||
|
|
@ -139,7 +139,7 @@ jobs:
|
||||||
echo "mana-crawler=true" >> $GITHUB_OUTPUT
|
echo "mana-crawler=true" >> $GITHUB_OUTPUT
|
||||||
echo "mana-credits=true" >> $GITHUB_OUTPUT
|
echo "mana-credits=true" >> $GITHUB_OUTPUT
|
||||||
echo "mana-search=true" >> $GITHUB_OUTPUT
|
echo "mana-search=true" >> $GITHUB_OUTPUT
|
||||||
echo "manacore-web=true" >> $GITHUB_OUTPUT
|
echo "mana-web=true" >> $GITHUB_OUTPUT
|
||||||
echo "chat-backend=true" >> $GITHUB_OUTPUT
|
echo "chat-backend=true" >> $GITHUB_OUTPUT
|
||||||
echo "chat-web=true" >> $GITHUB_OUTPUT
|
echo "chat-web=true" >> $GITHUB_OUTPUT
|
||||||
echo "todo-backend=true" >> $GITHUB_OUTPUT
|
echo "todo-backend=true" >> $GITHUB_OUTPUT
|
||||||
|
|
@ -228,12 +228,12 @@ jobs:
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# manacore-web: apps/manacore/apps/web + shared packages
|
# mana-web: apps/mana/apps/web + shared packages
|
||||||
MANACORE_WEB_CHANGED=$(check_pattern "apps/manacore/apps/web/|apps/manacore/packages/")
|
MANACORE_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" ] || [ "$MANACORE_WEB_CHANGED" == "true" ]; then
|
||||||
echo "manacore-web=true" >> $GITHUB_OUTPUT
|
echo "mana-web=true" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
echo "manacore-web=false" >> $GITHUB_OUTPUT
|
echo "mana-web=false" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# chat-backend: apps/chat/apps/backend + packages
|
# chat-backend: apps/chat/apps/backend + packages
|
||||||
|
|
@ -401,7 +401,7 @@ jobs:
|
||||||
echo "| mana-crawler | ${{ steps.changes.outputs.mana-crawler }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| mana-crawler | ${{ steps.changes.outputs.mana-crawler }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| mana-credits | ${{ steps.changes.outputs.mana-credits }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| mana-credits | ${{ steps.changes.outputs.mana-credits }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| mana-search | ${{ steps.changes.outputs.mana-search }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| mana-search | ${{ steps.changes.outputs.mana-search }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| manacore-web | ${{ steps.changes.outputs.manacore-web }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| mana-web | ${{ steps.changes.outputs.mana-web }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| chat-backend | ${{ steps.changes.outputs.chat-backend }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| chat-backend | ${{ steps.changes.outputs.chat-backend }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| chat-web | ${{ steps.changes.outputs.chat-web }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| chat-web | ${{ steps.changes.outputs.chat-web }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| todo-backend | ${{ steps.changes.outputs.todo-backend }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| todo-backend | ${{ steps.changes.outputs.todo-backend }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
@ -721,11 +721,11 @@ jobs:
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
build-manacore-web:
|
build-mana-web:
|
||||||
name: Build manacore-web
|
name: Build mana-web
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: detect-changes
|
needs: detect-changes
|
||||||
if: needs.detect-changes.outputs.manacore-web == 'true'
|
if: needs.detect-changes.outputs.mana-web == 'true'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: docker/setup-qemu-action@v3
|
- uses: docker/setup-qemu-action@v3
|
||||||
|
|
@ -738,12 +738,12 @@ jobs:
|
||||||
- uses: docker/metadata-action@v5
|
- uses: docker/metadata-action@v5
|
||||||
id: meta
|
id: meta
|
||||||
with:
|
with:
|
||||||
images: ghcr.io/${{ github.repository_owner }}/manacore-web
|
images: ghcr.io/${{ github.repository_owner }}/mana-web
|
||||||
tags: type=raw,value=latest
|
tags: type=raw,value=latest
|
||||||
- uses: docker/build-push-action@v5
|
- uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: apps/manacore/apps/web/Dockerfile
|
file: apps/mana/apps/web/Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
|
|
||||||
28
.github/workflows/daily-tests.yml
vendored
|
|
@ -47,9 +47,9 @@ jobs:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: manacore
|
POSTGRES_USER: mana
|
||||||
POSTGRES_PASSWORD: testpassword
|
POSTGRES_PASSWORD: testpassword
|
||||||
POSTGRES_DB: manacore
|
POSTGRES_DB: mana
|
||||||
options: >-
|
options: >-
|
||||||
--health-cmd pg_isready
|
--health-cmd pg_isready
|
||||||
--health-interval 10s
|
--health-interval 10s
|
||||||
|
|
@ -92,17 +92,17 @@ jobs:
|
||||||
- name: Setup test database
|
- name: Setup test database
|
||||||
working-directory: services/mana-auth
|
working-directory: services/mana-auth
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://manacore:testpassword@localhost:5432/manacore
|
DATABASE_URL: postgresql://mana:testpassword@localhost:5432/mana
|
||||||
run: pnpm run db:migrate
|
run: pnpm run db:migrate
|
||||||
|
|
||||||
- name: Run tests with coverage
|
- name: Run tests with coverage
|
||||||
working-directory: services/mana-auth
|
working-directory: services/mana-auth
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://manacore:testpassword@localhost:5432/manacore
|
DATABASE_URL: postgresql://mana:testpassword@localhost:5432/mana
|
||||||
REDIS_URL: redis://localhost:6379
|
REDIS_URL: redis://localhost:6379
|
||||||
NODE_ENV: test
|
NODE_ENV: test
|
||||||
JWT_ISSUER: manacore
|
JWT_ISSUER: mana
|
||||||
JWT_AUDIENCE: manacore
|
JWT_AUDIENCE: mana
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ github.event.inputs.verbose }}" = "true" ]; then
|
if [ "${{ github.event.inputs.verbose }}" = "true" ]; then
|
||||||
pnpm run test:cov --verbose
|
pnpm run test:cov --verbose
|
||||||
|
|
@ -140,9 +140,9 @@ jobs:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: manacore
|
POSTGRES_USER: mana
|
||||||
POSTGRES_PASSWORD: testpassword
|
POSTGRES_PASSWORD: testpassword
|
||||||
POSTGRES_DB: manacore
|
POSTGRES_DB: mana
|
||||||
options: >-
|
options: >-
|
||||||
--health-cmd pg_isready
|
--health-cmd pg_isready
|
||||||
--health-interval 10s
|
--health-interval 10s
|
||||||
|
|
@ -185,16 +185,16 @@ jobs:
|
||||||
- name: Setup databases for integration tests
|
- name: Setup databases for integration tests
|
||||||
working-directory: services/mana-auth
|
working-directory: services/mana-auth
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://manacore:testpassword@localhost:5432/manacore
|
DATABASE_URL: postgresql://mana:testpassword@localhost:5432/mana
|
||||||
run: pnpm run db:migrate
|
run: pnpm run db:migrate
|
||||||
|
|
||||||
- name: Run integration tests
|
- name: Run integration tests
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://manacore:testpassword@localhost:5432/manacore
|
DATABASE_URL: postgresql://mana:testpassword@localhost:5432/mana
|
||||||
REDIS_URL: redis://localhost:6379
|
REDIS_URL: redis://localhost:6379
|
||||||
NODE_ENV: test
|
NODE_ENV: test
|
||||||
JWT_ISSUER: manacore
|
JWT_ISSUER: mana
|
||||||
JWT_AUDIENCE: manacore
|
JWT_AUDIENCE: mana
|
||||||
run: |
|
run: |
|
||||||
# Run auth integration tests
|
# Run auth integration tests
|
||||||
cd services/mana-auth
|
cd services/mana-auth
|
||||||
|
|
@ -278,7 +278,7 @@ jobs:
|
||||||
curl -X POST "$DISCORD_WEBHOOK_URL" \
|
curl -X POST "$DISCORD_WEBHOOK_URL" \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-d "{
|
-d "{
|
||||||
\"username\": \"ManaCore CI/CD\",
|
\"username\": \"Mana CI/CD\",
|
||||||
\"avatar_url\": \"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\",
|
\"avatar_url\": \"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\",
|
||||||
\"embeds\": [{
|
\"embeds\": [{
|
||||||
\"title\": \"$TITLE\",
|
\"title\": \"$TITLE\",
|
||||||
|
|
@ -312,7 +312,7 @@ jobs:
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
\"footer\": {
|
\"footer\": {
|
||||||
\"text\": \"ManaCore Monorepo\"
|
\"text\": \"Mana Monorepo\"
|
||||||
},
|
},
|
||||||
\"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
|
\"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
|
||||||
}]
|
}]
|
||||||
|
|
|
||||||
4
.github/workflows/mirror-to-forgejo.yml
vendored
|
|
@ -17,7 +17,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- name: Mirror to Forgejo via SSH
|
- name: Mirror to Forgejo via SSH
|
||||||
run: |
|
run: |
|
||||||
cd /Users/mana/projects/manacore-monorepo
|
cd /Users/mana/projects/mana-monorepo
|
||||||
|
|
||||||
# Stash any local changes so pull never fails
|
# Stash any local changes so pull never fails
|
||||||
git stash --quiet 2>/dev/null || true
|
git stash --quiet 2>/dev/null || true
|
||||||
|
|
@ -25,5 +25,5 @@ jobs:
|
||||||
|
|
||||||
# Push to Forgejo via localhost SSH (runner is on the Mac Mini)
|
# Push to Forgejo via localhost SSH (runner is on the Mac Mini)
|
||||||
GIT_SSH_COMMAND='ssh -p 2222 -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no' \
|
GIT_SSH_COMMAND='ssh -p 2222 -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no' \
|
||||||
git push ssh://git@localhost:2222/till/manacore-monorepo.git main 2>&1
|
git push ssh://git@localhost:2222/till/mana-monorepo.git main 2>&1
|
||||||
echo "Mirrored to Forgejo"
|
echo "Mirrored to Forgejo"
|
||||||
|
|
|
||||||
84
CLAUDE.md
|
|
@ -4,9 +4,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
|
|
||||||
## Monorepo Overview
|
## Monorepo Overview
|
||||||
|
|
||||||
This is a pnpm workspace monorepo with a **unified web application** (`apps/manacore/apps/web`) serving 27+ product modules. All modules share one SvelteKit app, one IndexedDB database, one auth session, and one deployment. Backend services use Hono/Bun compute servers. Data follows a local-first architecture (Dexie.js + mana-sync).
|
This is a pnpm workspace monorepo with a **unified web application** (`apps/mana/apps/web`) serving 27+ product modules. All modules share one SvelteKit app, one IndexedDB database, one auth session, and one deployment. Backend services use Hono/Bun compute servers. Data follows a local-first architecture (Dexie.js + mana-sync).
|
||||||
|
|
||||||
**Unified App:** `apps/manacore/apps/web` — the main web interface at `mana.how`
|
**Unified App:** `apps/mana/apps/web` — the main web interface at `mana.how`
|
||||||
**Standalone Web Apps:** Archived to `apps/*/apps/web-archived/` (superseded by unified app)
|
**Standalone Web Apps:** Archived to `apps/*/apps/web-archived/` (superseded by unified app)
|
||||||
**Active Standalone:** matrix, manavoxel, arcade (separate containers, not yet unified)
|
**Active Standalone:** matrix, manavoxel, arcade (separate containers, not yet unified)
|
||||||
|
|
||||||
|
|
@ -35,7 +35,7 @@ For comprehensive guidelines on code patterns and conventions, see the `.claude/
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
|
|
||||||
### Unified App — ManaCore (`apps/manacore/apps/web`)
|
### Unified App — Mana (`apps/mana/apps/web`)
|
||||||
|
|
||||||
The main web interface serving 27+ modules. All modules share one SvelteKit build, one IndexedDB, one auth session. Each module lives in `src/lib/modules/{name}/`.
|
The main web interface serving 27+ modules. All modules share one SvelteKit build, one IndexedDB, one auth session. Each module lives in `src/lib/modules/{name}/`.
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ Archived apps are excluded from the pnpm workspace.
|
||||||
| **clock** | Consolidated into Times |
|
| **clock** | Consolidated into Times |
|
||||||
| **wisekeep** | Inactive, not integrated into unified app |
|
| **wisekeep** | Inactive, not integrated into unified app |
|
||||||
|
|
||||||
**Note:** Standalone web apps (`apps/*/apps/web-archived/`) are also archived but remain within their project directories. Only the unified ManaCore web app (`apps/manacore/apps/web`) is active.
|
**Note:** Standalone web apps (`apps/*/apps/web-archived/`) are also archived but remain within their project directories. Only the unified Mana web app (`apps/mana/apps/web`) is active.
|
||||||
|
|
||||||
## Development Commands
|
## Development Commands
|
||||||
|
|
||||||
|
|
@ -136,7 +136,7 @@ pnpm setup:db:auth # Setup just auth
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Start specific project (runs all apps in project)
|
# Start specific project (runs all apps in project)
|
||||||
pnpm run manacore:dev
|
pnpm run mana:dev
|
||||||
pnpm run memoro:dev
|
pnpm run memoro:dev
|
||||||
pnpm run cards:dev
|
pnpm run cards:dev
|
||||||
pnpm run picture:dev
|
pnpm run picture:dev
|
||||||
|
|
@ -163,7 +163,7 @@ Each project has its own `CLAUDE.md` with detailed project-specific commands.
|
||||||
### Monorepo Structure
|
### Monorepo Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
manacore-monorepo/
|
mana-monorepo/
|
||||||
├── apps/ # Active SaaS product applications
|
├── apps/ # Active SaaS product applications
|
||||||
│ ├── chat/
|
│ ├── chat/
|
||||||
│ │ ├── apps/
|
│ │ ├── apps/
|
||||||
|
|
@ -290,7 +290,7 @@ Parent workspace packages (e.g., `apps/chat/package.json`, `apps/zitare/package.
|
||||||
|
|
||||||
- Hono 4.x + Bun runtime
|
- Hono 4.x + Bun runtime
|
||||||
- TypeScript, Drizzle ORM (where needed)
|
- TypeScript, Drizzle ORM (where needed)
|
||||||
- `@manacore/shared-hono` for auth middleware
|
- `@mana/shared-hono` for auth middleware
|
||||||
|
|
||||||
### Authentication Architecture
|
### Authentication Architecture
|
||||||
|
|
||||||
|
|
@ -315,15 +315,15 @@ All projects use **mana-core-auth** as the central authentication service:
|
||||||
| Component | Purpose |
|
| Component | Purpose |
|
||||||
| ------------------------------- | -------------------------------------------------- |
|
| ------------------------------- | -------------------------------------------------- |
|
||||||
| `services/mana-auth` | Central auth service (Better Auth + EdDSA JWT) |
|
| `services/mana-auth` | Central auth service (Better Auth + EdDSA JWT) |
|
||||||
| `@manacore/shared-hono` | Shared Hono middleware for JWT validation |
|
| `@mana/shared-hono` | Shared Hono middleware for JWT validation |
|
||||||
| `@manacore/shared-auth` | Client-side auth for web/mobile apps |
|
| `@mana/shared-auth` | Client-side auth for web/mobile apps |
|
||||||
|
|
||||||
#### Hono Server Auth Integration
|
#### Hono Server Auth Integration
|
||||||
|
|
||||||
All compute servers use `@manacore/shared-hono` for auth:
|
All compute servers use `@mana/shared-hono` for auth:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { authMiddleware, healthRoute, errorHandler, notFoundHandler } from '@manacore/shared-hono';
|
import { authMiddleware, healthRoute, errorHandler, notFoundHandler } from '@mana/shared-hono';
|
||||||
|
|
||||||
const app = new Hono();
|
const app = new Hono();
|
||||||
app.onError(errorHandler);
|
app.onError(errorHandler);
|
||||||
|
|
@ -342,7 +342,7 @@ app.get('/api/v1/data', (c) => {
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# All servers need this
|
# All servers need this
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
CORS_ORIGINS=http://localhost:5173
|
CORS_ORIGINS=http://localhost:5173
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -355,8 +355,8 @@ CORS_ORIGINS=http://localhost:5173
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"sid": "session-id",
|
"sid": "session-id",
|
||||||
"exp": 1764606251,
|
"exp": 1764606251,
|
||||||
"iss": "manacore",
|
"iss": "mana",
|
||||||
"aud": "manacore"
|
"aud": "mana"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -595,11 +595,11 @@ All web apps use a **local-first** data layer: reads/writes go to IndexedDB (Dex
|
||||||
|
|
||||||
### Unified IndexedDB Architecture
|
### Unified IndexedDB Architecture
|
||||||
|
|
||||||
The ManaCore unified app uses a **single IndexedDB** (`manacore`) containing all 120+ collections from all apps. Table names that collide across apps are prefixed (e.g., `todoProjects`, `cardDecks`, `presiDecks`).
|
The Mana unified app uses a **single IndexedDB** (`mana`) containing all 120+ collections from all apps. Table names that collide across apps are prefixed (e.g., `todoProjects`, `cardDecks`, `presiDecks`).
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────┐
|
||||||
│ Unified IndexedDB: "manacore" │
|
│ Unified IndexedDB: "mana" │
|
||||||
│ │
|
│ │
|
||||||
│ tasks, todoProjects, labels, ... (todo) │
|
│ tasks, todoProjects, labels, ... (todo) │
|
||||||
│ calendars, events (calendar) │
|
│ calendars, events (calendar) │
|
||||||
|
|
@ -629,9 +629,9 @@ The ManaCore unified app uses a **single IndexedDB** (`manacore`) containing all
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `apps/manacore/apps/web/src/lib/data/database.ts` | Unified Dexie DB, SYNC_APP_MAP, table name mappings, Dexie hooks |
|
| `apps/mana/apps/web/src/lib/data/database.ts` | Unified Dexie DB, SYNC_APP_MAP, table name mappings, Dexie hooks |
|
||||||
| `apps/manacore/apps/web/src/lib/data/sync.ts` | Unified sync engine (push/pull/WS per appId) |
|
| `apps/mana/apps/web/src/lib/data/sync.ts` | Unified sync engine (push/pull/WS per appId) |
|
||||||
| `apps/manacore/apps/web/src/lib/data/legacy-migration.ts` | One-time migration from old per-app DBs |
|
| `apps/mana/apps/web/src/lib/data/legacy-migration.ts` | One-time migration from old per-app DBs |
|
||||||
| `packages/local-store/` | Standalone local-store (used by individual apps, not the unified app) |
|
| `packages/local-store/` | Standalone local-store (used by individual apps, not the unified app) |
|
||||||
| `services/mana-sync/` | Go sync server (WebSocket push, field-level LWW) |
|
| `services/mana-sync/` | Go sync server (WebSocket push, field-level LWW) |
|
||||||
|
|
||||||
|
|
@ -653,7 +653,7 @@ The ManaCore unified app uses a **single IndexedDB** (`manacore`) containing all
|
||||||
|
|
||||||
### Standalone Apps (Legacy)
|
### Standalone Apps (Legacy)
|
||||||
|
|
||||||
Individual apps in `apps/*/apps/web/` still use `@manacore/local-store` with per-app IndexedDB databases (`manacore-{appId}`). When users first open the unified ManaCore app, `legacy-migration.ts` migrates data from these old DBs into the unified DB.
|
Individual apps in `apps/*/apps/web/` still use `@mana/local-store` with per-app IndexedDB databases (`mana-{appId}`). When users first open the unified Mana app, `legacy-migration.ts` migrates data from these old DBs into the unified DB.
|
||||||
|
|
||||||
### Dev Commands (Local-First Stack)
|
### Dev Commands (Local-First Stack)
|
||||||
|
|
||||||
|
|
@ -669,21 +669,21 @@ pnpm dev:todo:full # Everything incl. auth + DB setup
|
||||||
|
|
||||||
| Package | Purpose |
|
| Package | Purpose |
|
||||||
| ------------------------------- | ----------------------------------------------- |
|
| ------------------------------- | ----------------------------------------------- |
|
||||||
| `@manacore/local-store` | Local-first data layer (Dexie.js + sync engine) |
|
| `@mana/local-store` | Local-first data layer (Dexie.js + sync engine) |
|
||||||
| `@manacore/shared-hono` | Shared Hono middleware (auth, health, errors) |
|
| `@mana/shared-hono` | Shared Hono middleware (auth, health, errors) |
|
||||||
| `@manacore/shared-auth` | Client-side auth service for web/mobile apps |
|
| `@mana/shared-auth` | Client-side auth service for web/mobile apps |
|
||||||
| `@manacore/shared-storage` | S3-compatible storage (MinIO) |
|
| `@mana/shared-storage` | S3-compatible storage (MinIO) |
|
||||||
| `@manacore/shared-types` | Common TypeScript types |
|
| `@mana/shared-types` | Common TypeScript types |
|
||||||
| `@manacore/shared-utils` | Utility functions |
|
| `@mana/shared-utils` | Utility functions |
|
||||||
| `@manacore/shared-ui` | React Native UI components |
|
| `@mana/shared-ui` | React Native UI components |
|
||||||
| `@manacore/shared-theme` | Theme configuration |
|
| `@mana/shared-theme` | Theme configuration |
|
||||||
| `@manacore/shared-i18n` | Internationalization |
|
| `@mana/shared-i18n` | Internationalization |
|
||||||
|
|
||||||
Import shared packages:
|
Import shared packages:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { createAuthService } from '@manacore/shared-auth';
|
import { createAuthService } from '@mana/shared-auth';
|
||||||
import { formatDate, truncate } from '@manacore/shared-utils';
|
import { formatDate, truncate } from '@mana/shared-utils';
|
||||||
```
|
```
|
||||||
|
|
||||||
## Database Architecture (PostgreSQL)
|
## Database Architecture (PostgreSQL)
|
||||||
|
|
@ -771,7 +771,7 @@ pnpm docker:up
|
||||||
### Usage in Server
|
### Usage in Server
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { createPictureStorage, generateUserFileKey, getContentType } from '@manacore/shared-storage';
|
import { createPictureStorage, generateUserFileKey, getContentType } from '@mana/shared-storage';
|
||||||
|
|
||||||
const storage = createPictureStorage();
|
const storage = createPictureStorage();
|
||||||
|
|
||||||
|
|
@ -809,7 +809,7 @@ All landing pages are deployed to Cloudflare Pages using Direct Upload via Wrang
|
||||||
|---------|---------|-------------------|-----|
|
|---------|---------|-------------------|-----|
|
||||||
| Chat | `@chat/landing` | `chat-landing` | https://chat-landing.pages.dev |
|
| Chat | `@chat/landing` | `chat-landing` | https://chat-landing.pages.dev |
|
||||||
| Picture | `@picture/landing` | `picture-landing` | https://picture-landing.pages.dev |
|
| Picture | `@picture/landing` | `picture-landing` | https://picture-landing.pages.dev |
|
||||||
| ManaCore | `@manacore/landing` | `manacore-landing` | https://manacore-landing.pages.dev |
|
| Mana | `@mana/landing` | `mana-landing` | https://mana-landing.pages.dev |
|
||||||
| Cards | `@cards/landing` | `cards-landing` | https://cards-landing.pages.dev |
|
| Cards | `@cards/landing` | `cards-landing` | https://cards-landing.pages.dev |
|
||||||
| Zitare | `@zitare/landing` | `zitare-landing` | https://zitare-landing.pages.dev |
|
| Zitare | `@zitare/landing` | `zitare-landing` | https://zitare-landing.pages.dev |
|
||||||
|
|
||||||
|
|
@ -825,7 +825,7 @@ pnpm cf:projects:create
|
||||||
# Deploy individual landing page
|
# Deploy individual landing page
|
||||||
pnpm deploy:landing:chat
|
pnpm deploy:landing:chat
|
||||||
pnpm deploy:landing:picture
|
pnpm deploy:landing:picture
|
||||||
pnpm deploy:landing:manacore
|
pnpm deploy:landing:mana
|
||||||
pnpm deploy:landing:cards
|
pnpm deploy:landing:cards
|
||||||
pnpm deploy:landing:zitare
|
pnpm deploy:landing:zitare
|
||||||
|
|
||||||
|
|
@ -880,11 +880,11 @@ See `services/mana-landing-builder/CLAUDE.md` for full documentation.
|
||||||
|
|
||||||
## ManaScore (Production Readiness)
|
## ManaScore (Production Readiness)
|
||||||
|
|
||||||
ManaScore is the internal quality assessment system for all ManaCore apps. Each app is rated on a 0-100 scale across 8 categories plus extended metrics.
|
ManaScore is the internal quality assessment system for all Mana apps. Each app is rated on a 0-100 scale across 8 categories plus extended metrics.
|
||||||
|
|
||||||
**Location:** `apps/manacore/apps/landing/src/content/manascore/`
|
**Location:** `apps/mana/apps/landing/src/content/manascore/`
|
||||||
**Live:** https://manacore-landing.pages.dev/manascore
|
**Live:** https://mana-landing.pages.dev/manascore
|
||||||
**Methodology:** https://manacore-landing.pages.dev/manascore/about
|
**Methodology:** https://mana-landing.pages.dev/manascore/about
|
||||||
|
|
||||||
### Core Categories (8)
|
### Core Categories (8)
|
||||||
|
|
||||||
|
|
@ -941,7 +941,7 @@ Host mana-server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh mana-server # Connect to server
|
ssh mana-server # Connect to server
|
||||||
cd ~/projects/manacore-monorepo
|
cd ~/projects/mana-monorepo
|
||||||
|
|
||||||
./scripts/mac-mini/status.sh # Check all services
|
./scripts/mac-mini/status.sh # Check all services
|
||||||
./scripts/mac-mini/deploy.sh # Pull & restart containers
|
./scripts/mac-mini/deploy.sh # Pull & restart containers
|
||||||
|
|
@ -1003,7 +1003,7 @@ pnpm add <package> --filter memoro
|
||||||
pnpm add <package> --filter @memoro/mobile
|
pnpm add <package> --filter @memoro/mobile
|
||||||
|
|
||||||
# Add to shared package
|
# Add to shared package
|
||||||
pnpm add <package> --filter @manacore/shared-utils
|
pnpm add <package> --filter @mana/shared-utils
|
||||||
```
|
```
|
||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
@ -1059,7 +1059,7 @@ PUBLIC_SUPABASE_ANON_KEY=...
|
||||||
```
|
```
|
||||||
PORT=...
|
PORT=...
|
||||||
DATABASE_URL=...
|
DATABASE_URL=...
|
||||||
MANA_CORE_AUTH_URL=...
|
MANA_AUTH_URL=...
|
||||||
```
|
```
|
||||||
|
|
||||||
## Project-Specific Documentation
|
## Project-Specific Documentation
|
||||||
|
|
@ -1070,7 +1070,7 @@ MANA_CORE_AUTH_URL=...
|
||||||
|
|
||||||
Each project has its own `CLAUDE.md` with detailed information:
|
Each project has its own `CLAUDE.md` with detailed information:
|
||||||
|
|
||||||
- `apps/manacore/CLAUDE.md` - Multi-app ecosystem, auth details
|
- `apps/mana/CLAUDE.md` - Multi-app ecosystem, auth details
|
||||||
- `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
|
||||||
|
|
|
||||||
|
|
@ -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 | ManaCore, 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 |
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "@manacore/api",
|
"name": "@mana/api",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
@ -10,9 +10,9 @@
|
||||||
"type-check": "tsc --noEmit"
|
"type-check": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@manacore/media-client": "workspace:*",
|
"@mana/media-client": "workspace:*",
|
||||||
"@manacore/shared-hono": "workspace:*",
|
"@mana/shared-hono": "workspace:*",
|
||||||
"@manacore/shared-storage": "workspace:*",
|
"@mana/shared-storage": "workspace:*",
|
||||||
"@mozilla/readability": "^0.5.0",
|
"@mozilla/readability": "^0.5.0",
|
||||||
"drizzle-orm": "^0.38.0",
|
"drizzle-orm": "^0.38.0",
|
||||||
"hono": "^4.7.0",
|
"hono": "^4.7.0",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* ManaCore Unified API Server
|
* Mana Unified API Server
|
||||||
*
|
*
|
||||||
* Consolidates all app compute servers into one Hono/Bun process.
|
* Consolidates all app compute servers into one Hono/Bun process.
|
||||||
* Each module registers its routes under /api/v1/{module}/*.
|
* Each module registers its routes under /api/v1/{module}/*.
|
||||||
|
|
@ -13,7 +13,7 @@ import {
|
||||||
errorHandler,
|
errorHandler,
|
||||||
notFoundHandler,
|
notFoundHandler,
|
||||||
rateLimitMiddleware,
|
rateLimitMiddleware,
|
||||||
} from '@manacore/shared-hono';
|
} from '@mana/shared-hono';
|
||||||
|
|
||||||
// Module routes
|
// Module routes
|
||||||
import { calendarRoutes } from './modules/calendar/routes';
|
import { calendarRoutes } from './modules/calendar/routes';
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
* for CAS deduplication, thumbnail generation, and Photos gallery visibility.
|
* for CAS deduplication, thumbnail generation, and Photos gallery visibility.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { MediaClient, type MediaResult } from '@manacore/media-client';
|
import { MediaClient, type MediaResult } from '@mana/media-client';
|
||||||
|
|
||||||
const MEDIA_URL = process.env.MANA_MEDIA_URL || 'http://localhost:3015';
|
const MEDIA_URL = process.env.MANA_MEDIA_URL || 'http://localhost:3015';
|
||||||
let client: MediaClient | null = null;
|
let client: MediaClient | null = null;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { streamSSE } from 'hono/streaming';
|
import { streamSSE } from 'hono/streaming';
|
||||||
import { consumeCredits, validateCredits } from '@manacore/shared-hono/credits';
|
import { consumeCredits, validateCredits } from '@mana/shared-hono/credits';
|
||||||
|
|
||||||
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ routes.post('/:id/avatar', async (c) => {
|
||||||
if (file.type === 'image/svg+xml') {
|
if (file.type === 'image/svg+xml') {
|
||||||
// SVGs stay on shared-storage (Sharp can't process SVG)
|
// SVGs stay on shared-storage (Sharp can't process SVG)
|
||||||
const { createContactsStorage, generateUserFileKey } = await import(
|
const { createContactsStorage, generateUserFileKey } = await import(
|
||||||
'@manacore/shared-storage'
|
'@mana/shared-storage'
|
||||||
);
|
);
|
||||||
const storage = createContactsStorage();
|
const storage = createContactsStorage();
|
||||||
const key = generateUserFileKey(userId, `avatar-${c.req.param('id')}.svg`);
|
const key = generateUserFileKey(userId, `avatar-${c.req.param('id')}.svg`);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { consumeCredits, validateCredits } from '@manacore/shared-hono/credits';
|
import { consumeCredits, validateCredits } from '@mana/shared-hono/credits';
|
||||||
|
|
||||||
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ routes.post('/songs/upload', async (c) => {
|
||||||
const key = `users/${userId}/songs/${songId}/${filename}`;
|
const key = `users/${userId}/songs/${songId}/${filename}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||||
const storage = createMusicStorage();
|
const storage = createMusicStorage();
|
||||||
const uploadUrl = await storage.getUploadUrl(key, { expiresIn: 3600 });
|
const uploadUrl = await storage.getUploadUrl(key, { expiresIn: 3600 });
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ routes.get('/songs/:id/download-url', async (c) => {
|
||||||
if (!storagePath) return c.json({ error: 'storagePath required' }, 400);
|
if (!storagePath) return c.json({ error: 'storagePath required' }, 400);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||||
const storage = createMusicStorage();
|
const storage = createMusicStorage();
|
||||||
const url = await storage.getDownloadUrl(storagePath, { expiresIn: 3600 });
|
const url = await storage.getDownloadUrl(storagePath, { expiresIn: 3600 });
|
||||||
return c.json({ url });
|
return c.json({ url });
|
||||||
|
|
@ -83,7 +83,7 @@ routes.get('/songs/:id/cover-url', async (c) => {
|
||||||
if (!coverArtPath) return c.json({ url: null });
|
if (!coverArtPath) return c.json({ url: null });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||||
const storage = createMusicStorage();
|
const storage = createMusicStorage();
|
||||||
const url = await storage.getDownloadUrl(coverArtPath, { expiresIn: 3600 });
|
const url = await storage.getDownloadUrl(coverArtPath, { expiresIn: 3600 });
|
||||||
return c.json({ url });
|
return c.json({ url });
|
||||||
|
|
@ -99,7 +99,7 @@ routes.post('/library/cover-urls', async (c) => {
|
||||||
if (!paths?.length) return c.json({ urls: {} });
|
if (!paths?.length) return c.json({ urls: {} });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||||
const storage = createMusicStorage();
|
const storage = createMusicStorage();
|
||||||
const urls: Record<string, string> = {};
|
const urls: Record<string, string> = {};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ import { sql } from 'drizzle-orm';
|
||||||
// ─── DB Connection (reads from sync_changes for feed) ───────
|
// ─── DB Connection (reads from sync_changes for feed) ───────
|
||||||
|
|
||||||
const DATABASE_URL =
|
const DATABASE_URL =
|
||||||
process.env.DATABASE_URL ?? 'postgresql://manacore:devpassword@localhost:5432/mana_sync';
|
process.env.DATABASE_URL ?? 'postgresql://mana:devpassword@localhost:5432/mana_sync';
|
||||||
|
|
||||||
const connection = postgres(DATABASE_URL, { max: 10 });
|
const connection = postgres(DATABASE_URL, { max: 10 });
|
||||||
const db = drizzle(connection);
|
const db = drizzle(connection);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { consumeCredits, validateCredits } from '@manacore/shared-hono/credits';
|
import { consumeCredits, validateCredits } from '@mana/shared-hono/credits';
|
||||||
|
|
||||||
const REPLICATE_TOKEN = process.env.REPLICATE_API_TOKEN || '';
|
const REPLICATE_TOKEN = process.env.REPLICATE_API_TOKEN || '';
|
||||||
const IMAGE_GEN_URL = process.env.MANA_IMAGE_GEN_URL || '';
|
const IMAGE_GEN_URL = process.env.MANA_IMAGE_GEN_URL || '';
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { eq, and, gt, or, isNull, asc } from 'drizzle-orm';
|
import { eq, and, gt, or, isNull, asc } from 'drizzle-orm';
|
||||||
import { HTTPException } from 'hono/http-exception';
|
import { HTTPException } from 'hono/http-exception';
|
||||||
import { authMiddleware } from '@manacore/shared-hono/auth';
|
import { authMiddleware } from '@mana/shared-hono/auth';
|
||||||
import { drizzle } from 'drizzle-orm/postgres-js';
|
import { drizzle } from 'drizzle-orm/postgres-js';
|
||||||
import postgres from 'postgres';
|
import postgres from 'postgres';
|
||||||
import {
|
import {
|
||||||
|
|
@ -27,7 +27,7 @@ import { relations } from 'drizzle-orm';
|
||||||
// ─── DB Schema (read-only for share lookups) ────────────────
|
// ─── DB Schema (read-only for share lookups) ────────────────
|
||||||
|
|
||||||
const DATABASE_URL =
|
const DATABASE_URL =
|
||||||
process.env.DATABASE_URL ?? 'postgresql://manacore:devpassword@localhost:5432/mana_platform';
|
process.env.DATABASE_URL ?? 'postgresql://mana:devpassword@localhost:5432/mana_platform';
|
||||||
|
|
||||||
const presiSchema = pgSchema('presi');
|
const presiSchema = pgSchema('presi');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ routes.post('/files/upload', async (c) => {
|
||||||
|
|
||||||
// Non-images -> shared-storage as before
|
// Non-images -> shared-storage as before
|
||||||
const { createStorageStorage, generateUserFileKey, getContentType } = await import(
|
const { createStorageStorage, generateUserFileKey, getContentType } = await import(
|
||||||
'@manacore/shared-storage'
|
'@mana/shared-storage'
|
||||||
);
|
);
|
||||||
const storage = createStorageStorage();
|
const storage = createStorageStorage();
|
||||||
const key = generateUserFileKey(userId, file.name);
|
const key = generateUserFileKey(userId, file.name);
|
||||||
|
|
@ -83,7 +83,7 @@ routes.get('/files/:id/download', async (c) => {
|
||||||
if (!storagePath) return c.json({ error: 'storagePath required' }, 400);
|
if (!storagePath) return c.json({ error: 'storagePath required' }, 400);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createStorageStorage } = await import('@manacore/shared-storage');
|
const { createStorageStorage } = await import('@mana/shared-storage');
|
||||||
const storage = createStorageStorage();
|
const storage = createStorageStorage();
|
||||||
|
|
||||||
if (urlOnly) {
|
if (urlOnly) {
|
||||||
|
|
@ -114,7 +114,7 @@ routes.post('/files/:id/versions', async (c) => {
|
||||||
if (!file) return c.json({ error: 'No file' }, 400);
|
if (!file) return c.json({ error: 'No file' }, 400);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { createStorageStorage, generateUserFileKey } = await import('@manacore/shared-storage');
|
const { createStorageStorage, generateUserFileKey } = await import('@mana/shared-storage');
|
||||||
const storage = createStorageStorage();
|
const storage = createStorageStorage();
|
||||||
const key = generateUserFileKey(userId, `v-${Date.now()}-${file.name}`);
|
const key = generateUserFileKey(userId, `v-${Date.now()}-${file.name}`);
|
||||||
const buffer = Buffer.from(await file.arrayBuffer());
|
const buffer = Buffer.from(await file.arrayBuffer());
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import { z } from 'zod';
|
||||||
import { eq, and, asc, sql } from 'drizzle-orm';
|
import { eq, and, asc, sql } from 'drizzle-orm';
|
||||||
import { drizzle } from 'drizzle-orm/postgres-js';
|
import { drizzle } from 'drizzle-orm/postgres-js';
|
||||||
import postgres from 'postgres';
|
import postgres from 'postgres';
|
||||||
import { serviceAuthMiddleware } from '@manacore/shared-hono';
|
import { serviceAuthMiddleware } from '@mana/shared-hono';
|
||||||
import {
|
import {
|
||||||
pgSchema,
|
pgSchema,
|
||||||
uuid,
|
uuid,
|
||||||
|
|
@ -34,7 +34,7 @@ import {
|
||||||
// ─── DB Schema (minimal, server-only) ──────────────────────
|
// ─── DB Schema (minimal, server-only) ──────────────────────
|
||||||
|
|
||||||
const DATABASE_URL =
|
const DATABASE_URL =
|
||||||
process.env.DATABASE_URL ?? 'postgresql://manacore:devpassword@localhost:5432/mana_platform';
|
process.env.DATABASE_URL ?? 'postgresql://mana:devpassword@localhost:5432/mana_platform';
|
||||||
|
|
||||||
const todoSchema = pgSchema('todo');
|
const todoSchema = pgSchema('todo');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import {
|
||||||
// ─── DB Schema ──────────────────────────────────────────────
|
// ─── DB Schema ──────────────────────────────────────────────
|
||||||
|
|
||||||
const DATABASE_URL =
|
const DATABASE_URL =
|
||||||
process.env.DATABASE_URL ?? 'postgresql://manacore:devpassword@localhost:5432/mana_platform';
|
process.env.DATABASE_URL ?? 'postgresql://mana:devpassword@localhost:5432/mana_platform';
|
||||||
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
const LLM_URL = process.env.MANA_LLM_URL || 'http://localhost:3025';
|
||||||
|
|
||||||
const tracesSchema = pgSchema('traces');
|
const tracesSchema = pgSchema('traces');
|
||||||
|
|
|
||||||
|
|
@ -407,7 +407,7 @@ FREQ=WEEKLY;UNTIL=20241231T235959Z # Wöchentlich bis Ende 2024
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3014
|
PORT=3014
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/calendar
|
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/calendar
|
||||||
MANA_CORE_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
|
||||||
|
|
||||||
# Notifications (optional)
|
# Notifications (optional)
|
||||||
|
|
@ -420,14 +420,14 @@ EMAIL_FROM=calendar@mana.how
|
||||||
|
|
||||||
```env
|
```env
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3014
|
PUBLIC_BACKEND_URL=http://localhost:3014
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
### Mobile (.env)
|
### Mobile (.env)
|
||||||
|
|
||||||
```env
|
```env
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3014
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3014
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
## Shared Packages
|
## Shared Packages
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.0",
|
"@astrojs/check": "^0.9.0",
|
||||||
"@manacore/shared-landing-ui": "workspace:*",
|
"@mana/shared-landing-ui": "workspace:*",
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"typescript": "^5.9.2"
|
"typescript": "^5.9.2"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import '../styles/global.css';
|
import '../styles/global.css';
|
||||||
import Analytics from '@manacore/shared-landing-ui/atoms/Analytics.astro';
|
import Analytics from '@mana/shared-landing-ui/atoms/Analytics.astro';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@ import Footer from '@components/Footer.astro';
|
||||||
let StepsSection: any = null;
|
let StepsSection: any = null;
|
||||||
let PricingSection: any = null;
|
let PricingSection: any = null;
|
||||||
try {
|
try {
|
||||||
const shared = await import('@manacore/shared-landing-ui/sections/StepsSection.astro');
|
const shared = await import('@mana/shared-landing-ui/sections/StepsSection.astro');
|
||||||
StepsSection = shared.default;
|
StepsSection = shared.default;
|
||||||
} catch {
|
} catch {
|
||||||
// Shared component not available
|
// Shared component not available
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const shared = await import('@manacore/shared-landing-ui/sections/PricingSection.astro');
|
const shared = await import('@mana/shared-landing-ui/sections/PricingSection.astro');
|
||||||
PricingSection = shared.default;
|
PricingSection = shared.default;
|
||||||
} catch {
|
} catch {
|
||||||
// Shared component not available
|
// Shared component not available
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ SERVICE_KEY=your-service-key-from-mana-core
|
||||||
|
|
||||||
**backend/src/app.module.ts**:
|
**backend/src/app.module.ts**:
|
||||||
```typescript
|
```typescript
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
serviceKey: configService.get<string>('SERVICE_KEY', ''),
|
serviceKey: configService.get<string>('SERVICE_KEY', ''),
|
||||||
|
|
|
||||||
|
|
@ -46,12 +46,12 @@ Use this checklist when integrating `@mana-core/nestjs-integration` into a new N
|
||||||
|
|
||||||
### 3. Module Configuration
|
### 3. Module Configuration
|
||||||
|
|
||||||
- [ ] Import `ManaCoreModule` in `app.module.ts`
|
- [ ] Import `ManaModule` in `app.module.ts`
|
||||||
|
|
||||||
- [ ] Configure with `forRootAsync()`:
|
- [ ] Configure with `forRootAsync()`:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
manaServiceUrl: 'your-mana-url',
|
manaServiceUrl: 'your-mana-url',
|
||||||
|
|
|
||||||
|
|
@ -123,12 +123,12 @@ SIGNUP_REDIRECT_URL=https://yourapp.com/welcome
|
||||||
|
|
||||||
### Step 2: Import and Configure the Module
|
### Step 2: Import and Configure the Module
|
||||||
|
|
||||||
In your `app.module.ts`, import and configure `ManaCoreModule`:
|
In your `app.module.ts`, import and configure `ManaModule`:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -139,7 +139,7 @@ import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Mana Core Module - async configuration
|
// Mana Core Module - async configuration
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
// Required: Mana service URL
|
// Required: Mana service URL
|
||||||
|
|
@ -898,7 +898,7 @@ describe('CharacterController', () => {
|
||||||
Test with the Mana Core module:
|
Test with the Mana Core module:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
|
|
||||||
describe('CharacterController (e2e)', () => {
|
describe('CharacterController (e2e)', () => {
|
||||||
let app: INestApplication;
|
let app: INestApplication;
|
||||||
|
|
@ -910,7 +910,7 @@ describe('CharacterController (e2e)', () => {
|
||||||
isGlobal: true,
|
isGlobal: true,
|
||||||
envFilePath: '.env.test',
|
envFilePath: '.env.test',
|
||||||
}),
|
}),
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
||||||
|
|
@ -1028,7 +1028,7 @@ console.log('Device info:', deviceInfo);
|
||||||
Enable debug mode to see detailed logs:
|
Enable debug mode to see detailed logs:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (configService: ConfigService) => ({
|
useFactory: (configService: ConfigService) => ({
|
||||||
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,11 @@ EXPO_PUBLIC_STORYTELLER_BACKEND_URL=http://localhost:3002
|
||||||
|
|
||||||
**`backend/src/app.module.ts`**:
|
**`backend/src/app.module.ts`**:
|
||||||
```typescript
|
```typescript
|
||||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ManaCoreModule.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-core-middleware-111768794939.europe-west3.run.app',
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
Your Mana Core integration is now **100% complete** with a fully functional credit system! 🎉
|
Your Mana Core integration is now **100% complete** with a fully functional credit system! 🎉
|
||||||
|
|
||||||
### ✅ Backend (Complete)
|
### ✅ Backend (Complete)
|
||||||
- [x] ManaCoreModule configured with environment variables
|
- [x] ManaModule configured with environment variables
|
||||||
- [x] Service key configuration for credit operations
|
- [x] Service key configuration for credit operations
|
||||||
- [x] Credit operation types defined (deck creation = 10 mana)
|
- [x] Credit operation types defined (deck creation = 10 mana)
|
||||||
- [x] Credit validation before deck creation
|
- [x] Credit validation before deck creation
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ export default defineConfig({
|
||||||
integrations: [tailwind(), sitemap()],
|
integrations: [tailwind(), sitemap()],
|
||||||
vite: {
|
vite: {
|
||||||
ssr: {
|
ssr: {
|
||||||
noExternal: ['@manacore/shared-landing-ui'],
|
noExternal: ['@mana/shared-landing-ui'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.0",
|
"@astrojs/check": "^0.9.0",
|
||||||
"@astrojs/sitemap": "^3.2.1",
|
"@astrojs/sitemap": "^3.2.1",
|
||||||
"@manacore/shared-landing-ui": "workspace:*",
|
"@mana/shared-landing-ui": "workspace:*",
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import '../styles/global.css';
|
import '../styles/global.css';
|
||||||
import Analytics from '@manacore/shared-landing-ui/atoms/Analytics.astro';
|
import Analytics from '@mana/shared-landing-ui/atoms/Analytics.astro';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Cookie-Richtlinie - Cards">
|
<Layout title="Cookie-Richtlinie - Cards">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Impressum - Cards">
|
<Layout title="Impressum - Cards">
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,13 @@ import Navigation from '../components/Navigation.astro';
|
||||||
import Footer from '../components/Footer.astro';
|
import Footer from '../components/Footer.astro';
|
||||||
|
|
||||||
// Shared components
|
// Shared components
|
||||||
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
|
import HeroSection from '@mana/shared-landing-ui/sections/HeroSection.astro';
|
||||||
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
|
import FeatureSection from '@mana/shared-landing-ui/sections/FeatureSection.astro';
|
||||||
import StepsSection from '@manacore/shared-landing-ui/sections/StepsSection.astro';
|
import StepsSection from '@mana/shared-landing-ui/sections/StepsSection.astro';
|
||||||
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
|
import FAQSection from '@mana/shared-landing-ui/sections/FAQSection.astro';
|
||||||
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
|
import CTASection from '@mana/shared-landing-ui/sections/CTASection.astro';
|
||||||
import PricingSection from '@manacore/shared-landing-ui/sections/PricingSection.astro';
|
import PricingSection from '@mana/shared-landing-ui/sections/PricingSection.astro';
|
||||||
import Card from '@manacore/shared-landing-ui/atoms/Card.astro';
|
import Card from '@mana/shared-landing-ui/atoms/Card.astro';
|
||||||
|
|
||||||
// Feature data
|
// Feature data
|
||||||
const features = [
|
const features = [
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import Navigation from '../components/Navigation.astro';
|
import Navigation from '../components/Navigation.astro';
|
||||||
import Footer from '../components/Footer.astro';
|
import Footer from '../components/Footer.astro';
|
||||||
import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricingSection.astro';
|
import ManaPricingSection from '@mana/shared-landing-ui/sections/ManaPricingSection.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout
|
<Layout
|
||||||
|
|
@ -15,7 +15,7 @@ import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricing
|
||||||
<ManaPricingSection
|
<ManaPricingSection
|
||||||
showOneTime={true}
|
showOneTime={true}
|
||||||
showTrustIndicators={true}
|
showTrustIndicators={true}
|
||||||
ctaBaseUrl="https://app.manacore.io/register"
|
ctaBaseUrl="https://app.mana.io/register"
|
||||||
/>
|
/>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Datenschutzerklärung - Cards">
|
<Layout title="Datenschutzerklärung - Cards">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Nutzungsbedingungen - Cards">
|
<Layout title="Nutzungsbedingungen - Cards">
|
||||||
|
|
|
||||||
|
|
@ -4,5 +4,5 @@
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3000
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3000
|
||||||
|
|
||||||
# Mana Core Auth
|
# Mana Core Auth
|
||||||
EXPO_PUBLIC_MANA_MIDDLEWARE_URL=https://api.manacore.de
|
EXPO_PUBLIC_MANA_MIDDLEWARE_URL=https://api.mana.de
|
||||||
EXPO_PUBLIC_MIDDLEWARE_APP_ID=cards
|
EXPO_PUBLIC_MIDDLEWARE_APP_ID=cards
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Uses Expo Router v5 with file-based routing:
|
||||||
### Backend Integration
|
### Backend Integration
|
||||||
|
|
||||||
- NestJS backend at port 3009 (`@mana-core/nestjs-integration`)
|
- NestJS backend at port 3009 (`@mana-core/nestjs-integration`)
|
||||||
- Environment variable: `EXPO_PUBLIC_MANA_CORE_AUTH_URL`
|
- Environment variable: `EXPO_PUBLIC_MANA_AUTH_URL`
|
||||||
|
|
||||||
### TypeScript Configuration
|
### TypeScript Configuration
|
||||||
|
|
||||||
|
|
@ -119,7 +119,7 @@ For new screens:
|
||||||
Create a `.env` or `.env.local` file:
|
Create a `.env` or `.env.local` file:
|
||||||
|
|
||||||
```
|
```
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3009
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3009
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@manacore/eslint-config';
|
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@mana/eslint-config';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
"web": "expo start --web"
|
"web": "expo start --web"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@manacore/shared-auth": "workspace:*",
|
"@mana/shared-auth": "workspace:*",
|
||||||
"@expo/ui": "~0.2.0-beta.6",
|
"@expo/ui": "~0.2.0-beta.6",
|
||||||
"@expo/vector-icons": "^15.0.2",
|
"@expo/vector-icons": "^15.0.2",
|
||||||
"@react-native-async-storage/async-storage": "2.2.0",
|
"@react-native-async-storage/async-storage": "2.2.0",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/**
|
/**
|
||||||
* Mana Core Authentication Service
|
* Mana Core Authentication Service
|
||||||
* Uses @manacore/shared-auth for unified auth across all apps
|
* Uses @mana/shared-auth for unified auth across all apps
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Platform } from 'react-native';
|
import { Platform } from 'react-native';
|
||||||
|
|
@ -14,11 +14,11 @@ import {
|
||||||
isTokenValidLocally as sharedIsTokenValidLocally,
|
isTokenValidLocally as sharedIsTokenValidLocally,
|
||||||
getUserFromToken as sharedGetUserFromToken,
|
getUserFromToken as sharedGetUserFromToken,
|
||||||
decodeToken as sharedDecodeToken,
|
decodeToken as sharedDecodeToken,
|
||||||
} from '@manacore/shared-auth';
|
} from '@mana/shared-auth';
|
||||||
import type { ManaUser, JwtPayload } from '../types/auth';
|
import type { ManaUser, JwtPayload } from '../types/auth';
|
||||||
|
|
||||||
// Mana Core Auth URL
|
// Mana Core Auth URL
|
||||||
const AUTH_URL = process.env.EXPO_PUBLIC_MANA_CORE_AUTH_URL || 'http://localhost:3001';
|
const AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// --- Adapters ---
|
// --- Adapters ---
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ export const authService = {
|
||||||
_username?: string
|
_username?: string
|
||||||
): Promise<{ success: boolean; user?: ManaUser; error?: string }> => {
|
): Promise<{ success: boolean; user?: ManaUser; error?: string }> => {
|
||||||
try {
|
try {
|
||||||
// TODO: username is not supported by mana-core-auth signUp - add profile update after registration
|
// TODO: username is not supported by mana-auth signUp - add profile update after registration
|
||||||
const result = await _sharedAuth.signUp(email, password);
|
const result = await _sharedAuth.signUp(email, password);
|
||||||
if (!result.success) {
|
if (!result.success) {
|
||||||
return { success: false, error: result.error || 'Sign up failed' };
|
return { success: false, error: result.error || 'Sign up failed' };
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
/**
|
/**
|
||||||
* Token Manager - wraps @manacore/shared-auth TokenManager
|
* Token Manager - wraps @mana/shared-auth TokenManager
|
||||||
* Maintains backward-compatible API for existing consumers
|
* Maintains backward-compatible API for existing consumers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { _sharedTokenManager } from './authService';
|
import { _sharedTokenManager } from './authService';
|
||||||
export { TokenState } from '@manacore/shared-auth';
|
export { TokenState } from '@mana/shared-auth';
|
||||||
|
|
||||||
type TokenStateObserver = (state: string, token?: string | null) => void;
|
type TokenStateObserver = (state: string, token?: string | null) => void;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,8 +147,8 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||||
const user = get().user;
|
const user = get().user;
|
||||||
if (!user) throw new Error('No user logged in');
|
if (!user) throw new Error('No user logged in');
|
||||||
|
|
||||||
// TODO: Implement profile update via mana-core-auth API
|
// TODO: Implement profile update via mana-auth API
|
||||||
console.warn('Profile update not yet implemented via mana-core-auth API');
|
console.warn('Profile update not yet implemented via mana-auth API');
|
||||||
|
|
||||||
set({
|
set({
|
||||||
user: {
|
user: {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Logger utility - re-exports from shared package
|
* Logger utility - re-exports from shared package
|
||||||
* @see @manacore/shared-logger
|
* @see @mana/shared-logger
|
||||||
*/
|
*/
|
||||||
export { debug, info, warn, error, log, logger } from '@manacore/shared-logger';
|
export { debug, info, warn, error, log, logger } from '@mana/shared-logger';
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ LLM_TIMEOUT=120000 # Timeout in ms (default: 120s)
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Server
|
# Server
|
||||||
PORT=3002
|
PORT=3002
|
||||||
|
|
@ -115,14 +115,14 @@ PORT=3002
|
||||||
#### Mobile (.env)
|
#### Mobile (.env)
|
||||||
|
|
||||||
```env
|
```env
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Web (.env)
|
#### Web (.env)
|
||||||
|
|
||||||
```env
|
```env
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -173,7 +173,7 @@ pnpm --filter @chat/server db:add-local-models
|
||||||
```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://manacore:devpassword@localhost:5432/chat
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
PORT=3002
|
PORT=3002
|
||||||
```
|
```
|
||||||
3. **Start services**:
|
3. **Start services**:
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
- 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)
|
||||||
- Added MANA_CORE_AUTH_URL environment variable
|
- Added MANA_AUTH_URL environment variable
|
||||||
- Changed PORT from 3001 to 3002 (to avoid conflict with auth service)
|
- Changed PORT from 3001 to 3002 (to avoid conflict with auth service)
|
||||||
|
|
||||||
**Key Features:**
|
**Key Features:**
|
||||||
|
|
@ -73,7 +73,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
- Added `initializeWebAuth()` initialization
|
- Added `initializeWebAuth()` initialization
|
||||||
- Added `getCredits()` method for credit balance
|
- Added `getCredits()` method for credit balance
|
||||||
- Added `getAccessToken()` method for API calls
|
- Added `getAccessToken()` method for API calls
|
||||||
- Added MANA_CORE_AUTH_URL environment variable
|
- Added MANA_AUTH_URL environment variable
|
||||||
|
|
||||||
**API Compatibility:**
|
**API Compatibility:**
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
- Created React Native device adapter
|
- Created React Native device adapter
|
||||||
- Created React Native network adapter
|
- Created React Native network adapter
|
||||||
- Removed Supabase auth dependencies
|
- Removed Supabase auth dependencies
|
||||||
- Added MANA_CORE_AUTH_URL environment variable
|
- Added MANA_AUTH_URL environment variable
|
||||||
|
|
||||||
**Key Features:**
|
**Key Features:**
|
||||||
|
|
||||||
|
|
@ -119,7 +119,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
||||||
# PORT=3001
|
# PORT=3001
|
||||||
|
|
||||||
# NEW (Add):
|
# NEW (Add):
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
PORT=3002
|
PORT=3002
|
||||||
|
|
||||||
# Keep (for database):
|
# Keep (for database):
|
||||||
|
|
@ -136,7 +136,7 @@ SUPABASE_SERVICE_KEY=your-service-key-here
|
||||||
# PUBLIC_BACKEND_URL=http://localhost:3001
|
# PUBLIC_BACKEND_URL=http://localhost:3001
|
||||||
|
|
||||||
# NEW (Add):
|
# NEW (Add):
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
|
|
||||||
# Keep (for database):
|
# Keep (for database):
|
||||||
|
|
@ -153,7 +153,7 @@ PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
||||||
# EXPO_PUBLIC_BACKEND_URL=http://localhost:3001
|
# EXPO_PUBLIC_BACKEND_URL=http://localhost:3001
|
||||||
|
|
||||||
# NEW (Add):
|
# NEW (Add):
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
|
|
||||||
# Keep (for database):
|
# Keep (for database):
|
||||||
|
|
@ -182,7 +182,7 @@ Service runs on: `http://localhost:3001`
|
||||||
cd chat/backend
|
cd chat/backend
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# Edit .env:
|
# Edit .env:
|
||||||
# - Add MANA_CORE_AUTH_URL=http://localhost:3001
|
# - Add MANA_AUTH_URL=http://localhost:3001
|
||||||
# - Change PORT=3002
|
# - Change PORT=3002
|
||||||
pnpm start:dev
|
pnpm start:dev
|
||||||
```
|
```
|
||||||
|
|
@ -195,7 +195,7 @@ Service runs on: `http://localhost:3002`
|
||||||
cd chat/apps/web
|
cd chat/apps/web
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# Edit .env:
|
# Edit .env:
|
||||||
# - Add PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
# - Add PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
# - Change PUBLIC_BACKEND_URL=http://localhost:3002
|
# - Change PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
pnpm dev
|
pnpm dev
|
||||||
```
|
```
|
||||||
|
|
@ -208,7 +208,7 @@ App runs on: `http://localhost:5173`
|
||||||
cd chat/apps/mobile
|
cd chat/apps/mobile
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# Edit .env:
|
# Edit .env:
|
||||||
# - Add EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
# - Add EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
# - Change EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
# - Change EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
pnpm dev
|
pnpm dev
|
||||||
```
|
```
|
||||||
|
|
@ -326,10 +326,10 @@ CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
||||||
|
|
||||||
### Issue: Backend can't validate tokens
|
### Issue: Backend can't validate tokens
|
||||||
|
|
||||||
**Solution:** Check MANA_CORE_AUTH_URL in backend .env
|
**Solution:** Check MANA_AUTH_URL in backend .env
|
||||||
|
|
||||||
```env
|
```env
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -387,7 +387,7 @@ MANA_CORE_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
## 📖 Documentation
|
## 📖 Documentation
|
||||||
|
|
||||||
- **Integration Guide:** `/chat/MANA_CORE_AUTH_INTEGRATION.md`
|
- **Integration Guide:** `/chat/MANA_AUTH_INTEGRATION.md`
|
||||||
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
||||||
- **Quick Start:** `/mana-core-auth/QUICKSTART.md`
|
- **Quick Start:** `/mana-core-auth/QUICKSTART.md`
|
||||||
- **Master Plan:** `/.hive-mind/MASTER_PLAN_CENTRAL_AUTH_SYSTEM.md`
|
- **Master Plan:** `/.hive-mind/MASTER_PLAN_CENTRAL_AUTH_SYSTEM.md`
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ The `@manacore/shared-auth` package has been updated to work with Mana Core Auth
|
||||||
# SUPABASE_SERVICE_KEY=...
|
# SUPABASE_SERVICE_KEY=...
|
||||||
|
|
||||||
# Add Mana Core Auth URL
|
# Add Mana Core Auth URL
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Web App `.env`
|
#### Web App `.env`
|
||||||
|
|
@ -68,7 +68,7 @@ MANA_CORE_AUTH_URL=http://localhost:3001
|
||||||
# PUBLIC_SUPABASE_ANON_KEY=...
|
# PUBLIC_SUPABASE_ANON_KEY=...
|
||||||
|
|
||||||
# Add
|
# Add
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Mobile App `.env`
|
#### Mobile App `.env`
|
||||||
|
|
@ -79,7 +79,7 @@ PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||||
# EXPO_PUBLIC_SUPABASE_ANON_KEY=...
|
# EXPO_PUBLIC_SUPABASE_ANON_KEY=...
|
||||||
|
|
||||||
# Add
|
# Add
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 2: Update Backend (NestJS)
|
### Step 2: Update Backend (NestJS)
|
||||||
|
|
@ -115,7 +115,7 @@ export class JwtAuthGuard implements CanActivate {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Get public key from Mana Core Auth
|
// Get public key from Mana Core Auth
|
||||||
const authUrl = this.configService.get<string>('MANA_CORE_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',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
|
@ -179,7 +179,7 @@ Edit `chat/apps/web/src/lib/stores/auth.svelte.ts`:
|
||||||
```typescript
|
```typescript
|
||||||
import { initializeWebAuth } from '@manacore/shared-auth';
|
import { initializeWebAuth } from '@manacore/shared-auth';
|
||||||
|
|
||||||
const MANA_AUTH_URL = import.meta.env.PUBLIC_MANA_CORE_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 Core Auth
|
||||||
const { authService, tokenManager } = initializeWebAuth({
|
const { authService, tokenManager } = initializeWebAuth({
|
||||||
|
|
@ -248,7 +248,7 @@ export const handle: Handle = async ({ event, resolve }) => {
|
||||||
if (token) {
|
if (token) {
|
||||||
try {
|
try {
|
||||||
// Validate token with Mana Core Auth
|
// Validate token with Mana Core Auth
|
||||||
const authUrl = process.env.PUBLIC_MANA_CORE_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',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
|
@ -293,7 +293,7 @@ import {
|
||||||
} from '@manacore/shared-auth';
|
} from '@manacore/shared-auth';
|
||||||
import { createSecureStoreAdapter } from '@manacore/shared-auth/native'; // You may need to create this
|
import { createSecureStoreAdapter } from '@manacore/shared-auth/native'; // You may need to create this
|
||||||
|
|
||||||
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_CORE_AUTH_URL || 'http://localhost:3001';
|
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// Initialize auth service
|
// Initialize auth service
|
||||||
const authService = createAuthService({ baseUrl: MANA_AUTH_URL });
|
const authService = createAuthService({ baseUrl: MANA_AUTH_URL });
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ 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 Core Auth (NEW)
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Supabase (for database, not auth)
|
# Supabase (for database, not auth)
|
||||||
SUPABASE_URL=https://your-project.supabase.co
|
SUPABASE_URL=https://your-project.supabase.co
|
||||||
|
|
@ -116,7 +116,7 @@ Edit `chat/apps/web/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Mana Core Auth (NEW)
|
# Mana Core Auth (NEW)
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Backend API (NEW PORT)
|
# Backend API (NEW PORT)
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
|
|
@ -137,7 +137,7 @@ Edit `chat/apps/mobile/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Mana Core Auth (NEW)
|
# Mana Core Auth (NEW)
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Backend API (NEW PORT)
|
# Backend API (NEW PORT)
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
|
|
@ -575,7 +575,7 @@ Edit `chat/apps/mobile/.env`:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Replace localhost with your computer's IP
|
# Replace localhost with your computer's IP
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://192.168.1.XXX:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://192.168.1.XXX:3001
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://192.168.1.XXX:3002
|
EXPO_PUBLIC_BACKEND_URL=http://192.168.1.XXX:3002
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.0",
|
"@astrojs/check": "^0.9.0",
|
||||||
"@astrojs/sitemap": "^3.2.1",
|
"@astrojs/sitemap": "^3.2.1",
|
||||||
"@manacore/shared-landing-ui": "workspace:*",
|
"@mana/shared-landing-ui": "workspace:*",
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import '../styles/global.css';
|
import '../styles/global.css';
|
||||||
import Analytics from '@manacore/shared-landing-ui/atoms/Analytics.astro';
|
import Analytics from '@mana/shared-landing-ui/atoms/Analytics.astro';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Cookie-Richtlinie - ManaChat">
|
<Layout title="Cookie-Richtlinie - ManaChat">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Impressum - ManaChat">
|
<Layout title="Impressum - ManaChat">
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@ import Navigation from '../components/Navigation.astro';
|
||||||
import Footer from '../components/Footer.astro';
|
import Footer from '../components/Footer.astro';
|
||||||
|
|
||||||
// Shared components
|
// Shared components
|
||||||
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
|
import HeroSection from '@mana/shared-landing-ui/sections/HeroSection.astro';
|
||||||
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
|
import FeatureSection from '@mana/shared-landing-ui/sections/FeatureSection.astro';
|
||||||
import StepsSection from '@manacore/shared-landing-ui/sections/StepsSection.astro';
|
import StepsSection from '@mana/shared-landing-ui/sections/StepsSection.astro';
|
||||||
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
|
import FAQSection from '@mana/shared-landing-ui/sections/FAQSection.astro';
|
||||||
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
|
import CTASection from '@mana/shared-landing-ui/sections/CTASection.astro';
|
||||||
import PricingSection from '@manacore/shared-landing-ui/sections/PricingSection.astro';
|
import PricingSection from '@mana/shared-landing-ui/sections/PricingSection.astro';
|
||||||
|
|
||||||
// Feature data
|
// Feature data
|
||||||
const features = [
|
const features = [
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import Navigation from '../components/Navigation.astro';
|
import Navigation from '../components/Navigation.astro';
|
||||||
import Footer from '../components/Footer.astro';
|
import Footer from '../components/Footer.astro';
|
||||||
import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricingSection.astro';
|
import ManaPricingSection from '@mana/shared-landing-ui/sections/ManaPricingSection.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout
|
<Layout
|
||||||
|
|
@ -15,7 +15,7 @@ import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricing
|
||||||
<ManaPricingSection
|
<ManaPricingSection
|
||||||
showOneTime={true}
|
showOneTime={true}
|
||||||
showTrustIndicators={true}
|
showTrustIndicators={true}
|
||||||
ctaBaseUrl="https://app.manacore.io/register"
|
ctaBaseUrl="https://app.mana.io/register"
|
||||||
/>
|
/>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Datenschutzerklärung - ManaChat">
|
<Layout title="Datenschutzerklärung - ManaChat">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
|
import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Nutzungsbedingungen - ManaChat">
|
<Layout title="Nutzungsbedingungen - ManaChat">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# Mana Core Auth Configuration
|
# Mana Core Auth Configuration
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Chat Backend API
|
# Chat Backend API
|
||||||
# The backend handles AI API calls securely - no API keys needed in the mobile app
|
# The backend handles AI API calls securely - no API keys needed in the mobile app
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ export default function LoginScreen() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Magic Link ist derzeit nicht verfügbar (mana-core-auth unterstützt dies nicht)
|
// Magic Link ist derzeit nicht verfügbar (mana-auth unterstützt dies nicht)
|
||||||
const handleMagicLink = async () => {
|
const handleMagicLink = async () => {
|
||||||
Alert.alert(
|
Alert.alert(
|
||||||
'Nicht verfügbar',
|
'Nicht verfügbar',
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ import {
|
||||||
setNetworkAdapter,
|
setNetworkAdapter,
|
||||||
createMemoryStorageAdapter,
|
createMemoryStorageAdapter,
|
||||||
type UserData,
|
type UserData,
|
||||||
} from '@manacore/shared-auth';
|
} from '@mana/shared-auth';
|
||||||
|
|
||||||
// Mana Core Auth URL from environment
|
// Mana Core Auth URL from environment
|
||||||
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_CORE_AUTH_URL || 'http://localhost:3001';
|
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// Create SecureStore adapter for React Native
|
// Create SecureStore adapter for React Native
|
||||||
const createSecureStoreAdapter = () => ({
|
const createSecureStoreAdapter = () => ({
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@manacore/eslint-config';
|
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@mana/eslint-config';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ import * as SecureStore from 'expo-secure-store';
|
||||||
|
|
||||||
const BACKEND_URL = process.env.EXPO_PUBLIC_BACKEND_URL || 'http://localhost:3001';
|
const BACKEND_URL = process.env.EXPO_PUBLIC_BACKEND_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// Token storage key (must match what @manacore/shared-auth uses)
|
// Token storage key (must match what @mana/shared-auth uses)
|
||||||
const APP_TOKEN_KEY = '@manacore/app_token';
|
const APP_TOKEN_KEY = '@mana/app_token';
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Types
|
// Types
|
||||||
|
|
|
||||||
|
|
@ -122,5 +122,5 @@ Three IndexedDB collections managed by `@manacore/local-store`:
|
||||||
|
|
||||||
| Variable | Used by | Description |
|
| Variable | Used by | Description |
|
||||||
|----------|---------|-------------|
|
|----------|---------|-------------|
|
||||||
| `PUBLIC_MANA_CORE_AUTH_URL` | Web | Auth service URL (client) |
|
| `PUBLIC_MANA_AUTH_URL` | Web | Auth service URL (client) |
|
||||||
| `PUBLIC_SYNC_SERVER_URL` | Web | mana-sync WebSocket URL |
|
| `PUBLIC_SYNC_SERVER_URL` | Web | mana-sync WebSocket URL |
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,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://manacore:devpassword@localhost:5432/contacts
|
||||||
MANA_CORE_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
|
||||||
S3_REGION=us-east-1
|
S3_REGION=us-east-1
|
||||||
|
|
@ -197,14 +197,14 @@ GOOGLE_REDIRECT_URI=http://localhost:5184/data?tab=import&source=google
|
||||||
|
|
||||||
```
|
```
|
||||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3015
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3015
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Web (.env)
|
#### Web (.env)
|
||||||
|
|
||||||
```
|
```
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3015
|
PUBLIC_BACKEND_URL=http://localhost:3015
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
## Shared Packages
|
## Shared Packages
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.0",
|
"@astrojs/check": "^0.9.0",
|
||||||
"@manacore/shared-landing-ui": "workspace:*",
|
"@mana/shared-landing-ui": "workspace:*",
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"typescript": "^5.9.2"
|
"typescript": "^5.9.2"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
import '../styles/global.css';
|
import '../styles/global.css';
|
||||||
import Analytics from '@manacore/shared-landing-ui/atoms/Analytics.astro';
|
import Analytics from '@mana/shared-landing-ui/atoms/Analytics.astro';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@ import Footer from '@components/Footer.astro';
|
||||||
let StepsSection: any = null;
|
let StepsSection: any = null;
|
||||||
let PricingSection: any = null;
|
let PricingSection: any = null;
|
||||||
try {
|
try {
|
||||||
const shared = await import('@manacore/shared-landing-ui/sections/StepsSection.astro');
|
const shared = await import('@mana/shared-landing-ui/sections/StepsSection.astro');
|
||||||
StepsSection = shared.default;
|
StepsSection = shared.default;
|
||||||
} catch {
|
} catch {
|
||||||
// Shared component not available
|
// Shared component not available
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const shared = await import('@manacore/shared-landing-ui/sections/PricingSection.astro');
|
const shared = await import('@mana/shared-landing-ui/sections/PricingSection.astro');
|
||||||
PricingSection = shared.default;
|
PricingSection = shared.default;
|
||||||
} catch {
|
} catch {
|
||||||
// Shared component not available
|
// Shared component not available
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ pnpm setup:db:context # Create DB + push schema
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3020
|
PORT=3020
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/context
|
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/context
|
||||||
MANA_CORE_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/
|
||||||
GOOGLE_API_KEY=your-key
|
GOOGLE_API_KEY=your-key
|
||||||
|
|
@ -197,7 +197,7 @@ GOOGLE_API_KEY=your-key
|
||||||
### Web (.env)
|
### Web (.env)
|
||||||
```env
|
```env
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3020
|
PUBLIC_BACKEND_URL=http://localhost:3020
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
|
|
||||||
## Important Patterns
|
## Important Patterns
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
"assetBundlePatterns": ["**/*"],
|
"assetBundlePatterns": ["**/*"],
|
||||||
"ios": {
|
"ios": {
|
||||||
"supportsTablet": true,
|
"supportsTablet": true,
|
||||||
"bundleIdentifier": "com.manacore.context",
|
"bundleIdentifier": "com.mana.context",
|
||||||
"buildNumber": "1",
|
"buildNumber": "1",
|
||||||
"infoPlist": {
|
"infoPlist": {
|
||||||
"ITSAppUsesNonExemptEncryption": false
|
"ITSAppUsesNonExemptEncryption": false
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
"foregroundImage": "./assets/adaptive-icon.png",
|
"foregroundImage": "./assets/adaptive-icon.png",
|
||||||
"backgroundColor": "#ffffff"
|
"backgroundColor": "#ffffff"
|
||||||
},
|
},
|
||||||
"package": "com.manacore.context",
|
"package": "com.mana.context",
|
||||||
"versionCode": 1
|
"versionCode": 1
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,10 @@ import {
|
||||||
setDeviceAdapter,
|
setDeviceAdapter,
|
||||||
setNetworkAdapter,
|
setNetworkAdapter,
|
||||||
type UserData,
|
type UserData,
|
||||||
} from '@manacore/shared-auth';
|
} from '@mana/shared-auth';
|
||||||
|
|
||||||
// Mana Core Auth URL from environment
|
// Mana Core Auth URL from environment
|
||||||
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_CORE_AUTH_URL || 'http://localhost:3001';
|
const MANA_AUTH_URL = process.env.EXPO_PUBLIC_MANA_AUTH_URL || 'http://localhost:3001';
|
||||||
|
|
||||||
// Create SecureStore adapter for React Native
|
// Create SecureStore adapter for React Native
|
||||||
const createSecureStoreAdapter = () => ({
|
const createSecureStoreAdapter = () => ({
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@expo/vector-icons": "^14.0.0",
|
"@expo/vector-icons": "^14.0.0",
|
||||||
"@manacore/shared-auth": "workspace:*",
|
"@mana/shared-auth": "workspace:*",
|
||||||
"@react-native-async-storage/async-storage": "^1.23.1",
|
"@react-native-async-storage/async-storage": "^1.23.1",
|
||||||
"@react-native-picker/picker": "^2.11.0",
|
"@react-native-picker/picker": "^2.11.0",
|
||||||
"@react-navigation/native": "^7.0.3",
|
"@react-navigation/native": "^7.0.3",
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ const BACKEND_URL =
|
||||||
process.env.EXPO_PUBLIC_CONTEXT_BACKEND_URL ||
|
process.env.EXPO_PUBLIC_CONTEXT_BACKEND_URL ||
|
||||||
'http://localhost:3020';
|
'http://localhost:3020';
|
||||||
|
|
||||||
// Token storage key (must match what @manacore/shared-auth uses)
|
// Token storage key (must match what @mana/shared-auth uses)
|
||||||
const APP_TOKEN_KEY = '@manacore/app_token';
|
const APP_TOKEN_KEY = '@mana/app_token';
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Types (re-exported for consumers)
|
// Types (re-exported for consumers)
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,10 @@ export default defineConfig({
|
||||||
replacesTitle: false,
|
replacesTitle: false,
|
||||||
},
|
},
|
||||||
social: {
|
social: {
|
||||||
github: 'https://github.com/manacore/manacore-monorepo',
|
github: 'https://github.com/mana/mana-monorepo',
|
||||||
},
|
},
|
||||||
editLink: {
|
editLink: {
|
||||||
baseUrl: 'https://github.com/manacore/manacore-monorepo/edit/main/apps/docs/',
|
baseUrl: 'https://github.com/mana/mana-monorepo/edit/main/apps/docs/',
|
||||||
},
|
},
|
||||||
customCss: ['./src/styles/custom.css'],
|
customCss: ['./src/styles/custom.css'],
|
||||||
sidebar: [
|
sidebar: [
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "@manacore/docs",
|
"name": "@mana/docs",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ import { JwtAuthModule } from '@manacore/shared-nestjs-auth';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
JwtAuthModule.register({
|
JwtAuthModule.register({
|
||||||
authServiceUrl: process.env.MANA_CORE_AUTH_URL,
|
authServiceUrl: process.env.MANA_AUTH_URL,
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
@ -91,15 +91,15 @@ Use `@mana-core/nestjs-integration` for full integration:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// app.module.ts
|
// app.module.ts
|
||||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ManaCoreModule.forRootAsync({
|
ManaModule.forRootAsync({
|
||||||
imports: [ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: (config: ConfigService) => ({
|
useFactory: (config: ConfigService) => ({
|
||||||
appId: config.get('APP_ID'),
|
appId: config.get('APP_ID'),
|
||||||
serviceKey: config.get('MANA_CORE_SERVICE_KEY'),
|
serviceKey: config.get('MANA_SERVICE_KEY'),
|
||||||
debug: config.get('NODE_ENV') === 'development',
|
debug: config.get('NODE_ENV') === 'development',
|
||||||
}),
|
}),
|
||||||
inject: [ConfigService],
|
inject: [ConfigService],
|
||||||
|
|
@ -143,7 +143,7 @@ export class ApiController {
|
||||||
import { createAuthService } from '@manacore/shared-auth';
|
import { createAuthService } from '@manacore/shared-auth';
|
||||||
|
|
||||||
export const auth = createAuthService({
|
export const auth = createAuthService({
|
||||||
authUrl: import.meta.env.PUBLIC_MANA_CORE_AUTH_URL,
|
authUrl: import.meta.env.PUBLIC_MANA_AUTH_URL,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Usage in component
|
// Usage in component
|
||||||
|
|
@ -160,7 +160,7 @@ if (data) {
|
||||||
import { createAuthService } from '@manacore/shared-auth';
|
import { createAuthService } from '@manacore/shared-auth';
|
||||||
|
|
||||||
export const auth = createAuthService({
|
export const auth = createAuthService({
|
||||||
authUrl: process.env.EXPO_PUBLIC_MANA_CORE_AUTH_URL,
|
authUrl: process.env.EXPO_PUBLIC_MANA_AUTH_URL,
|
||||||
storage: AsyncStorage, // Expo AsyncStorage
|
storage: AsyncStorage, // Expo AsyncStorage
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
@ -190,7 +190,7 @@ export const auth = createAuthService({
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# Required
|
# Required
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# For development bypass (optional)
|
# For development bypass (optional)
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
|
|
@ -198,7 +198,7 @@ DEV_BYPASS_AUTH=true
|
||||||
DEV_USER_ID=test-user-uuid
|
DEV_USER_ID=test-user-uuid
|
||||||
|
|
||||||
# For credit operations
|
# For credit operations
|
||||||
MANA_CORE_SERVICE_KEY=your-service-key
|
MANA_SERVICE_KEY=your-service-key
|
||||||
APP_ID=your-app-id
|
APP_ID=your-app-id
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -207,12 +207,12 @@ APP_ID=your-app-id
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<TabItem label="SvelteKit">
|
<TabItem label="SvelteKit">
|
||||||
```env
|
```env
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Expo">
|
<TabItem label="Expo">
|
||||||
```env
|
```env
|
||||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
|
||||||
|
|
@ -247,7 +247,7 @@ export default () => ({
|
||||||
url: process.env.DATABASE_URL,
|
url: process.env.DATABASE_URL,
|
||||||
},
|
},
|
||||||
auth: {
|
auth: {
|
||||||
url: process.env.MANA_CORE_AUTH_URL,
|
url: process.env.MANA_AUTH_URL,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ services:
|
||||||
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://manacore:${POSTGRES_PASSWORD}@postgres:5432/chat
|
||||||
- MANA_CORE_AUTH_URL=http://mana-auth:3001
|
- MANA_AUTH_URL=http://mana-auth:3001
|
||||||
depends_on:
|
depends_on:
|
||||||
- mana-auth
|
- mana-auth
|
||||||
- postgres
|
- postgres
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ services:
|
||||||
image: ghcr.io/manacore/chat-backend:latest
|
image: ghcr.io/manacore/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_CORE_AUTH_URL: http://mana-auth:3001
|
MANA_AUTH_URL: http://mana-auth:3001
|
||||||
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
|
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
|
||||||
depends_on:
|
depends_on:
|
||||||
- mana-auth
|
- mana-auth
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
|
||||||
|
|
||||||
| Variable | Description | Used By |
|
| Variable | Description | Used By |
|
||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `MANA_CORE_AUTH_URL` | Auth service URL | All apps |
|
| `MANA_AUTH_URL` | Auth service URL | All apps |
|
||||||
| `JWT_PRIVATE_KEY` | JWT signing key | mana-core-auth |
|
| `JWT_PRIVATE_KEY` | JWT signing key | mana-core-auth |
|
||||||
| `JWT_PUBLIC_KEY` | JWT verification key | All backends |
|
| `JWT_PUBLIC_KEY` | JWT verification key | All backends |
|
||||||
| `POSTGRES_USER` | Database user | Docker, backends |
|
| `POSTGRES_USER` | Database user | Docker, backends |
|
||||||
|
|
@ -71,8 +71,8 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `MANA_CORE_AUTH_PORT` | Service port | `3001` |
|
| `MANA_AUTH_PORT` | Service port | `3001` |
|
||||||
| `MANA_CORE_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 | `manacore` |
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ OLLAMA_TIMEOUT=120000
|
||||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
MANA_AUTH_URL=http://localhost:3001
|
||||||
|
|
||||||
# Server
|
# Server
|
||||||
PORT=3002
|
PORT=3002
|
||||||
|
|
@ -102,7 +102,7 @@ PORT=3002
|
||||||
### Web
|
### Web
|
||||||
|
|
||||||
```env
|
```env
|
||||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Cloudflare Pages configuration for Manacore Docs
|
# Cloudflare Pages configuration for Manacore Docs
|
||||||
# Deployed via GitHub Actions (Direct Upload)
|
# Deployed via GitHub Actions (Direct Upload)
|
||||||
|
|
||||||
name = "manacore-docs"
|
name = "mana-docs"
|
||||||
compatibility_date = "2024-12-01"
|
compatibility_date = "2024-12-01"
|
||||||
pages_build_output_dir = "dist"
|
pages_build_output_dir = "dist"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"type-check": "tsc --noEmit"
|
"type-check": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@manacore/shared-types": "workspace:*"
|
"@mana/shared-types": "workspace:*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
ManaCore Apps is a monorepo containing multiple applications that share a unified authentication system powered by Supabase. The repository includes:
|
Mana Apps is a monorepo containing multiple applications that share a unified authentication system powered by Supabase. The repository includes:
|
||||||
|
|
||||||
- **Web App** (`apps/web`): SvelteKit-based web application
|
- **Web App** (`apps/web`): SvelteKit-based web application
|
||||||
- **Mobile App** (`apps/mobile`): React Native (Expo) application for iOS, Android, and web
|
- **Mobile App** (`apps/mobile`): React Native (Expo) application for iOS, Android, and web
|
||||||
|
|
@ -14,7 +14,7 @@ ManaCore Apps is a monorepo containing multiple applications that share a unifie
|
||||||
|
|
||||||
### Multi-App Ecosystem
|
### Multi-App Ecosystem
|
||||||
|
|
||||||
This is a multi-tenant system where a single authentication backend supports multiple branded applications (Memoro, Cards, Storyteller, ManaCore). Each app shares the same user database but can present different branding and features.
|
This is a multi-tenant system where a single authentication backend supports multiple branded applications (Memoro, Cards, Storyteller, Mana). Each app shares the same user database but can present different branding and features.
|
||||||
|
|
||||||
**Key concept**: App configuration is centralized in `apps/web/src/lib/config/apps.ts` and defines branding, features, and routing for each application in the ecosystem.
|
**Key concept**: App configuration is centralized in `apps/web/src/lib/config/apps.ts` and defines branding, features, and routing for each application in the ecosystem.
|
||||||
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
# ManaCore Apps
|
# Mana Apps
|
||||||
|
|
||||||
A unified application ecosystem built on a shared authentication system, supporting multiple branded applications across web and mobile platforms.
|
A unified application ecosystem built on a shared authentication system, supporting multiple branded applications across web and mobile platforms.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
ManaCore Apps is a monorepo containing web and mobile applications that provide organization management, team collaboration, and credit transfer capabilities. The system supports multiple branded applications (Memoro, Cards, Storyteller, ManaCore) through a flexible multi-tenant architecture.
|
Mana Apps is a monorepo containing web and mobile applications that provide organization management, team collaboration, and credit transfer capabilities. The system supports multiple branded applications (Memoro, Cards, Storyteller, Mana) through a flexible multi-tenant architecture.
|
||||||
|
|
||||||
### Applications
|
### Applications
|
||||||
|
|
||||||
|
|
@ -179,7 +179,7 @@ Both apps require Supabase configuration. Create `.env` files based on `.env.exa
|
||||||
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-core-middleware-111768794939.europe-west3.run.app
|
||||||
PUBLIC_APP_NAME=ManaCore Web
|
PUBLIC_APP_NAME=Mana Web
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -199,7 +199,7 @@ The system supports multiple branded applications sharing the same authenticatio
|
||||||
- **Memoro** - Voice recordings and memory management
|
- **Memoro** - Voice recordings and memory management
|
||||||
- **Cards** - AI-powered flashcard learning
|
- **Cards** - AI-powered flashcard learning
|
||||||
- **Storyteller** - Creative writing with AI assistance
|
- **Storyteller** - Creative writing with AI assistance
|
||||||
- **ManaCore** - Central account and organization management
|
- **Mana** - Central account and organization management
|
||||||
|
|
||||||
App configurations are centralized in `apps/web/src/lib/config/apps.ts`, defining branding, features, and routing for each application.
|
App configurations are centralized in `apps/web/src/lib/config/apps.ts`, defining branding, features, and routing for each application.
|
||||||
|
|
||||||
|
|
@ -4,7 +4,7 @@ import tailwind from '@astrojs/tailwind';
|
||||||
import icon from 'astro-icon';
|
import icon from 'astro-icon';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
site: 'https://manacore.ai',
|
site: 'https://mana.ai',
|
||||||
integrations: [
|
integrations: [
|
||||||
react(),
|
react(),
|
||||||
tailwind(),
|
tailwind(),
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "@manacore/landing",
|
"name": "@mana/landing",
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"@iconify-json/mdi": "^1.2.3",
|
"@iconify-json/mdi": "^1.2.3",
|
||||||
"@iconify-json/ph": "^1.2.2",
|
"@iconify-json/ph": "^1.2.2",
|
||||||
"@iconify-json/tabler": "^1.2.19",
|
"@iconify-json/tabler": "^1.2.19",
|
||||||
"@manacore/shared-landing-ui": "workspace:*",
|
"@mana/shared-landing-ui": "workspace:*",
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
|
Before Width: | Height: | Size: 502 B After Width: | Height: | Size: 502 B |
|
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 |