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>
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@manacore/api",
|
||||
"name": "@mana/api",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
|
|
@ -10,9 +10,9 @@
|
|||
"type-check": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@manacore/media-client": "workspace:*",
|
||||
"@manacore/shared-hono": "workspace:*",
|
||||
"@manacore/shared-storage": "workspace:*",
|
||||
"@mana/media-client": "workspace:*",
|
||||
"@mana/shared-hono": "workspace:*",
|
||||
"@mana/shared-storage": "workspace:*",
|
||||
"@mozilla/readability": "^0.5.0",
|
||||
"drizzle-orm": "^0.38.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.
|
||||
* Each module registers its routes under /api/v1/{module}/*.
|
||||
|
|
@ -13,7 +13,7 @@ import {
|
|||
errorHandler,
|
||||
notFoundHandler,
|
||||
rateLimitMiddleware,
|
||||
} from '@manacore/shared-hono';
|
||||
} from '@mana/shared-hono';
|
||||
|
||||
// Module routes
|
||||
import { calendarRoutes } from './modules/calendar/routes';
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* 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';
|
||||
let client: MediaClient | null = null;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import { Hono } from 'hono';
|
||||
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';
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ routes.post('/:id/avatar', async (c) => {
|
|||
if (file.type === 'image/svg+xml') {
|
||||
// SVGs stay on shared-storage (Sharp can't process SVG)
|
||||
const { createContactsStorage, generateUserFileKey } = await import(
|
||||
'@manacore/shared-storage'
|
||||
'@mana/shared-storage'
|
||||
);
|
||||
const storage = createContactsStorage();
|
||||
const key = generateUserFileKey(userId, `avatar-${c.req.param('id')}.svg`);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
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';
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ routes.post('/songs/upload', async (c) => {
|
|||
const key = `users/${userId}/songs/${songId}/${filename}`;
|
||||
|
||||
try {
|
||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
||||
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||
const storage = createMusicStorage();
|
||||
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);
|
||||
|
||||
try {
|
||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
||||
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||
const storage = createMusicStorage();
|
||||
const url = await storage.getDownloadUrl(storagePath, { expiresIn: 3600 });
|
||||
return c.json({ url });
|
||||
|
|
@ -83,7 +83,7 @@ routes.get('/songs/:id/cover-url', async (c) => {
|
|||
if (!coverArtPath) return c.json({ url: null });
|
||||
|
||||
try {
|
||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
||||
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||
const storage = createMusicStorage();
|
||||
const url = await storage.getDownloadUrl(coverArtPath, { expiresIn: 3600 });
|
||||
return c.json({ url });
|
||||
|
|
@ -99,7 +99,7 @@ routes.post('/library/cover-urls', async (c) => {
|
|||
if (!paths?.length) return c.json({ urls: {} });
|
||||
|
||||
try {
|
||||
const { createMusicStorage } = await import('@manacore/shared-storage');
|
||||
const { createMusicStorage } = await import('@mana/shared-storage');
|
||||
const storage = createMusicStorage();
|
||||
const urls: Record<string, string> = {};
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import { sql } from 'drizzle-orm';
|
|||
// ─── DB Connection (reads from sync_changes for feed) ───────
|
||||
|
||||
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 db = drizzle(connection);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
|
||||
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 IMAGE_GEN_URL = process.env.MANA_IMAGE_GEN_URL || '';
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
import { Hono } from 'hono';
|
||||
import { eq, and, gt, or, isNull, asc } from 'drizzle-orm';
|
||||
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 postgres from 'postgres';
|
||||
import {
|
||||
|
|
@ -27,7 +27,7 @@ import { relations } from 'drizzle-orm';
|
|||
// ─── DB Schema (read-only for share lookups) ────────────────
|
||||
|
||||
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');
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ routes.post('/files/upload', async (c) => {
|
|||
|
||||
// Non-images -> shared-storage as before
|
||||
const { createStorageStorage, generateUserFileKey, getContentType } = await import(
|
||||
'@manacore/shared-storage'
|
||||
'@mana/shared-storage'
|
||||
);
|
||||
const storage = createStorageStorage();
|
||||
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);
|
||||
|
||||
try {
|
||||
const { createStorageStorage } = await import('@manacore/shared-storage');
|
||||
const { createStorageStorage } = await import('@mana/shared-storage');
|
||||
const storage = createStorageStorage();
|
||||
|
||||
if (urlOnly) {
|
||||
|
|
@ -114,7 +114,7 @@ routes.post('/files/:id/versions', async (c) => {
|
|||
if (!file) return c.json({ error: 'No file' }, 400);
|
||||
|
||||
try {
|
||||
const { createStorageStorage, generateUserFileKey } = await import('@manacore/shared-storage');
|
||||
const { createStorageStorage, generateUserFileKey } = await import('@mana/shared-storage');
|
||||
const storage = createStorageStorage();
|
||||
const key = generateUserFileKey(userId, `v-${Date.now()}-${file.name}`);
|
||||
const buffer = Buffer.from(await file.arrayBuffer());
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { z } from 'zod';
|
|||
import { eq, and, asc, sql } from 'drizzle-orm';
|
||||
import { drizzle } from 'drizzle-orm/postgres-js';
|
||||
import postgres from 'postgres';
|
||||
import { serviceAuthMiddleware } from '@manacore/shared-hono';
|
||||
import { serviceAuthMiddleware } from '@mana/shared-hono';
|
||||
import {
|
||||
pgSchema,
|
||||
uuid,
|
||||
|
|
@ -34,7 +34,7 @@ import {
|
|||
// ─── DB Schema (minimal, server-only) ──────────────────────
|
||||
|
||||
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');
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import {
|
|||
// ─── DB Schema ──────────────────────────────────────────────
|
||||
|
||||
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 tracesSchema = pgSchema('traces');
|
||||
|
|
|
|||
|
|
@ -407,7 +407,7 @@ FREQ=WEEKLY;UNTIL=20241231T235959Z # Wöchentlich bis Ende 2024
|
|||
NODE_ENV=development
|
||||
PORT=3014
|
||||
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
|
||||
|
||||
# Notifications (optional)
|
||||
|
|
@ -420,14 +420,14 @@ EMAIL_FROM=calendar@mana.how
|
|||
|
||||
```env
|
||||
PUBLIC_BACKEND_URL=http://localhost:3014
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
### Mobile (.env)
|
||||
|
||||
```env
|
||||
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
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.0",
|
||||
"@manacore/shared-landing-ui": "workspace:*",
|
||||
"@mana/shared-landing-ui": "workspace:*",
|
||||
"astro": "^5.16.0",
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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 {
|
||||
title?: string;
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ import Footer from '@components/Footer.astro';
|
|||
let StepsSection: any = null;
|
||||
let PricingSection: any = null;
|
||||
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;
|
||||
} catch {
|
||||
// Shared component not available
|
||||
}
|
||||
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;
|
||||
} catch {
|
||||
// Shared component not available
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ SERVICE_KEY=your-service-key-from-mana-core
|
|||
|
||||
**backend/src/app.module.ts**:
|
||||
```typescript
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
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
|
||||
|
||||
- [ ] Import `ManaCoreModule` in `app.module.ts`
|
||||
- [ ] Import `ManaModule` in `app.module.ts`
|
||||
|
||||
- [ ] Configure with `forRootAsync()`:
|
||||
|
||||
```typescript
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
manaServiceUrl: 'your-mana-url',
|
||||
|
|
|
|||
|
|
@ -123,12 +123,12 @@ SIGNUP_REDIRECT_URL=https://yourapp.com/welcome
|
|||
|
||||
### 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
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
||||
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
|
|
@ -139,7 +139,7 @@ import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
|||
}),
|
||||
|
||||
// Mana Core Module - async configuration
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
// Required: Mana service URL
|
||||
|
|
@ -898,7 +898,7 @@ describe('CharacterController', () => {
|
|||
Test with the Mana Core module:
|
||||
|
||||
```typescript
|
||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
||||
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||
|
||||
describe('CharacterController (e2e)', () => {
|
||||
let app: INestApplication;
|
||||
|
|
@ -910,7 +910,7 @@ describe('CharacterController (e2e)', () => {
|
|||
isGlobal: true,
|
||||
envFilePath: '.env.test',
|
||||
}),
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
||||
|
|
@ -1028,7 +1028,7 @@ console.log('Device info:', deviceInfo);
|
|||
Enable debug mode to see detailed logs:
|
||||
|
||||
```typescript
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
manaServiceUrl: configService.get('MANA_SERVICE_URL'),
|
||||
|
|
|
|||
|
|
@ -104,11 +104,11 @@ EXPO_PUBLIC_STORYTELLER_BACKEND_URL=http://localhost:3002
|
|||
|
||||
**`backend/src/app.module.ts`**:
|
||||
```typescript
|
||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
||||
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
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! 🎉
|
||||
|
||||
### ✅ Backend (Complete)
|
||||
- [x] ManaCoreModule configured with environment variables
|
||||
- [x] ManaModule configured with environment variables
|
||||
- [x] Service key configuration for credit operations
|
||||
- [x] Credit operation types defined (deck creation = 10 mana)
|
||||
- [x] Credit validation before deck creation
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ export default defineConfig({
|
|||
integrations: [tailwind(), sitemap()],
|
||||
vite: {
|
||||
ssr: {
|
||||
noExternal: ['@manacore/shared-landing-ui'],
|
||||
noExternal: ['@mana/shared-landing-ui'],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.0",
|
||||
"@astrojs/sitemap": "^3.2.1",
|
||||
"@manacore/shared-landing-ui": "workspace:*",
|
||||
"@mana/shared-landing-ui": "workspace:*",
|
||||
"astro": "^5.16.0",
|
||||
"astro-icon": "^1.1.5",
|
||||
"typescript": "^5.0.0"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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 {
|
||||
title: string;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@ import Navigation from '../components/Navigation.astro';
|
|||
import Footer from '../components/Footer.astro';
|
||||
|
||||
// Shared components
|
||||
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
|
||||
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
|
||||
import StepsSection from '@manacore/shared-landing-ui/sections/StepsSection.astro';
|
||||
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
|
||||
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
|
||||
import PricingSection from '@manacore/shared-landing-ui/sections/PricingSection.astro';
|
||||
import Card from '@manacore/shared-landing-ui/atoms/Card.astro';
|
||||
import HeroSection from '@mana/shared-landing-ui/sections/HeroSection.astro';
|
||||
import FeatureSection from '@mana/shared-landing-ui/sections/FeatureSection.astro';
|
||||
import StepsSection from '@mana/shared-landing-ui/sections/StepsSection.astro';
|
||||
import FAQSection from '@mana/shared-landing-ui/sections/FAQSection.astro';
|
||||
import CTASection from '@mana/shared-landing-ui/sections/CTASection.astro';
|
||||
import PricingSection from '@mana/shared-landing-ui/sections/PricingSection.astro';
|
||||
import Card from '@mana/shared-landing-ui/atoms/Card.astro';
|
||||
|
||||
// Feature data
|
||||
const features = [
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
import Layout from '../layouts/Layout.astro';
|
||||
import Navigation from '../components/Navigation.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
|
||||
|
|
@ -15,7 +15,7 @@ import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricing
|
|||
<ManaPricingSection
|
||||
showOneTime={true}
|
||||
showTrustIndicators={true}
|
||||
ctaBaseUrl="https://app.manacore.io/register"
|
||||
ctaBaseUrl="https://app.mana.io/register"
|
||||
/>
|
||||
</main>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@
|
|||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3000
|
||||
|
||||
# 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
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ Uses Expo Router v5 with file-based routing:
|
|||
### Backend 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
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ For new screens:
|
|||
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
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// @ts-check
|
||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@manacore/eslint-config';
|
||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@mana/eslint-config';
|
||||
|
||||
export default [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
"web": "expo start --web"
|
||||
},
|
||||
"dependencies": {
|
||||
"@manacore/shared-auth": "workspace:*",
|
||||
"@mana/shared-auth": "workspace:*",
|
||||
"@expo/ui": "~0.2.0-beta.6",
|
||||
"@expo/vector-icons": "^15.0.2",
|
||||
"@react-native-async-storage/async-storage": "2.2.0",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* 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';
|
||||
|
|
@ -14,11 +14,11 @@ import {
|
|||
isTokenValidLocally as sharedIsTokenValidLocally,
|
||||
getUserFromToken as sharedGetUserFromToken,
|
||||
decodeToken as sharedDecodeToken,
|
||||
} from '@manacore/shared-auth';
|
||||
} from '@mana/shared-auth';
|
||||
import type { ManaUser, JwtPayload } from '../types/auth';
|
||||
|
||||
// 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 ---
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ export const authService = {
|
|||
_username?: string
|
||||
): Promise<{ success: boolean; user?: ManaUser; error?: string }> => {
|
||||
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);
|
||||
if (!result.success) {
|
||||
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
|
||||
*/
|
||||
|
||||
import { _sharedTokenManager } from './authService';
|
||||
export { TokenState } from '@manacore/shared-auth';
|
||||
export { TokenState } from '@mana/shared-auth';
|
||||
|
||||
type TokenStateObserver = (state: string, token?: string | null) => void;
|
||||
|
||||
|
|
|
|||
|
|
@ -147,8 +147,8 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
|||
const user = get().user;
|
||||
if (!user) throw new Error('No user logged in');
|
||||
|
||||
// TODO: Implement profile update via mana-core-auth API
|
||||
console.warn('Profile update not yet implemented via mana-core-auth API');
|
||||
// TODO: Implement profile update via mana-auth API
|
||||
console.warn('Profile update not yet implemented via mana-auth API');
|
||||
|
||||
set({
|
||||
user: {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* 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
|
||||
|
||||
# Auth
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# Server
|
||||
PORT=3002
|
||||
|
|
@ -115,14 +115,14 @@ PORT=3002
|
|||
#### Mobile (.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
|
||||
```
|
||||
|
||||
#### Web (.env)
|
||||
|
||||
```env
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||
```
|
||||
|
||||
|
|
@ -173,7 +173,7 @@ pnpm --filter @chat/server db:add-local-models
|
|||
```env
|
||||
OPENROUTER_API_KEY=sk-or-v1-xxx
|
||||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
PORT=3002
|
||||
```
|
||||
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
|
||||
- Updated all controllers to use JwtAuthGuard
|
||||
- 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)
|
||||
|
||||
**Key Features:**
|
||||
|
|
@ -73,7 +73,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
|||
- Added `initializeWebAuth()` initialization
|
||||
- Added `getCredits()` method for credit balance
|
||||
- Added `getAccessToken()` method for API calls
|
||||
- Added MANA_CORE_AUTH_URL environment variable
|
||||
- Added MANA_AUTH_URL environment variable
|
||||
|
||||
**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 network adapter
|
||||
- Removed Supabase auth dependencies
|
||||
- Added MANA_CORE_AUTH_URL environment variable
|
||||
- Added MANA_AUTH_URL environment variable
|
||||
|
||||
**Key Features:**
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ The Chat project has been **fully migrated** from Supabase Auth to **Mana Core A
|
|||
# PORT=3001
|
||||
|
||||
# NEW (Add):
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
PORT=3002
|
||||
|
||||
# Keep (for database):
|
||||
|
|
@ -136,7 +136,7 @@ SUPABASE_SERVICE_KEY=your-service-key-here
|
|||
# PUBLIC_BACKEND_URL=http://localhost:3001
|
||||
|
||||
# NEW (Add):
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||
|
||||
# Keep (for database):
|
||||
|
|
@ -153,7 +153,7 @@ PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
|||
# EXPO_PUBLIC_BACKEND_URL=http://localhost:3001
|
||||
|
||||
# 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
|
||||
|
||||
# Keep (for database):
|
||||
|
|
@ -182,7 +182,7 @@ Service runs on: `http://localhost:3001`
|
|||
cd chat/backend
|
||||
cp .env.example .env
|
||||
# Edit .env:
|
||||
# - Add MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
# - Add MANA_AUTH_URL=http://localhost:3001
|
||||
# - Change PORT=3002
|
||||
pnpm start:dev
|
||||
```
|
||||
|
|
@ -195,7 +195,7 @@ Service runs on: `http://localhost:3002`
|
|||
cd chat/apps/web
|
||||
cp .env.example .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
|
||||
pnpm dev
|
||||
```
|
||||
|
|
@ -208,7 +208,7 @@ App runs on: `http://localhost:5173`
|
|||
cd chat/apps/mobile
|
||||
cp .env.example .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
|
||||
pnpm dev
|
||||
```
|
||||
|
|
@ -326,10 +326,10 @@ CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
|||
|
||||
### Issue: Backend can't validate tokens
|
||||
|
||||
**Solution:** Check MANA_CORE_AUTH_URL in backend .env
|
||||
**Solution:** Check MANA_AUTH_URL in backend .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
|
||||
|
||||
- **Integration Guide:** `/chat/MANA_CORE_AUTH_INTEGRATION.md`
|
||||
- **Integration Guide:** `/chat/MANA_AUTH_INTEGRATION.md`
|
||||
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
||||
- **Quick Start:** `/mana-core-auth/QUICKSTART.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=...
|
||||
|
||||
# Add Mana Core Auth URL
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
#### Web App `.env`
|
||||
|
|
@ -68,7 +68,7 @@ MANA_CORE_AUTH_URL=http://localhost:3001
|
|||
# PUBLIC_SUPABASE_ANON_KEY=...
|
||||
|
||||
# Add
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
#### Mobile App `.env`
|
||||
|
|
@ -79,7 +79,7 @@ PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
|||
# EXPO_PUBLIC_SUPABASE_ANON_KEY=...
|
||||
|
||||
# Add
|
||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
### Step 2: Update Backend (NestJS)
|
||||
|
|
@ -115,7 +115,7 @@ export class JwtAuthGuard implements CanActivate {
|
|||
|
||||
try {
|
||||
// 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`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
|
@ -179,7 +179,7 @@ Edit `chat/apps/web/src/lib/stores/auth.svelte.ts`:
|
|||
```typescript
|
||||
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
|
||||
const { authService, tokenManager } = initializeWebAuth({
|
||||
|
|
@ -248,7 +248,7 @@ export const handle: Handle = async ({ event, resolve }) => {
|
|||
if (token) {
|
||||
try {
|
||||
// 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`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
|
@ -293,7 +293,7 @@ import {
|
|||
} from '@manacore/shared-auth';
|
||||
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
|
||||
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
|
||||
|
||||
# Mana Core Auth (NEW)
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# Supabase (for database, not auth)
|
||||
SUPABASE_URL=https://your-project.supabase.co
|
||||
|
|
@ -116,7 +116,7 @@ Edit `chat/apps/web/.env`:
|
|||
|
||||
```env
|
||||
# Mana Core Auth (NEW)
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# Backend API (NEW PORT)
|
||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||
|
|
@ -137,7 +137,7 @@ Edit `chat/apps/mobile/.env`:
|
|||
|
||||
```env
|
||||
# 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)
|
||||
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
||||
|
|
@ -575,7 +575,7 @@ Edit `chat/apps/mobile/.env`:
|
|||
|
||||
```env
|
||||
# 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
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.0",
|
||||
"@astrojs/sitemap": "^3.2.1",
|
||||
"@manacore/shared-landing-ui": "workspace:*",
|
||||
"@mana/shared-landing-ui": "workspace:*",
|
||||
"astro": "^5.16.0",
|
||||
"typescript": "^5.0.0"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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 {
|
||||
title: string;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ import Navigation from '../components/Navigation.astro';
|
|||
import Footer from '../components/Footer.astro';
|
||||
|
||||
// Shared components
|
||||
import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
|
||||
import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
|
||||
import StepsSection from '@manacore/shared-landing-ui/sections/StepsSection.astro';
|
||||
import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
|
||||
import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
|
||||
import PricingSection from '@manacore/shared-landing-ui/sections/PricingSection.astro';
|
||||
import HeroSection from '@mana/shared-landing-ui/sections/HeroSection.astro';
|
||||
import FeatureSection from '@mana/shared-landing-ui/sections/FeatureSection.astro';
|
||||
import StepsSection from '@mana/shared-landing-ui/sections/StepsSection.astro';
|
||||
import FAQSection from '@mana/shared-landing-ui/sections/FAQSection.astro';
|
||||
import CTASection from '@mana/shared-landing-ui/sections/CTASection.astro';
|
||||
import PricingSection from '@mana/shared-landing-ui/sections/PricingSection.astro';
|
||||
|
||||
// Feature data
|
||||
const features = [
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
import Layout from '../layouts/Layout.astro';
|
||||
import Navigation from '../components/Navigation.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
|
||||
|
|
@ -15,7 +15,7 @@ import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricing
|
|||
<ManaPricingSection
|
||||
showOneTime={true}
|
||||
showTrustIndicators={true}
|
||||
ctaBaseUrl="https://app.manacore.io/register"
|
||||
ctaBaseUrl="https://app.mana.io/register"
|
||||
/>
|
||||
</main>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Mana Core Auth Configuration
|
||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# Chat Backend API
|
||||
# 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 () => {
|
||||
Alert.alert(
|
||||
'Nicht verfügbar',
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import {
|
|||
setNetworkAdapter,
|
||||
createMemoryStorageAdapter,
|
||||
type UserData,
|
||||
} from '@manacore/shared-auth';
|
||||
} from '@mana/shared-auth';
|
||||
|
||||
// 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
|
||||
const createSecureStoreAdapter = () => ({
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// @ts-check
|
||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@manacore/eslint-config';
|
||||
import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@mana/eslint-config';
|
||||
|
||||
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';
|
||||
|
||||
// Token storage key (must match what @manacore/shared-auth uses)
|
||||
const APP_TOKEN_KEY = '@manacore/app_token';
|
||||
// Token storage key (must match what @mana/shared-auth uses)
|
||||
const APP_TOKEN_KEY = '@mana/app_token';
|
||||
|
||||
// ============================================================================
|
||||
// Types
|
||||
|
|
|
|||
|
|
@ -122,5 +122,5 @@ Three IndexedDB collections managed by `@manacore/local-store`:
|
|||
|
||||
| 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 |
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ pnpm build # Build for production
|
|||
NODE_ENV=development
|
||||
PORT=3015
|
||||
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
|
||||
S3_ENDPOINT=http://localhost:9000
|
||||
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_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
#### Web (.env)
|
||||
|
||||
```
|
||||
PUBLIC_BACKEND_URL=http://localhost:3015
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
## Shared Packages
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.0",
|
||||
"@manacore/shared-landing-ui": "workspace:*",
|
||||
"@mana/shared-landing-ui": "workspace:*",
|
||||
"astro": "^5.16.0",
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
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 {
|
||||
title?: string;
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ import Footer from '@components/Footer.astro';
|
|||
let StepsSection: any = null;
|
||||
let PricingSection: any = null;
|
||||
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;
|
||||
} catch {
|
||||
// Shared component not available
|
||||
}
|
||||
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;
|
||||
} catch {
|
||||
// Shared component not available
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ pnpm setup:db:context # Create DB + push schema
|
|||
NODE_ENV=development
|
||||
PORT=3020
|
||||
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_ENDPOINT=https://your-endpoint.openai.azure.com/
|
||||
GOOGLE_API_KEY=your-key
|
||||
|
|
@ -197,7 +197,7 @@ GOOGLE_API_KEY=your-key
|
|||
### Web (.env)
|
||||
```env
|
||||
PUBLIC_BACKEND_URL=http://localhost:3020
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
|
||||
## Important Patterns
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
"assetBundlePatterns": ["**/*"],
|
||||
"ios": {
|
||||
"supportsTablet": true,
|
||||
"bundleIdentifier": "com.manacore.context",
|
||||
"bundleIdentifier": "com.mana.context",
|
||||
"buildNumber": "1",
|
||||
"infoPlist": {
|
||||
"ITSAppUsesNonExemptEncryption": false
|
||||
|
|
@ -45,7 +45,7 @@
|
|||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#ffffff"
|
||||
},
|
||||
"package": "com.manacore.context",
|
||||
"package": "com.mana.context",
|
||||
"versionCode": 1
|
||||
},
|
||||
"extra": {
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ import {
|
|||
setDeviceAdapter,
|
||||
setNetworkAdapter,
|
||||
type UserData,
|
||||
} from '@manacore/shared-auth';
|
||||
} from '@mana/shared-auth';
|
||||
|
||||
// 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
|
||||
const createSecureStoreAdapter = () => ({
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@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-picker/picker": "^2.11.0",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ const BACKEND_URL =
|
|||
process.env.EXPO_PUBLIC_CONTEXT_BACKEND_URL ||
|
||||
'http://localhost:3020';
|
||||
|
||||
// Token storage key (must match what @manacore/shared-auth uses)
|
||||
const APP_TOKEN_KEY = '@manacore/app_token';
|
||||
// Token storage key (must match what @mana/shared-auth uses)
|
||||
const APP_TOKEN_KEY = '@mana/app_token';
|
||||
|
||||
// ============================================================================
|
||||
// Types (re-exported for consumers)
|
||||
|
|
|
|||
|
|
@ -16,10 +16,10 @@ export default defineConfig({
|
|||
replacesTitle: false,
|
||||
},
|
||||
social: {
|
||||
github: 'https://github.com/manacore/manacore-monorepo',
|
||||
github: 'https://github.com/mana/mana-monorepo',
|
||||
},
|
||||
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'],
|
||||
sidebar: [
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@manacore/docs",
|
||||
"name": "@mana/docs",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ import { JwtAuthModule } from '@manacore/shared-nestjs-auth';
|
|||
@Module({
|
||||
imports: [
|
||||
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
|
||||
// app.module.ts
|
||||
import { ManaCoreModule } from '@mana-core/nestjs-integration';
|
||||
import { ManaModule } from '@mana-core/nestjs-integration';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ManaCoreModule.forRootAsync({
|
||||
ManaModule.forRootAsync({
|
||||
imports: [ConfigModule],
|
||||
useFactory: (config: ConfigService) => ({
|
||||
appId: config.get('APP_ID'),
|
||||
serviceKey: config.get('MANA_CORE_SERVICE_KEY'),
|
||||
serviceKey: config.get('MANA_SERVICE_KEY'),
|
||||
debug: config.get('NODE_ENV') === 'development',
|
||||
}),
|
||||
inject: [ConfigService],
|
||||
|
|
@ -143,7 +143,7 @@ export class ApiController {
|
|||
import { createAuthService } from '@manacore/shared-auth';
|
||||
|
||||
export const auth = createAuthService({
|
||||
authUrl: import.meta.env.PUBLIC_MANA_CORE_AUTH_URL,
|
||||
authUrl: import.meta.env.PUBLIC_MANA_AUTH_URL,
|
||||
});
|
||||
|
||||
// Usage in component
|
||||
|
|
@ -160,7 +160,7 @@ if (data) {
|
|||
import { createAuthService } from '@manacore/shared-auth';
|
||||
|
||||
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
|
||||
});
|
||||
```
|
||||
|
|
@ -190,7 +190,7 @@ export const auth = createAuthService({
|
|||
|
||||
```env
|
||||
# Required
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# For development bypass (optional)
|
||||
NODE_ENV=development
|
||||
|
|
@ -198,7 +198,7 @@ DEV_BYPASS_AUTH=true
|
|||
DEV_USER_ID=test-user-uuid
|
||||
|
||||
# For credit operations
|
||||
MANA_CORE_SERVICE_KEY=your-service-key
|
||||
MANA_SERVICE_KEY=your-service-key
|
||||
APP_ID=your-app-id
|
||||
```
|
||||
|
||||
|
|
@ -207,12 +207,12 @@ APP_ID=your-app-id
|
|||
<Tabs>
|
||||
<TabItem label="SvelteKit">
|
||||
```env
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem label="Expo">
|
||||
```env
|
||||
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
EXPO_PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
```
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ export default () => ({
|
|||
url: process.env.DATABASE_URL,
|
||||
},
|
||||
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
|
||||
environment:
|
||||
- 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:
|
||||
- mana-auth
|
||||
- postgres
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ services:
|
|||
image: ghcr.io/manacore/chat-backend:latest
|
||||
environment:
|
||||
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}
|
||||
depends_on:
|
||||
- mana-auth
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ The generator reads `.env.development` and creates app-specific `.env` files wit
|
|||
|
||||
| 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_PUBLIC_KEY` | JWT verification key | All 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 |
|
||||
|----------|-------------|---------|
|
||||
| `MANA_CORE_AUTH_PORT` | Service port | `3001` |
|
||||
| `MANA_CORE_AUTH_DATABASE_URL` | PostgreSQL connection | - |
|
||||
| `MANA_AUTH_PORT` | Service port | `3001` |
|
||||
| `MANA_AUTH_DATABASE_URL` | PostgreSQL connection | - |
|
||||
| `JWT_ACCESS_TOKEN_EXPIRY` | Access token TTL | `15m` |
|
||||
| `JWT_REFRESH_TOKEN_EXPIRY` | Refresh token TTL | `7d` |
|
||||
| `JWT_ISSUER` | JWT issuer claim | `manacore` |
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ OLLAMA_TIMEOUT=120000
|
|||
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/chat
|
||||
|
||||
# Auth
|
||||
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
MANA_AUTH_URL=http://localhost:3001
|
||||
|
||||
# Server
|
||||
PORT=3002
|
||||
|
|
@ -102,7 +102,7 @@ PORT=3002
|
|||
### Web
|
||||
|
||||
```env
|
||||
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_MANA_AUTH_URL=http://localhost:3001
|
||||
PUBLIC_BACKEND_URL=http://localhost:3002
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Cloudflare Pages configuration for Manacore Docs
|
||||
# Deployed via GitHub Actions (Direct Upload)
|
||||
|
||||
name = "manacore-docs"
|
||||
name = "mana-docs"
|
||||
compatibility_date = "2024-12-01"
|
||||
pages_build_output_dir = "dist"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
"type-check": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@manacore/shared-types": "workspace:*"
|
||||
"@mana/shared-types": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.9.3"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|||
|
||||
## 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
|
||||
- **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
|
||||
|
||||
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.
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
## 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
|
||||
|
||||
|
|
@ -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_ANON_KEY=your_supabase_anon_key
|
||||
MIDDLEWARE_URL=https://mana-core-middleware-111768794939.europe-west3.run.app
|
||||
PUBLIC_APP_NAME=ManaCore Web
|
||||
PUBLIC_APP_NAME=Mana Web
|
||||
NODE_ENV=development
|
||||
```
|
||||
|
||||
|
|
@ -199,7 +199,7 @@ The system supports multiple branded applications sharing the same authenticatio
|
|||
- **Memoro** - Voice recordings and memory management
|
||||
- **Cards** - AI-powered flashcard learning
|
||||
- **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.
|
||||
|
||||
|
|
@ -4,7 +4,7 @@ import tailwind from '@astrojs/tailwind';
|
|||
import icon from 'astro-icon';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://manacore.ai',
|
||||
site: 'https://mana.ai',
|
||||
integrations: [
|
||||
react(),
|
||||
tailwind(),
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@manacore/landing",
|
||||
"name": "@mana/landing",
|
||||
"version": "0.2.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
"@iconify-json/mdi": "^1.2.3",
|
||||
"@iconify-json/ph": "^1.2.2",
|
||||
"@iconify-json/tabler": "^1.2.19",
|
||||
"@manacore/shared-landing-ui": "workspace:*",
|
||||
"@mana/shared-landing-ui": "workspace:*",
|
||||
"astro": "^5.16.0",
|
||||
"astro-icon": "^1.1.5",
|
||||
"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 |
|
Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 387 KiB |
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 370 KiB |
|
Before Width: | Height: | Size: 433 KiB After Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 342 KiB After Width: | Height: | Size: 342 KiB |
|
Before Width: | Height: | Size: 465 KiB After Width: | Height: | Size: 465 KiB |
|
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 311 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |