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>
This commit is contained in:
Till JS 2026-04-05 20:00:13 +02:00
parent a787a27daa
commit 878424c003
1961 changed files with 3817 additions and 9671 deletions

View file

@ -6,7 +6,7 @@ export default defineConfig({
dialect: 'postgresql',
dbCredentials: {
url:
process.env.DATABASE_URL || 'postgresql://manacore:devpassword@localhost:5432/mana_platform',
process.env.DATABASE_URL || 'postgresql://mana:devpassword@localhost:5432/mana_platform',
},
schemaFilter: ['cards'],
verbose: true,

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/cards-database",
"name": "@mana/cards-database",
"version": "1.0.0",
"private": true,
"type": "module",

View file

@ -1,4 +1,4 @@
// Main entry point for @manacore/cards-database
// Main entry point for @mana/cards-database
// Export database client utilities
export { createClient, getDb, closeDb, type Database } from './client.js';

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/credits",
"name": "@mana/credits",
"version": "1.0.0",
"private": true,
"description": "Unified credit package — operations, service, and UI components",

View file

@ -1,13 +1,13 @@
/**
* @manacore/credits Unified credit package
* @mana/credits Unified credit package
*
* Consolidates credit-operations + shared-credit-service + shared-credit-ui.
*
* Usage:
* - Operations/costs: import { CreditOperationType, CREDIT_COSTS } from '@manacore/credits'
* - Service: import { createCreditService } from '@manacore/credits'
* - Web UI: import { CreditBalance } from '@manacore/credits/web'
* - Mobile UI: import { CreditBalance } from '@manacore/credits/mobile'
* - Operations/costs: import { CreditOperationType, CREDIT_COSTS } from '@mana/credits'
* - Service: import { createCreditService } from '@mana/credits'
* - Web UI: import { CreditBalance } from '@mana/credits/web'
* - Mobile UI: import { CreditBalance } from '@mana/credits/mobile'
*/
// === Operations (costs, types, metadata) ===

View file

@ -1,5 +1,5 @@
/**
* @manacore/credit-operations
* @mana/credit-operations
*
* Central credit operation definitions for all Mana apps.
* This package defines operation types, costs, and helper functions

View file

@ -1,30 +1,30 @@
/**
* @manacore/eslint-config
* @mana/eslint-config
*
* Shared ESLint configuration for Manacore monorepo.
* Import configs based on your project type:
*
* @example SvelteKit Web App
* ```js
* import { baseConfig, typescriptConfig, svelteConfig, prettierConfig } from '@manacore/eslint-config';
* import { baseConfig, typescriptConfig, svelteConfig, prettierConfig } from '@mana/eslint-config';
* export default [...baseConfig, ...typescriptConfig, ...svelteConfig, ...prettierConfig];
* ```
*
* @example Expo Mobile App
* ```js
* import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@manacore/eslint-config';
* import { baseConfig, typescriptConfig, reactConfig, prettierConfig } from '@mana/eslint-config';
* export default [...baseConfig, ...typescriptConfig, ...reactConfig, ...prettierConfig];
* ```
*
* @example NestJS Backend
* ```js
* import { baseConfig, typescriptConfig, nestjsConfig, prettierConfig } from '@manacore/eslint-config';
* import { baseConfig, typescriptConfig, nestjsConfig, prettierConfig } from '@mana/eslint-config';
* export default [...baseConfig, ...typescriptConfig, ...nestjsConfig, ...prettierConfig];
* ```
*
* @example TypeScript Package (no framework)
* ```js
* import { baseConfig, typescriptConfig, prettierConfig } from '@manacore/eslint-config';
* import { baseConfig, typescriptConfig, prettierConfig } from '@mana/eslint-config';
* export default [...baseConfig, ...typescriptConfig, ...prettierConfig];
* ```
*/

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/eslint-config",
"name": "@mana/eslint-config",
"version": "1.0.0",
"description": "Shared ESLint configuration for Manacore monorepo",
"private": true,
@ -35,6 +35,6 @@
"keywords": [
"eslint",
"eslint-config",
"manacore"
"mana"
]
}

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/feedback",
"name": "@mana/feedback",
"version": "1.0.0",
"private": true,
"description": "Unified feedback package — types, service, and UI components",

View file

@ -6,7 +6,7 @@
*
* @example
* ```ts
* import { createFeedbackService } from '@manacore/feedback';
* import { createFeedbackService } from '@mana/feedback';
* import { authStore } from '$lib/stores/auth.svelte';
*
* export const feedbackService = createFeedbackService({

View file

@ -1,5 +1,5 @@
/**
* @manacore/feedback Unified feedback package
* @mana/feedback Unified feedback package
*
* Consolidates shared-feedback-types + shared-feedback-service + shared-feedback-ui
* into a single package.

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/help",
"name": "@mana/help",
"version": "1.0.0",
"private": true,
"description": "Unified help package — types, content utilities, and UI components",

View file

@ -1,5 +1,5 @@
/**
* @manacore/help Unified help package
* @mana/help Unified help package
*
* Consolidates shared-help-types + shared-help-content + shared-help-ui.
*/

View file

@ -32,8 +32,8 @@ export function getManaFAQs(locale: string): FAQItem[] {
id: 'faq-mana-what',
question: isDE ? 'Was ist Mana?' : 'What is Mana?',
answer: isDE
? '<p><strong>Mana</strong> ist die universelle Währung im ManaCore-Ökosystem. Mit Mana bezahlst du für Premium-Funktionen wie KI-Generierungen, Cloud-Modelle und erweiterte Features — app-übergreifend mit einem einzigen Guthaben.</p><ul><li>1 Mana ≈ 1 Cent (im Abo)</li><li>Dein Guthaben gilt in <strong>allen ManaCore-Apps</strong></li><li>Jede App zeigt deinen aktuellen Stand unter <strong>Mana</strong> im Account-Menü</li></ul>'
: '<p><strong>Mana</strong> is the universal currency in the ManaCore ecosystem. With Mana you pay for premium features like AI generations, cloud models, and advanced features — across all apps with a single balance.</p><ul><li>1 Mana ≈ 1 cent (with subscription)</li><li>Your balance works across <strong>all ManaCore apps</strong></li><li>Each app shows your current balance under <strong>Mana</strong> in the account menu</li></ul>',
? '<p><strong>Mana</strong> ist die universelle Währung im Mana-Ökosystem. Mit Mana bezahlst du für Premium-Funktionen wie KI-Generierungen, Cloud-Modelle und erweiterte Features — app-übergreifend mit einem einzigen Guthaben.</p><ul><li>1 Mana ≈ 1 Cent (im Abo)</li><li>Dein Guthaben gilt in <strong>allen Mana-Apps</strong></li><li>Jede App zeigt deinen aktuellen Stand unter <strong>Mana</strong> im Account-Menü</li></ul>'
: '<p><strong>Mana</strong> is the universal currency in the Mana ecosystem. With Mana you pay for premium features like AI generations, cloud models, and advanced features — across all apps with a single balance.</p><ul><li>1 Mana ≈ 1 cent (with subscription)</li><li>Your balance works across <strong>all Mana apps</strong></li><li>Each app shows your current balance under <strong>Mana</strong> in the account menu</li></ul>',
category: 'billing',
order: 90,
language: isDE ? 'de' : 'en',
@ -59,8 +59,8 @@ export function getManaFAQs(locale: string): FAQItem[] {
id: 'faq-mana-use',
question: isDE ? 'Wofür wird Mana verwendet?' : 'What is Mana used for?',
answer: isDE
? '<p>Mana wird für Premium-Funktionen innerhalb der ManaCore-Apps verwendet:</p><ul><li><strong>Chat</strong>: Cloud-KI-Modelle (Claude, GPT, DeepSeek) — lokale Modelle sind kostenlos</li><li><strong>Picture</strong>: KI-Bildgenerierungen (nach 3 kostenlosen Generierungen)</li><li><strong>Context</strong>: KI-Textgenerierung und -analyse</li><li><strong>Weitere Apps</strong>: KI-gestützte Features in Planta, Questions, etc.</li></ul><p>Basis-Funktionen wie Aufgaben, Kalender, Kontakte, Dateien und Chats mit lokalen Modellen sind <strong>immer kostenlos</strong>.</p>'
: '<p>Mana is used for premium features within ManaCore apps:</p><ul><li><strong>Chat</strong>: Cloud AI models (Claude, GPT, DeepSeek) — local models are free</li><li><strong>Picture</strong>: AI image generations (after 3 free generations)</li><li><strong>Context</strong>: AI text generation and analysis</li><li><strong>More apps</strong>: AI-powered features in Planta, Questions, etc.</li></ul><p>Core features like tasks, calendar, contacts, files, and chats with local models are <strong>always free</strong>.</p>',
? '<p>Mana wird für Premium-Funktionen innerhalb der Mana-Apps verwendet:</p><ul><li><strong>Chat</strong>: Cloud-KI-Modelle (Claude, GPT, DeepSeek) — lokale Modelle sind kostenlos</li><li><strong>Picture</strong>: KI-Bildgenerierungen (nach 3 kostenlosen Generierungen)</li><li><strong>Context</strong>: KI-Textgenerierung und -analyse</li><li><strong>Weitere Apps</strong>: KI-gestützte Features in Planta, Questions, etc.</li></ul><p>Basis-Funktionen wie Aufgaben, Kalender, Kontakte, Dateien und Chats mit lokalen Modellen sind <strong>immer kostenlos</strong>.</p>'
: '<p>Mana is used for premium features within Mana apps:</p><ul><li><strong>Chat</strong>: Cloud AI models (Claude, GPT, DeepSeek) — local models are free</li><li><strong>Picture</strong>: AI image generations (after 3 free generations)</li><li><strong>Context</strong>: AI text generation and analysis</li><li><strong>More apps</strong>: AI-powered features in Planta, Questions, etc.</li></ul><p>Core features like tasks, calendar, contacts, files, and chats with local models are <strong>always free</strong>.</p>',
category: 'billing',
order: 92,
language: isDE ? 'de' : 'en',
@ -81,8 +81,8 @@ export function getManaFeature(locale: string): FeatureItem {
id: 'feature-mana',
title: isDE ? 'Mana-Credits' : 'Mana Credits',
description: isDE
? 'Universelles Guthaben für Premium-Features in allen ManaCore-Apps — 150 Mana/Monat kostenlos.'
: 'Universal balance for premium features across all ManaCore apps — 150 Mana/month for free.',
? 'Universelles Guthaben für Premium-Features in allen Mana-Apps — 150 Mana/Monat kostenlos.'
: 'Universal balance for premium features across all Mana apps — 150 Mana/month for free.',
icon: '✨',
category: 'core',
highlights: isDE

View file

@ -53,8 +53,8 @@ export function getPrivacyFAQs(locale: string, options: PrivacyFAQOptions): FAQI
? `Wie werden meine ${options.dataTypeDE} geschützt?`
: `How are my ${options.dataTypeEN} protected?`,
answer: isDE
? `<p>Deine Daten sind sicher bei ManaCore:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Datenverkauf</strong>: Deine ${options.dataTypeDE} werden nie an Dritte verkauft oder für Werbung genutzt</li><li><strong>Self-Hosted</strong>: ManaCore läuft auf eigenen Servern — keine Abhängigkeit von Cloud-Anbietern wie AWS oder Google</li><li><strong>Open Source</strong>: Der Quellcode ist einsehbar — Transparenz statt Vertrauen</li>${extraDE}</ul>`
: `<p>Your data is secure with ManaCore:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>No data selling</strong>: Your ${options.dataTypeEN} are never sold to third parties or used for advertising</li><li><strong>Self-hosted</strong>: ManaCore runs on its own servers — no dependency on cloud providers like AWS or Google</li><li><strong>Open source</strong>: The source code is viewable — transparency over trust</li>${extraEN}</ul>`,
? `<p>Deine Daten sind sicher bei Mana:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Datenverkauf</strong>: Deine ${options.dataTypeDE} werden nie an Dritte verkauft oder für Werbung genutzt</li><li><strong>Self-Hosted</strong>: Mana läuft auf eigenen Servern — keine Abhängigkeit von Cloud-Anbietern wie AWS oder Google</li><li><strong>Open Source</strong>: Der Quellcode ist einsehbar — Transparenz statt Vertrauen</li>${extraDE}</ul>`
: `<p>Your data is secure with Mana:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>No data selling</strong>: Your ${options.dataTypeEN} are never sold to third parties or used for advertising</li><li><strong>Self-hosted</strong>: Mana runs on its own servers — no dependency on cloud providers like AWS or Google</li><li><strong>Open source</strong>: The source code is viewable — transparency over trust</li>${extraEN}</ul>`,
category: 'privacy',
order: 95,
language: isDE ? 'de' : 'en',
@ -66,11 +66,11 @@ export function getPrivacyFAQs(locale: string, options: PrivacyFAQOptions): FAQI
{
id: 'faq-tech-independence',
question: isDE
? 'Wie unabhängig ist ManaCore von großen Tech-Konzernen?'
: 'How independent is ManaCore from big tech companies?',
? 'Wie unabhängig ist Mana von großen Tech-Konzernen?'
: 'How independent is Mana from big tech companies?',
answer: isDE
? '<p>ManaCore ist bewusst <strong>technologisch unabhängig</strong> aufgebaut:</p><ul><li><strong>Eigene Server</strong>: Alle Dienste laufen auf einem eigenen Mac Mini Server — kein AWS, kein Google Cloud, kein Azure</li><li><strong>Eigene KI</strong>: Lokale KI-Modelle (Gemma, Qwen, LLaVA) laufen auf unserem eigenen GPU-Server mit NVIDIA RTX 3090 — deine Daten verlassen nie unsere Infrastruktur</li><li><strong>Keine Google/Apple-Anmeldung</strong>: Eigenes Auth-System (Mana Core Auth) — kein OAuth über Drittanbieter, keine Tracking-Cookies von Google oder Facebook</li><li><strong>Eigene Suche</strong>: SearXNG Meta-Suchmaschine statt Google Search API</li><li><strong>Eigener Speicher</strong>: MinIO (S3-kompatibel) statt AWS S3 oder Google Cloud Storage</li><li><strong>Eigene Datenbank</strong>: PostgreSQL auf eigenem Server statt Cloud-Datenbanken</li><li><strong>Keine Tracking-SDKs</strong>: Kein Google Analytics, kein Facebook Pixel, kein Amplitude — eigene Analytics mit Umami</li></ul><p>Das Ziel: Ein digitales Zuhause, das dir gehört — nicht Big Tech.</p>'
: '<p>ManaCore is deliberately built to be <strong>technologically independent</strong>:</p><ul><li><strong>Own servers</strong>: All services run on a dedicated Mac Mini server — no AWS, no Google Cloud, no Azure</li><li><strong>Own AI</strong>: Local AI models (Gemma, Qwen, LLaVA) run on our own GPU server with NVIDIA RTX 3090 — your data never leaves our infrastructure</li><li><strong>No Google/Apple login</strong>: Own auth system (Mana Core Auth) — no OAuth via third parties, no tracking cookies from Google or Facebook</li><li><strong>Own search</strong>: SearXNG meta-search engine instead of Google Search API</li><li><strong>Own storage</strong>: MinIO (S3-compatible) instead of AWS S3 or Google Cloud Storage</li><li><strong>Own database</strong>: PostgreSQL on own server instead of cloud databases</li><li><strong>No tracking SDKs</strong>: No Google Analytics, no Facebook Pixel, no Amplitude — own analytics with Umami</li></ul><p>The goal: A digital home that belongs to you — not big tech.</p>',
? '<p>Mana ist bewusst <strong>technologisch unabhängig</strong> aufgebaut:</p><ul><li><strong>Eigene Server</strong>: Alle Dienste laufen auf einem eigenen Mac Mini Server — kein AWS, kein Google Cloud, kein Azure</li><li><strong>Eigene KI</strong>: Lokale KI-Modelle (Gemma, Qwen, LLaVA) laufen auf unserem eigenen GPU-Server mit NVIDIA RTX 3090 — deine Daten verlassen nie unsere Infrastruktur</li><li><strong>Keine Google/Apple-Anmeldung</strong>: Eigenes Auth-System (Mana Core Auth) — kein OAuth über Drittanbieter, keine Tracking-Cookies von Google oder Facebook</li><li><strong>Eigene Suche</strong>: SearXNG Meta-Suchmaschine statt Google Search API</li><li><strong>Eigener Speicher</strong>: MinIO (S3-kompatibel) statt AWS S3 oder Google Cloud Storage</li><li><strong>Eigene Datenbank</strong>: PostgreSQL auf eigenem Server statt Cloud-Datenbanken</li><li><strong>Keine Tracking-SDKs</strong>: Kein Google Analytics, kein Facebook Pixel, kein Amplitude — eigene Analytics mit Umami</li></ul><p>Das Ziel: Ein digitales Zuhause, das dir gehört — nicht Big Tech.</p>'
: '<p>Mana is deliberately built to be <strong>technologically independent</strong>:</p><ul><li><strong>Own servers</strong>: All services run on a dedicated Mac Mini server — no AWS, no Google Cloud, no Azure</li><li><strong>Own AI</strong>: Local AI models (Gemma, Qwen, LLaVA) run on our own GPU server with NVIDIA RTX 3090 — your data never leaves our infrastructure</li><li><strong>No Google/Apple login</strong>: Own auth system (Mana Core Auth) — no OAuth via third parties, no tracking cookies from Google or Facebook</li><li><strong>Own search</strong>: SearXNG meta-search engine instead of Google Search API</li><li><strong>Own storage</strong>: MinIO (S3-compatible) instead of AWS S3 or Google Cloud Storage</li><li><strong>Own database</strong>: PostgreSQL on own server instead of cloud databases</li><li><strong>No tracking SDKs</strong>: No Google Analytics, no Facebook Pixel, no Amplitude — own analytics with Umami</li></ul><p>The goal: A digital home that belongs to you — not big tech.</p>',
category: 'privacy',
order: 96,
language: isDE ? 'de' : 'en',

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/local-llm",
"name": "@mana/local-llm",
"version": "0.1.0",
"private": true,
"description": "Client-side LLM inference via WebLLM (Qwen 2.5 1.5B) with Svelte 5 reactive stores",

View file

@ -2,7 +2,7 @@
* Svelte 5 reactive integration for LocalLLMEngine.
*
* Usage in a Svelte component:
* import { getLocalLlmStatus, loadLocalLlm, generateText } from '@manacore/local-llm';
* import { getLocalLlmStatus, loadLocalLlm, generateText } from '@mana/local-llm';
*
* const status = getLocalLlmStatus();
* loadLocalLlm();

View file

@ -1,6 +1,6 @@
/**
* Types for client-side LLM inference.
* Aligned with @manacore/shared-llm ChatMessage/ChatResult where possible.
* Aligned with @mana/shared-llm ChatMessage/ChatResult where possible.
*/
export interface ChatMessage {

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/local-store",
"name": "@mana/local-store",
"version": "0.1.0",
"private": true,
"description": "Local-first data layer with Dexie.js, reactive Svelte 5 queries, and sync engine",

View file

@ -42,7 +42,7 @@ export class LocalDatabase extends Dexie {
private _seeded = false;
constructor(appId: string, collections: CollectionConfig<BaseRecord>[]) {
super(`manacore-${appId}`);
super(`mana-${appId}`);
this._appId = appId;
this._collections = collections;

View file

@ -8,7 +8,7 @@
*
* @example
* ```ts
* import { createLocalStore } from '@manacore/local-store';
* import { createLocalStore } from '@mana/local-store';
*
* const store = createLocalStore({
* appId: 'todo',
@ -44,7 +44,7 @@ import type { BaseRecord, CollectionConfig, SyncStatus } from './types.js';
/** Client ID persisted in localStorage for device identification. */
function getOrCreateClientId(): string {
const key = 'manacore-client-id';
const key = 'mana-client-id';
if (typeof localStorage === 'undefined') return 'ssr-' + Math.random().toString(36).slice(2);
let clientId = localStorage.getItem(key);

View file

@ -8,7 +8,7 @@
* @example
* ```svelte
* <script lang="ts">
* import { useLiveQuery } from '@manacore/local-store/svelte';
* import { useLiveQuery } from '@mana/local-store/svelte';
*
* const tasks = useLiveQuery(() => taskCollection.getAll({ isCompleted: false }));
* </script>

View file

@ -4,7 +4,7 @@
* @example
* ```svelte
* <script lang="ts">
* import { useSyncStatus } from '@manacore/local-store/svelte';
* import { useSyncStatus } from '@mana/local-store/svelte';
* const sync = useSyncStatus(syncEngine);
* </script>
*

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/notify-client",
"name": "@mana/notify-client",
"version": "1.0.0",
"description": "Client SDK for mana-notify notification service",
"main": "./dist/index.js",

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/qr-export",
"name": "@mana/qr-export",
"version": "0.1.0",
"private": true,
"description": "QR code export/import for personal data (contacts, events, todos, user context)",
@ -32,7 +32,7 @@
"peerDependencies": {
"svelte": "^5.0.0",
"jsqr": "^1.4.0",
"@manacore/wallpaper-generator": "workspace:*"
"@mana/wallpaper-generator": "workspace:*"
},
"peerDependenciesMeta": {
"svelte": {
@ -41,7 +41,7 @@
"jsqr": {
"optional": true
},
"@manacore/wallpaper-generator": {
"@mana/wallpaper-generator": {
"optional": true
}
}

View file

@ -1,12 +1,12 @@
/**
* @manacore/qr-export
* @mana/qr-export
*
* QR code export/import for personal data (contacts, events, todos, user context).
* Compresses data to fit within a single QR code (~2,500 bytes).
*
* @example
* ```ts
* import { createManaQRExport, decode } from '@manacore/qr-export';
* import { createManaQRExport, decode } from '@mana/qr-export';
*
* // Create export
* const result = createManaQRExport()

View file

@ -4,8 +4,8 @@
* @example
* ```svelte
* <script>
* import { ManaQRCode, ManaQRScanner } from '@manacore/qr-export/svelte';
* import { createManaQRExport } from '@manacore/qr-export';
* import { ManaQRCode, ManaQRScanner } from '@mana/qr-export/svelte';
* import { createManaQRExport } from '@mana/qr-export';
*
* const exportData = createManaQRExport()
* .user({ n: 'Till' })

View file

@ -1,7 +1,7 @@
/**
* QR Code Wallpaper Generation
*
* Creates device wallpapers from QR codes using @manacore/wallpaper-generator.
* Creates device wallpapers from QR codes using @mana/wallpaper-generator.
*/
import type { ManaQRExport, EncodeResult } from './types';
@ -11,12 +11,12 @@ import type {
DeviceOption,
Layout,
Background,
} from '@manacore/wallpaper-generator';
} from '@mana/wallpaper-generator';
import {
createWallpaperGenerator,
DEFAULT_CENTER_LAYOUT,
DEFAULT_BACKGROUND,
} from '@manacore/wallpaper-generator';
} from '@mana/wallpaper-generator';
import { toDataURL } from './generate';
/** Options for QR wallpaper generation */
@ -52,7 +52,7 @@ const DEFAULT_QR_WALLPAPER_OPTIONS: Partial<QRWallpaperOptions> = {
*
* @example
* ```ts
* import { toWallpaper } from '@manacore/qr-export/wallpaper';
* import { toWallpaper } from '@mana/qr-export/wallpaper';
*
* const result = await toWallpaper(encodeResult, {
* device: 'iphone-15-pro-max',

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-api-client",
"name": "@mana/shared-api-client",
"version": "1.0.0",
"private": true,
"type": "module",
@ -16,7 +16,7 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@manacore/shared-utils": "workspace:*"
"@mana/shared-utils": "workspace:*"
},
"devDependencies": {
"typescript": "^5.9.3"

View file

@ -12,7 +12,7 @@ import {
isRetryableError,
parseErrorResponse,
} from './utils';
import { sleep } from '@manacore/shared-utils';
import { sleep } from '@mana/shared-utils';
const DEFAULT_TIMEOUT = 30000;
const DEFAULT_RETRIES = 0;
@ -23,7 +23,7 @@ const DEFAULT_RETRY_DELAY = 1000;
*
* @example
* ```typescript
* import { createApiClient } from '@manacore/shared-api-client';
* import { createApiClient } from '@mana/shared-api-client';
* import { authStore } from '$lib/stores/auth.svelte';
*
* export const api = createApiClient({

View file

@ -1,12 +1,12 @@
/**
* @manacore/shared-api-client
* @mana/shared-api-client
*
* Unified API client for all ManaCore web applications.
* Unified API client for all Mana web applications.
* Provides consistent error handling, token management, and retry logic.
*
* @example
* ```typescript
* import { createApiClient } from '@manacore/shared-api-client';
* import { createApiClient } from '@mana/shared-api-client';
* import { authStore } from '$lib/stores/auth.svelte';
*
* // Create client instance

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-auth-ui",
"name": "@mana/shared-auth-ui",
"version": "1.0.0",
"private": true,
"description": "Shared authentication UI components for Mana apps",
@ -23,9 +23,9 @@
"test:watch": "vitest"
},
"peerDependencies": {
"@manacore/shared-auth": "workspace:*",
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@mana/shared-auth": "workspace:*",
"@mana/shared-branding": "workspace:*",
"@mana/shared-icons": "workspace:*",
"svelte": "^5.0.0"
},
"devDependencies": {

View file

@ -17,7 +17,7 @@
<script lang="ts">
import { onMount } from 'svelte';
import type { Snippet } from 'svelte';
import { hasAppAccess, ACCESS_TIER_LABELS, type AccessTier } from '@manacore/shared-branding';
import { hasAppAccess, ACCESS_TIER_LABELS, type AccessTier } from '@mana/shared-branding';
/**
* Minimal interface that all app auth stores must satisfy.

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { CloudArrowUp, ArrowsClockwise, Lock, Sparkle, Info, X } from '@manacore/shared-icons';
import { CloudArrowUp, ArrowsClockwise, Lock, Sparkle, Info, X } from '@mana/shared-icons';
import type { AuthGateTranslations, AuthGateAction } from '../types';
const defaultTranslationsDE: Record<AuthGateAction, { title: string; description: string }> = {

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { Eye, EyeSlash } from '@manacore/shared-icons';
import { Eye, EyeSlash } from '@mana/shared-icons';
import PasswordStrength from './PasswordStrength.svelte';
interface Props {

View file

@ -1,6 +1,6 @@
<script lang="ts">
import { onMount } from 'svelte';
import { UserPlus, X, ArrowRight } from '@manacore/shared-icons';
import { UserPlus, X, ArrowRight } from '@mana/shared-icons';
import { startGuestSession, shouldShowGuestNudge, dismissGuestNudge } from '../utils/guestNudge';
interface Props {

View file

@ -1,5 +1,5 @@
<script lang="ts">
import { getManaApp, type AppIconId } from '@manacore/shared-branding';
import { getManaApp, type AppIconId } from '@mana/shared-branding';
import {
X,
SignIn,
@ -10,7 +10,7 @@
ShieldCheck,
Sparkle,
ArrowSquareOut,
} from '@manacore/shared-icons';
} from '@mana/shared-icons';
import { markGuestWelcomeSeen } from '../utils/guestWelcome';
import type { GuestWelcomeTranslations } from '../types';
@ -40,7 +40,7 @@
/** Default features per app (German) */
const defaultFeaturesDE: Record<string, string[]> = {
manacore: ['Alle deine Apps an einem Ort', 'Quelloffen & unabhängig', 'Privat by Design'],
mana: ['Alle deine Apps an einem Ort', 'Quelloffen & unabhängig', 'Privat by Design'],
contacts: ['Alle Kontakte an einem Ort', 'Quelloffen & unabhängig', 'Privat by Design'],
chat: ['Dein persönlicher KI-Assistent', 'Quelloffen & unabhängig', 'Privat by Design'],
todo: ['Organisiere deinen Alltag', 'Quelloffen & unabhängig', 'Privat by Design'],
@ -73,7 +73,7 @@
/** Default features per app (English) */
const defaultFeaturesEN: Record<string, string[]> = {
manacore: ['All your apps in one place', 'Open-source & independent', 'Private by design'],
mana: ['All your apps in one place', 'Open-source & independent', 'Private by design'],
contacts: ['All your contacts in one place', 'Open-source & independent', 'Private by design'],
chat: ['Your personal AI assistant', 'Open-source & independent', 'Private by design'],
todo: ['Organize your day', 'Open-source & independent', 'Private by design'],
@ -329,7 +329,7 @@
<!-- Learn more -->
<a
href="https://manacore-landing.pages.dev"
href="https://mana-landing.pages.dev"
target="_blank"
rel="noopener noreferrer"
class="learn-more-link"

View file

@ -1,7 +1,7 @@
<script lang="ts">
import { onMount } from 'svelte';
import { onSessionExpired, isSessionExpired, resetSessionExpired } from '@manacore/shared-auth';
import { Warning, X, SignOut } from '@manacore/shared-icons';
import { onSessionExpired, isSessionExpired, resetSessionExpired } from '@mana/shared-auth';
import { Warning, X, SignOut } from '@mana/shared-icons';
interface Props {
/** Login page URL. Defaults to '/login'. */

View file

@ -33,7 +33,7 @@ export {
} from './utils/guestNudge';
export { parseUserAgent, getDeviceType, formatUserAgent } from './utils/userAgent';
// Auth Stores (absorbed from @manacore/shared-auth-stores)
// Auth Stores (absorbed from @mana/shared-auth-stores)
export { createManaAuthStore } from './stores/createManaAuthStore.svelte';
export type { ManaAuthStoreConfig, ManaAuthStore } from './stores/createManaAuthStore.svelte';
export { createAuthStore } from './stores/createAuthStore.svelte';

View file

@ -1,7 +1,7 @@
<script lang="ts">
import type { Component, Snippet } from 'svelte';
import type { AuthResult } from '../types';
import { Key, ArrowLeft, EnvelopeOpen, SignIn, Sun, Moon } from '@manacore/shared-icons';
import { Key, ArrowLeft, EnvelopeOpen, SignIn, Sun, Moon } from '@mana/shared-icons';
type PageMode = 'form' | 'success';

View file

@ -1,7 +1,7 @@
<script lang="ts">
import type { Component, Snippet } from 'svelte';
import type { AuthResult } from '../types';
import { Check, Warning, Eye, EyeSlash, SignIn, Sun, Moon } from '@manacore/shared-icons';
import { Check, Warning, Eye, EyeSlash, SignIn, Sun, Moon } from '@mana/shared-icons';
/** Translation strings for the login page */
export interface LoginTranslations {
title: string;
@ -158,8 +158,8 @@
// Check if we're in development mode (early for state init)
const isDevMode = typeof import.meta !== 'undefined' && import.meta.env?.DEV;
// Local dev credentials (run `pnpm db:seed:dev` in mana-core-auth to create this user)
const DEV_EMAIL = 'dev@manacore.local';
// Local dev credentials (run `pnpm db:seed:dev` in mana-auth to create this user)
const DEV_EMAIL = 'dev@mana.local';
const DEV_PASSWORD = 'devpassword123';
let loading = $state(false);

View file

@ -1,7 +1,7 @@
<script lang="ts">
import type { Component } from 'svelte';
import type { AuthResult } from '../types';
import { Eye, EyeSlash, UserPlus, ArrowLeft, Sun, Moon } from '@manacore/shared-icons';
import { Eye, EyeSlash, UserPlus, ArrowLeft, Sun, Moon } from '@mana/shared-icons';
import PasswordStrength from '../components/PasswordStrength.svelte';
import type { Snippet } from 'svelte';

View file

@ -7,7 +7,7 @@
* @example
* ```ts
* // In your app's auth store file
* import { createAuthStore } from '@manacore/shared-auth-stores';
* import { createAuthStore } from '@mana/shared-auth-stores';
* import { authService } from '$lib/auth';
* import type { AppUser } from '$lib/types';
*

View file

@ -1,14 +1,14 @@
/**
* Mana Auth Store Factory
*
* Creates a complete auth store using @manacore/shared-auth.
* Creates a complete auth store using @mana/shared-auth.
* Replaces the ~350 lines of duplicated auth.svelte.ts in each app
* with a single factory call.
*
* @example
* ```ts
* // apps/todo/apps/web/src/lib/stores/auth.svelte.ts
* import { createManaAuthStore } from '@manacore/shared-auth-stores';
* import { createManaAuthStore } from '@mana/shared-auth-stores';
*
* export const authStore = createManaAuthStore({
* devBackendPort: 3031,
@ -17,7 +17,7 @@
*
* @example With post-login callback
* ```ts
* import { createManaAuthStore } from '@manacore/shared-auth-stores';
* import { createManaAuthStore } from '@mana/shared-auth-stores';
* import { apiClient } from '$lib/api/client';
*
* export const authStore = createManaAuthStore({
@ -31,7 +31,7 @@
*/
import { browser } from '$app/environment';
import { initializeWebAuth, type UserData, type AuthServiceInterface } from '@manacore/shared-auth';
import { initializeWebAuth, type UserData, type AuthServiceInterface } from '@mana/shared-auth';
export interface ManaAuthStoreConfig {
/** Dev backend port (e.g. 3031 for todo). Only used in development. */
@ -51,12 +51,12 @@ export function createManaAuthStore(config: ManaAuthStoreConfig = {}) {
// URL resolution (runtime, not build-time)
function getAuthUrl(): string {
if (browser && typeof window !== 'undefined') {
const injected = (window as unknown as { __PUBLIC_MANA_CORE_AUTH_URL__?: string })
.__PUBLIC_MANA_CORE_AUTH_URL__;
const injected = (window as unknown as { __PUBLIC_MANA_AUTH_URL__?: string })
.__PUBLIC_MANA_AUTH_URL__;
if (injected) return injected;
return import.meta.env.DEV ? devAuthUrl : '';
}
return process.env.PUBLIC_MANA_CORE_AUTH_URL || devAuthUrl;
return process.env.PUBLIC_MANA_AUTH_URL || devAuthUrl;
}
function getBackendUrl(): string {

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-auth",
"name": "@mana/shared-auth",
"version": "0.1.0",
"private": true,
"description": "Shared authentication utilities for Manacore apps",
@ -18,7 +18,7 @@
"lint": "eslint ."
},
"dependencies": {
"@manacore/shared-types": "workspace:*",
"@mana/shared-types": "workspace:*",
"@simplewebauthn/browser": "^13.3.0",
"base64-js": "^1.5.1"
},
@ -34,7 +34,7 @@
}
},
"keywords": [
"manacore",
"mana",
"auth",
"jwt",
"token"

View file

@ -70,7 +70,7 @@ export function isDeviceInitialized(): boolean {
export function createWebDeviceAdapter(): DeviceManagerAdapter {
// Generate a persistent device ID for web
const getOrCreateDeviceId = (): string => {
const storageKey = '@manacore/deviceId';
const storageKey = '@mana/deviceId';
let deviceId = localStorage.getItem(storageKey);
if (!deviceId) {
deviceId = generateUUID();
@ -111,7 +111,7 @@ export function createWebDeviceAdapter(): DeviceManagerAdapter {
};
},
async getStoredDeviceId(): Promise<string | null> {
return localStorage.getItem('@manacore/deviceId');
return localStorage.getItem('@mana/deviceId');
},
};
}

View file

@ -5,7 +5,7 @@
* from the Contacts app backend.
*/
import type { ContactSummary } from '@manacore/shared-types';
import type { ContactSummary } from '@mana/shared-types';
export interface ContactsClientConfig {
/** Base URL of the Contacts API (e.g., http://localhost:3015/api/v1) */

View file

@ -89,7 +89,7 @@ export {
*
* @example
* ```typescript
* import { initializeWebAuth } from '@manacore/shared-auth';
* import { initializeWebAuth } from '@mana/shared-auth';
*
* // Basic setup (interceptor only for auth URL)
* const { authService, tokenManager } = initializeWebAuth({

View file

@ -75,7 +75,7 @@ console.log(memoro.primaryColor); // "#f8d62b"
| App | Name | Primary Color | Tagline |
| ---------------- | ------------- | ---------------- | ---------------- |
| `memoro` | Memoro | #f8d62b (Gold) | AI Voice Memos |
| `manacore` | ManaCore | #6366f1 (Indigo) | Central Hub |
| `manacore` | Mana | #6366f1 (Indigo) | Central Hub |
| `cards` | Cards | #8b5cf6 (Purple) | AI Flashcards |
| `maerchenzauber` | Märchenzauber | #ec4899 (Pink) | AI Story Creator |

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-branding",
"name": "@mana/shared-branding",
"version": "1.0.0",
"private": true,
"type": "module",

View file

@ -12,8 +12,8 @@ const svgToDataUrl = (svg: string): string => {
// Memoro icon SVG
const memoroSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M512 130C722.973 130 894 301.027 894 512C894 722.973 722.973 894 512 894C301.027 894 130 722.973 130 512C130 301.027 301.027 130 512 130ZM328.076 324.825C322.366 323.075 316.506 323.345 310.81 324.903C299.274 328.059 288.955 336.364 283.562 342.26C260.131 367.874 245.424 391.558 236.524 418.066C227.606 444.63 224.432 474.286 224.432 512C224.432 670.525 352.874 783.368 512 783.368C671.126 783.368 799.568 670.525 799.568 512C799.568 474.285 796.393 444.629 787.475 418.064C778.574 391.555 763.867 367.872 740.435 342.257C735.237 336.575 723.981 328.835 711.804 325.948C705.777 324.52 699.735 324.331 694.177 325.975C688.685 327.599 683.404 331.086 678.906 337.479L569.857 492.133C554.287 513.249 535.932 525.917 515.688 526.654C495.436 527.391 474.644 516.138 454.368 492.428L345.154 337.57C339.593 330.392 333.746 326.563 328.076 324.825Z" fill="#F8D62B"/><path d="M512 130C722.973 130 894 301.027 894 512C894 722.973 722.973 894 512 894C301.027 894 130 722.973 130 512C130 301.027 301.027 130 512 130ZM328.076 324.825C322.366 323.075 316.506 323.345 310.81 324.903C299.274 328.059 288.955 336.364 283.562 342.26C260.131 367.874 245.424 391.558 236.524 418.066C227.606 444.63 224.432 474.286 224.432 512C224.432 670.525 352.874 783.368 512 783.368C671.126 783.368 799.568 670.525 799.568 512C799.568 474.285 796.393 444.629 787.475 418.064C778.574 391.555 763.867 367.872 740.435 342.257C735.237 336.575 723.981 328.835 711.804 325.948C705.777 324.52 699.735 324.331 694.177 325.975C688.685 327.599 683.404 331.086 678.906 337.479L569.857 492.133C554.287 513.249 535.932 525.917 515.688 526.654C495.436 527.391 474.644 516.138 454.368 492.428L345.154 337.57C339.593 330.392 333.746 326.563 328.076 324.825Z" stroke="#FFE97B" stroke-width="8"/></svg>`;
// ManaCore icon SVG
const manacoreSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="512.5" cy="512.5" r="403.614" stroke="#004D81" stroke-width="95.7727"/><path d="M583.883 512.512C582.858 513.285 367.199 676.079 277.02 676.088C186.632 676.088 113.352 602.857 113.347 512.512C113.347 422.164 186.63 348.914 277.02 348.914C367.414 348.923 583.883 512.512 583.883 512.512ZM440.67 512.512C439.972 511.984 332.285 430.713 287.237 430.713C242.045 430.714 205.402 467.339 205.402 512.512C205.402 557.686 242.045 594.31 287.237 594.31C332.256 594.31 439.828 513.148 440.67 512.512Z" fill="url(#paint0_linear_1157_667)"/><path d="M512.512 440.52C513.285 441.544 676.079 657.203 676.088 747.383C676.088 837.77 602.857 911.051 512.512 911.055C422.163 911.055 348.914 837.773 348.914 747.383C348.923 656.988 512.512 440.52 512.512 440.52ZM512.512 583.733C511.984 584.431 430.713 692.117 430.713 737.165C430.714 782.357 467.339 819 512.512 819C557.685 819 594.31 782.357 594.31 737.165C594.31 692.146 513.148 584.574 512.512 583.733Z" fill="url(#paint1_linear_1157_667)"/><path d="M440.521 512.488C441.546 511.715 657.205 348.921 747.385 348.912C837.772 348.912 911.053 422.143 911.057 512.488C911.057 602.836 837.775 676.086 747.385 676.086C656.99 676.077 440.521 512.488 440.521 512.488ZM583.735 512.488C584.433 513.016 692.119 594.287 737.167 594.287C782.359 594.286 819.002 557.661 819.002 512.488C819.002 467.314 782.359 430.69 737.167 430.69C692.148 430.69 584.576 511.852 583.735 512.488Z" fill="url(#paint2_linear_1157_667)"/><path d="M512.488 583.883C511.715 582.858 348.921 367.199 348.912 277.02C348.912 186.632 422.143 113.352 512.488 113.347C602.836 113.347 676.086 186.63 676.086 277.02C676.077 367.414 512.488 583.883 512.488 583.883ZM512.488 440.67C513.016 439.972 594.287 332.285 594.287 287.237C594.285 242.045 557.661 205.402 512.488 205.402C467.314 205.402 430.69 242.045 430.69 287.237C430.69 332.256 511.852 439.828 512.488 440.67Z" fill="url(#paint3_linear_1157_667)"/><defs><linearGradient id="paint0_linear_1157_667" x1="583.883" y1="512.501" x2="113.347" y2="512.501" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint1_linear_1157_667" x1="512.501" y1="440.52" x2="512.501" y2="911.055" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint2_linear_1157_667" x1="440.521" y1="512.499" x2="911.057" y2="512.499" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint3_linear_1157_667" x1="512.499" y1="583.883" x2="512.499" y2="113.347" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient></defs></svg>`;
// Mana icon SVG
const manaSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="512.5" cy="512.5" r="403.614" stroke="#004D81" stroke-width="95.7727"/><path d="M583.883 512.512C582.858 513.285 367.199 676.079 277.02 676.088C186.632 676.088 113.352 602.857 113.347 512.512C113.347 422.164 186.63 348.914 277.02 348.914C367.414 348.923 583.883 512.512 583.883 512.512ZM440.67 512.512C439.972 511.984 332.285 430.713 287.237 430.713C242.045 430.714 205.402 467.339 205.402 512.512C205.402 557.686 242.045 594.31 287.237 594.31C332.256 594.31 439.828 513.148 440.67 512.512Z" fill="url(#paint0_linear_1157_667)"/><path d="M512.512 440.52C513.285 441.544 676.079 657.203 676.088 747.383C676.088 837.77 602.857 911.051 512.512 911.055C422.163 911.055 348.914 837.773 348.914 747.383C348.923 656.988 512.512 440.52 512.512 440.52ZM512.512 583.733C511.984 584.431 430.713 692.117 430.713 737.165C430.714 782.357 467.339 819 512.512 819C557.685 819 594.31 782.357 594.31 737.165C594.31 692.146 513.148 584.574 512.512 583.733Z" fill="url(#paint1_linear_1157_667)"/><path d="M440.521 512.488C441.546 511.715 657.205 348.921 747.385 348.912C837.772 348.912 911.053 422.143 911.057 512.488C911.057 602.836 837.775 676.086 747.385 676.086C656.99 676.077 440.521 512.488 440.521 512.488ZM583.735 512.488C584.433 513.016 692.119 594.287 737.167 594.287C782.359 594.286 819.002 557.661 819.002 512.488C819.002 467.314 782.359 430.69 737.167 430.69C692.148 430.69 584.576 511.852 583.735 512.488Z" fill="url(#paint2_linear_1157_667)"/><path d="M512.488 583.883C511.715 582.858 348.921 367.199 348.912 277.02C348.912 186.632 422.143 113.352 512.488 113.347C602.836 113.347 676.086 186.63 676.086 277.02C676.077 367.414 512.488 583.883 512.488 583.883ZM512.488 440.67C513.016 439.972 594.287 332.285 594.287 287.237C594.285 242.045 557.661 205.402 512.488 205.402C467.314 205.402 430.69 242.045 430.69 287.237C430.69 332.256 511.852 439.828 512.488 440.67Z" fill="url(#paint3_linear_1157_667)"/><defs><linearGradient id="paint0_linear_1157_667" x1="583.883" y1="512.501" x2="113.347" y2="512.501" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint1_linear_1157_667" x1="512.501" y1="440.52" x2="512.501" y2="911.055" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint2_linear_1157_667" x1="440.521" y1="512.499" x2="911.057" y2="512.499" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient><linearGradient id="paint3_linear_1157_667" x1="512.499" y1="583.883" x2="512.499" y2="113.347" gradientUnits="userSpaceOnUse"><stop offset="0.211538" stop-color="#004471"/><stop offset="0.788462" stop-color="#0099FF"/></linearGradient></defs></svg>`;
// Mana icon (single droplet)
const manaSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M515.714 104.592C516.403 105.506 586.851 198.868 657.146 311.452C692.29 367.739 727.445 428.91 753.828 485.782C780.141 542.503 797.996 595.499 798 635.247L797.994 637.095C797.001 794.047 669.581 920.992 512.52 921C354.836 921 227 793.054 227 635.247L227.014 633.369C227.567 593.742 245.359 541.362 271.366 485.376C297.857 428.348 333.141 367.024 368.373 310.65C403.613 254.263 438.847 202.755 465.267 165.349C478.478 146.644 489.489 131.46 497.198 120.95C501.053 115.695 504.083 111.608 506.15 108.833C507.184 107.446 507.977 106.386 508.513 105.673C508.78 105.316 508.984 105.046 509.12 104.864C509.188 104.774 509.24 104.705 509.274 104.659C509.292 104.636 509.305 104.619 509.313 104.607C509.318 104.602 509.322 104.597 509.324 104.594C509.329 104.593 509.419 104.658 512.52 107L509.327 104.589L512.522 100.359L515.714 104.592ZM512.519 360.227C503.066 372.996 474.086 412.798 445.191 459.084C427.696 487.109 410.282 517.433 397.254 545.525C384.156 573.769 375.759 599.211 375.759 617.659C375.762 693.248 436.998 754.533 512.52 754.533C588.041 754.533 649.277 693.248 649.277 617.659C649.277 599.223 640.892 573.803 627.809 545.581C614.796 517.51 597.398 487.208 579.915 459.195C550.999 412.865 521.982 373.013 512.519 360.227Z" fill="url(#paint0_linear_1194_1020)" stroke="#0199FF" stroke-width="8"/><defs><linearGradient id="paint0_linear_1194_1020" x1="512.5" y1="107" x2="512.5" y2="917" gradientUnits="userSpaceOnUse"><stop stop-color="#0068AD"/><stop offset="0.524038" stop-color="#0099FF"/></linearGradient></defs></svg>`;
@ -87,7 +87,7 @@ const contextSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill
*/
export const APP_ICONS = {
memoro: svgToDataUrl(memoroSvg),
manacore: svgToDataUrl(manacoreSvg),
mana: svgToDataUrl(manaSvg),
mana: svgToDataUrl(manaSvg),
chat: svgToDataUrl(chatSvg),
presi: svgToDataUrl(presiSvg),

View file

@ -16,9 +16,9 @@ export const APP_BRANDING: Record<AppId, AppBranding> = {
logoViewBox: '0 0 280 280',
logoStroke: false,
},
manacore: {
id: 'manacore',
name: 'ManaCore',
mana: {
id: 'mana',
name: 'Mana',
tagline: 'Central Hub',
primaryColor: '#6366f1',
secondaryColor: '#818cf8',

View file

@ -3,7 +3,7 @@
*
* This package provides:
* - App logos (AppLogo, AppLogoWithName)
* - Pre-configured app logos (MemoroLogo, ManaCoreLogo, etc.)
* - Pre-configured app logos (MemoroLogo, ManaLogo, etc.)
* - Mana icon (ManaIcon)
* - Branding configuration (colors, names, taglines)
*/
@ -16,7 +16,7 @@ export { default as ManaIcon } from './ManaIcon.svelte';
// Pre-configured App Logos
export {
MemoroLogo,
ManaCoreLogo,
ManaLogo,
CardsLogo,
UloadLogo,
ChatLogo,

View file

@ -10,4 +10,4 @@
let { size = 55, color, class: className = '' }: Props = $props();
</script>
<AppLogo app="manacore" {size} {color} class={className} />
<AppLogo app="mana" {size} {color} class={className} />

View file

@ -3,7 +3,7 @@
* These provide convenient shortcuts for each app's logo
*/
export { default as MemoroLogo } from './MemoroLogo.svelte';
export { default as ManaCoreLogo } from './ManaCoreLogo.svelte';
export { default as ManaLogo } from './ManaLogo.svelte';
export { default as CardsLogo } from './CardsLogo.svelte';
export { default as UloadLogo } from './UloadLogo.svelte';
export { default as ChatLogo } from './ChatLogo.svelte';

View file

@ -86,8 +86,8 @@ export interface ManaApp {
*/
export const MANA_APPS: ManaApp[] = [
{
id: 'manacore',
name: 'ManaCore',
id: 'mana',
name: 'Mana',
description: {
de: 'Multi-App Ecosystem',
en: 'Multi-App Ecosystem',
@ -96,7 +96,7 @@ export const MANA_APPS: ManaApp[] = [
de: 'Das zentrale Dashboard für alle Mana-Apps mit SSO, Credits und App-Verwaltung.',
en: 'The central dashboard for all Mana apps with SSO, credits, and app management.',
},
icon: APP_ICONS.manacore,
icon: APP_ICONS.mana,
color: '#6366f1',
comingSoon: false,
status: 'beta',
@ -749,7 +749,7 @@ export const APP_SLIDER_LABELS = {
*/
export const APP_URLS: Record<AppIconId, { dev: string; prod: string }> = {
// ─── Unified App (internal paths) ─────────────────────────
manacore: { dev: 'http://localhost:5173', prod: 'https://mana.how' },
mana: { dev: 'http://localhost:5173', prod: 'https://mana.how' },
mana: { dev: 'http://localhost:5173', prod: 'https://mana.how' },
todo: { dev: 'http://localhost:5173/todo', prod: 'https://mana.how/todo' },
calendar: { dev: 'http://localhost:5173/calendar', prod: 'https://mana.how/calendar' },

View file

@ -3,7 +3,7 @@
*/
export type AppId =
| 'memoro'
| 'manacore'
| 'mana'
| 'cards'
| 'uload'
| 'chat'

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-config",
"name": "@mana/shared-config",
"version": "1.0.0",
"private": true,
"type": "module",

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-drizzle-config",
"name": "@mana/shared-drizzle-config",
"version": "1.0.0",
"description": "Shared Drizzle ORM configuration factory",
"type": "module",

View file

@ -55,7 +55,7 @@ export interface DrizzleConfigOptions {
*/
const DEFAULT_PG_HOST = 'localhost';
const DEFAULT_PG_PORT = '5432';
const DEFAULT_PG_USER = 'manacore';
const DEFAULT_PG_USER = 'mana';
const DEFAULT_PG_PASSWORD = 'devpassword';
/**
@ -76,7 +76,7 @@ const DEFAULT_PG_PASSWORD = 'devpassword';
* @example
* // With schema filter (multi-schema)
* export default createDrizzleConfig({
* dbName: 'manacore',
* dbName: 'mana',
* schemaFilter: ['auth', 'credits', 'public'],
* });
*/

View file

@ -1,7 +1,7 @@
{
"name": "@manacore/shared-error-tracking",
"name": "@mana/shared-error-tracking",
"version": "1.0.0",
"description": "Error tracking integration for ManaCore apps (GlitchTip/Sentry-compatible)",
"description": "Error tracking integration for Mana apps (GlitchTip/Sentry-compatible)",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {

View file

@ -1,5 +1,5 @@
/**
* Browser Error Tracking for ManaCore SvelteKit Apps
* Browser Error Tracking for Mana SvelteKit Apps
*
* Uses @sentry/browser with GlitchTip as the self-hosted backend.
* This is the browser counterpart to the Node.js `index.ts`.
@ -7,7 +7,7 @@
* @example
* ```typescript
* // In hooks.client.ts
* import { initErrorTracking, handleSvelteError } from '@manacore/shared-error-tracking/browser';
* import { initErrorTracking, handleSvelteError } from '@mana/shared-error-tracking/browser';
* import type { HandleClientError } from '@sveltejs/kit';
*
* initErrorTracking({

View file

@ -1,5 +1,5 @@
/**
* Shared Error Tracking for ManaCore Apps
* Shared Error Tracking for Mana Apps
*
* Uses Sentry SDK with GlitchTip as the self-hosted backend.
* Compatible with any Sentry-compatible error tracking service.
@ -7,7 +7,7 @@
* @example
* ```typescript
* // In instrument.ts (must be imported BEFORE app bootstrap)
* import { initErrorTracking } from '@manacore/shared-error-tracking';
* import { initErrorTracking } from '@mana/shared-error-tracking';
*
* initErrorTracking({
* serviceName: 'calendar-backend',

View file

@ -7,7 +7,7 @@
* @example
* ```typescript
* // app.module.ts
* import { SentryExceptionFilter } from '@manacore/shared-error-tracking/nestjs';
* import { SentryExceptionFilter } from '@mana/shared-error-tracking/nestjs';
*
* @Module({
* providers: [

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-errors",
"name": "@mana/shared-errors",
"version": "0.1.0",
"private": true,
"description": "Go-like error handling system for Manacore backends",

View file

@ -1,5 +1,5 @@
/**
* @manacore/shared-errors
* @mana/shared-errors
*
* Go-like error handling system for NestJS backends.
*
@ -16,7 +16,7 @@
* import {
* Result, ok, err, AsyncResult,
* ValidationError, NotFoundError, ServiceError
* } from '@manacore/shared-errors';
* } from '@mana/shared-errors';
*
* async function getUser(id: string): AsyncResult<User> {
* if (!isValidId(id)) {
@ -32,7 +32,7 @@
* }
*
* // In a controller
* import { isOk } from '@manacore/shared-errors';
* import { isOk } from '@mana/shared-errors';
*
* const result = await userService.getUser(id);
* if (!isOk(result)) {

View file

@ -30,7 +30,7 @@ export interface ErrorResponseBody {
* @example
* ```typescript
* // In main.ts
* import { AppExceptionFilter } from '@manacore/shared-errors/nestjs';
* import { AppExceptionFilter } from '@mana/shared-errors/nestjs';
*
* async function bootstrap() {
* const app = await NestFactory.create(AppModule);

View file

@ -1,8 +1,8 @@
// Package authutil provides shared JWT authentication utilities for ManaCore Go services.
// Package authutil provides shared JWT authentication utilities for Mana Go services.
//
// Two validator implementations are available:
// - JWKSValidator: validates EdDSA JWTs locally using cached JWKS keys (recommended for high-throughput)
// - RemoteValidator: validates JWTs by calling mana-core-auth's /api/v1/auth/validate endpoint
// - RemoteValidator: validates JWTs by calling mana-auth's /api/v1/auth/validate endpoint
//
// Both validators produce the same Claims/User types and work with the same middleware helpers.
package authutil
@ -14,7 +14,7 @@ import (
"github.com/golang-jwt/jwt/v5"
)
// Claims represents the JWT payload from mana-core-auth (EdDSA tokens).
// Claims represents the JWT payload from mana-auth (EdDSA tokens).
type Claims struct {
jwt.RegisteredClaims
Email string `json:"email"`

View file

@ -11,15 +11,15 @@ import (
"github.com/golang-jwt/jwt/v5"
)
// RemoteValidator validates JWTs by calling mana-core-auth's validation endpoint.
// RemoteValidator validates JWTs by calling mana-auth's validation endpoint.
// Simpler than JWKS (no key management), but requires the auth service to be available.
type RemoteValidator struct {
authURL string
client *http.Client
}
// NewRemoteValidator creates a validator that delegates to mana-core-auth.
// authURL should be the base URL of mana-core-auth (e.g., "http://localhost:3001").
// NewRemoteValidator creates a validator that delegates to mana-auth.
// authURL should be the base URL of mana-auth (e.g., "http://localhost:3001").
func NewRemoteValidator(authURL string) *RemoteValidator {
return &RemoteValidator{
authURL: authURL,

View file

@ -1,4 +1,4 @@
// Package envutil provides shared environment variable helpers for ManaCore Go services.
// Package envutil provides shared environment variable helpers for Mana Go services.
package envutil
import (

View file

@ -1,4 +1,4 @@
// Package httputil provides shared HTTP handler utilities for ManaCore Go services.
// Package httputil provides shared HTTP handler utilities for Mana Go services.
package httputil
import (

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-hono",
"name": "@mana/shared-hono",
"version": "0.1.0",
"private": true,
"description": "Shared Hono infrastructure: auth, health, admin, error handling for lightweight compute servers",
@ -21,7 +21,7 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@manacore/shared-logger": "workspace:*",
"@mana/shared-logger": "workspace:*",
"hono": "^4.7.0",
"jose": "^6.0.11",
"drizzle-orm": "^0.45.1",

View file

@ -2,7 +2,7 @@
* Generic GDPR admin routes for Hono servers.
*
* Provides user-data count and deletion endpoints called by
* mana-core-auth for GDPR compliance (right to be forgotten).
* mana-auth for GDPR compliance (right to be forgotten).
*
* Each app defines which tables contain user data; this module
* handles the routing and service-key authentication.
@ -27,7 +27,7 @@ interface UserTable {
*
* Usage:
* ```ts
* import { adminRoutes } from '@manacore/shared-hono/admin';
* import { adminRoutes } from '@mana/shared-hono/admin';
* import { tasks, projects, reminders } from './db';
*
* app.route('/api/v1/admin', adminRoutes(db, [

View file

@ -1,8 +1,8 @@
/**
* JWT authentication middleware for Hono servers.
*
* Verifies EdDSA JWTs from mana-core-auth via JWKS (cached).
* Drop-in replacement for @manacore/shared-nestjs-auth JwtAuthGuard.
* Verifies EdDSA JWTs from mana-auth via JWKS (cached).
* Drop-in replacement for @mana/shared-nestjs-auth JwtAuthGuard.
*
* Sets `userId`, `userEmail`, `userRole` on Hono context.
*/
@ -11,8 +11,8 @@ import type { Context, Next } from 'hono';
import { HTTPException } from 'hono/http-exception';
import { createRemoteJWKSet, jwtVerify } from 'jose';
const AUTH_URL = () => process.env.MANA_CORE_AUTH_URL ?? 'http://localhost:3001';
const SERVICE_KEY = () => process.env.MANA_CORE_SERVICE_KEY ?? '';
const AUTH_URL = () => process.env.MANA_AUTH_URL ?? 'http://localhost:3001';
const SERVICE_KEY = () => process.env.MANA_SERVICE_KEY ?? '';
/** Cached JWKS - jose handles refetch cooldown (~10 min) */
let cachedJWKS: ReturnType<typeof createRemoteJWKSet> | null = null;
@ -37,7 +37,7 @@ function getJWKS(): ReturnType<typeof createRemoteJWKSet> {
function getIssuers(): string[] {
const issuers = new Set<string>();
const jwtIssuer = process.env.JWT_ISSUER;
const authUrl = process.env.MANA_CORE_AUTH_URL;
const authUrl = process.env.MANA_AUTH_URL;
if (jwtIssuer) issuers.add(jwtIssuer);
if (authUrl) issuers.add(authUrl);
issuers.add('https://auth.mana.how');
@ -77,7 +77,7 @@ export function authMiddleware() {
try {
const jwks = getJWKS();
const audience = process.env.JWT_AUDIENCE ?? 'manacore';
const audience = process.env.JWT_AUDIENCE ?? 'mana';
const { payload } = await jwtVerify(token, jwks, {
issuer: getIssuers(),
@ -103,7 +103,7 @@ export function authMiddleware() {
/**
* Service key auth middleware validates X-Service-Key header.
* Used for admin/GDPR endpoints called by mana-core-auth.
* Used for admin/GDPR endpoints called by mana-auth.
*
* Usage:
* ```ts

View file

@ -18,8 +18,8 @@ export interface CreditValidationResult {
}
const CREDITS_URL = () =>
process.env.MANA_CREDITS_URL || process.env.MANA_CORE_AUTH_URL || 'http://localhost:3061';
const SERVICE_KEY = () => process.env.MANA_CORE_SERVICE_KEY || '';
process.env.MANA_CREDITS_URL || process.env.MANA_AUTH_URL || 'http://localhost:3061';
const SERVICE_KEY = () => process.env.MANA_SERVICE_KEY || '';
const APP_ID = () => process.env.APP_ID || 'unknown';
const DEFAULT_BALANCE: CreditBalance = { balance: 1000, totalEarned: 0, totalSpent: 0 };

View file

@ -22,7 +22,7 @@ export interface DbOptions {
*
* Usage:
* ```ts
* import { createDb } from '@manacore/shared-hono/db';
* import { createDb } from '@mana/shared-hono/db';
* import { tasks, projects } from './schema';
*
* const db = createDb({
@ -36,7 +36,7 @@ export function createDb<TSchema extends Record<string, unknown>>(
const url =
opts?.url ??
process.env.DATABASE_URL ??
'postgresql://manacore:devpassword@localhost:5432/mana_platform';
'postgresql://mana:devpassword@localhost:5432/mana_platform';
const connection = postgres(url, {
max: opts?.maxConnections ?? 5,

View file

@ -12,7 +12,7 @@ import { HTTPException } from 'hono/http-exception';
*
* Usage:
* ```ts
* import { errorHandler } from '@manacore/shared-hono/error';
* import { errorHandler } from '@mana/shared-hono/error';
* const app = new Hono();
* app.onError(errorHandler);
* ```

View file

@ -14,7 +14,7 @@ const startTime = Date.now();
*
* Usage:
* ```ts
* import { healthRoute } from '@manacore/shared-hono/health';
* import { healthRoute } from '@mana/shared-hono/health';
* app.route('/health', healthRoute('calendar-server'));
* ```
*/

View file

@ -1,5 +1,5 @@
/**
* @manacore/shared-hono Shared infrastructure for Hono + Bun compute servers.
* @mana/shared-hono Shared infrastructure for Hono + Bun compute servers.
*
* Replaces NestJS boilerplate (Module, Controller, Guard, HealthModule, MetricsModule)
* with lightweight Hono equivalents.
@ -9,11 +9,11 @@
* import { Hono } from 'hono';
* import { cors } from 'hono/cors';
* import { logger } from 'hono/logger';
* import { authMiddleware, serviceAuthMiddleware } from '@manacore/shared-hono/auth';
* import { createDb } from '@manacore/shared-hono/db';
* import { healthRoute } from '@manacore/shared-hono/health';
* import { adminRoutes } from '@manacore/shared-hono/admin';
* import { errorHandler, notFoundHandler } from '@manacore/shared-hono/error';
* import { authMiddleware, serviceAuthMiddleware } from '@mana/shared-hono/auth';
* import { createDb } from '@mana/shared-hono/db';
* import { healthRoute } from '@mana/shared-hono/health';
* import { adminRoutes } from '@mana/shared-hono/admin';
* import { errorHandler, notFoundHandler } from '@mana/shared-hono/error';
*
* const app = new Hono();
* app.onError(errorHandler);

View file

@ -3,17 +3,17 @@
*
* - Generates a unique request ID per request (X-Request-Id header)
* - Logs request/response as JSON lines (in production) or console (in dev)
* - Integrates with @manacore/shared-logger for consistent format
* - Integrates with @mana/shared-logger for consistent format
*
* @example
* ```ts
* import { requestLogger } from '@manacore/shared-hono/logger';
* import { requestLogger } from '@mana/shared-hono/logger';
* app.use('*', requestLogger());
* ```
*/
import type { MiddlewareHandler } from 'hono';
import { logger as log, configureLogger } from '@manacore/shared-logger';
import { logger as log, configureLogger } from '@mana/shared-logger';
let _requestIdStore: Map<object, string> | null = null;

View file

@ -6,7 +6,7 @@
*
* Usage:
* ```ts
* import { rateLimitMiddleware } from '@manacore/shared-hono/rate-limit';
* import { rateLimitMiddleware } from '@mana/shared-hono/rate-limit';
* app.use('/api/*', rateLimitMiddleware({ max: 100, windowMs: 60_000 }));
* ```
*/

View file

@ -1,6 +1,6 @@
/**
* User data extracted from a verified JWT token.
* Compatible with @manacore/shared-nestjs-auth CurrentUserData.
* Compatible with @mana/shared-nestjs-auth CurrentUserData.
*/
export interface CurrentUserData {
userId: string;

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-i18n",
"name": "@mana/shared-i18n",
"version": "1.0.0",
"private": true,
"type": "module",

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-icons",
"name": "@mana/shared-icons",
"version": "1.0.0",
"private": true,
"description": "Phosphor Icons for all Manacore SvelteKit web apps",

View file

@ -1,11 +1,11 @@
/**
* @manacore/shared-icons
* @mana/shared-icons
*
* Phosphor Icons for all Manacore SvelteKit web apps
* https://phosphoricons.com
*
* Usage:
* import { House, User, Gear, Plus } from '@manacore/shared-icons';
* import { House, User, Gear, Plus } from '@mana/shared-icons';
*
* <House size={24} weight="bold" />
* <User size={20} weight="regular" class="text-blue-500" />

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-landing-ui",
"name": "@mana/shared-landing-ui",
"version": "0.1.0",
"private": true,
"description": "Shared Astro landing page components for Manacore monorepo",
@ -15,7 +15,7 @@
"./data/pricing": "./src/data/pricing.ts",
"./themes": "./src/themes/index.css",
"./themes/memoro": "./src/themes/memoro.css",
"./themes/manacore": "./src/themes/manacore.css",
"./themes/mana": "./src/themes/mana.css",
"./themes/maerchenzauber": "./src/themes/maerchenzauber.css",
"./themes/cards": "./src/themes/cards.css",
"./themes/picture": "./src/themes/picture.css",
@ -44,6 +44,6 @@
"astro",
"landing",
"components",
"manacore"
"mana"
]
}

View file

@ -1,5 +1,5 @@
/**
* @manacore/shared-landing-ui
* @mana/shared-landing-ui
*
* Shared Astro components for landing pages across the Manacore monorepo.
*
@ -9,45 +9,45 @@
* ```astro
* ---
* // Atoms
* import Button from '@manacore/shared-landing-ui/atoms/Button.astro';
* import Badge from '@manacore/shared-landing-ui/atoms/Badge.astro';
* import Card from '@manacore/shared-landing-ui/atoms/Card.astro';
* import Container from '@manacore/shared-landing-ui/atoms/Container.astro';
* import SectionHeader from '@manacore/shared-landing-ui/atoms/SectionHeader.astro';
* import GradientText from '@manacore/shared-landing-ui/atoms/GradientText.astro';
* import LanguageSwitcher from '@manacore/shared-landing-ui/atoms/LanguageSwitcher.astro';
* import Button from '@mana/shared-landing-ui/atoms/Button.astro';
* import Badge from '@mana/shared-landing-ui/atoms/Badge.astro';
* import Card from '@mana/shared-landing-ui/atoms/Card.astro';
* import Container from '@mana/shared-landing-ui/atoms/Container.astro';
* import SectionHeader from '@mana/shared-landing-ui/atoms/SectionHeader.astro';
* import GradientText from '@mana/shared-landing-ui/atoms/GradientText.astro';
* import LanguageSwitcher from '@mana/shared-landing-ui/atoms/LanguageSwitcher.astro';
*
* // Sections
* import HeroSection from '@manacore/shared-landing-ui/sections/HeroSection.astro';
* import FeatureSection from '@manacore/shared-landing-ui/sections/FeatureSection.astro';
* import PricingSection from '@manacore/shared-landing-ui/sections/PricingSection.astro';
* import FAQSection from '@manacore/shared-landing-ui/sections/FAQSection.astro';
* import CTASection from '@manacore/shared-landing-ui/sections/CTASection.astro';
* import TestimonialSection from '@manacore/shared-landing-ui/sections/TestimonialSection.astro';
* import StepsSection from '@manacore/shared-landing-ui/sections/StepsSection.astro';
* import AppScrollerSection from '@manacore/shared-landing-ui/sections/AppScrollerSection.astro';
* import TimelineSection from '@manacore/shared-landing-ui/sections/TimelineSection.astro';
* import MasonryGridSection from '@manacore/shared-landing-ui/sections/MasonryGridSection.astro';
* import PrinciplesSection from '@manacore/shared-landing-ui/sections/PrinciplesSection.astro';
* import ManaPricingSection from '@manacore/shared-landing-ui/sections/ManaPricingSection.astro';
* import HeroSection from '@mana/shared-landing-ui/sections/HeroSection.astro';
* import FeatureSection from '@mana/shared-landing-ui/sections/FeatureSection.astro';
* import PricingSection from '@mana/shared-landing-ui/sections/PricingSection.astro';
* import FAQSection from '@mana/shared-landing-ui/sections/FAQSection.astro';
* import CTASection from '@mana/shared-landing-ui/sections/CTASection.astro';
* import TestimonialSection from '@mana/shared-landing-ui/sections/TestimonialSection.astro';
* import StepsSection from '@mana/shared-landing-ui/sections/StepsSection.astro';
* import AppScrollerSection from '@mana/shared-landing-ui/sections/AppScrollerSection.astro';
* import TimelineSection from '@mana/shared-landing-ui/sections/TimelineSection.astro';
* import MasonryGridSection from '@mana/shared-landing-ui/sections/MasonryGridSection.astro';
* import PrinciplesSection from '@mana/shared-landing-ui/sections/PrinciplesSection.astro';
* import ManaPricingSection from '@mana/shared-landing-ui/sections/ManaPricingSection.astro';
*
* // Data
* import { pricingPlans, defaultPricingTranslations, englishPricingTranslations } from '@manacore/shared-landing-ui/data/pricing';
* import { pricingPlans, defaultPricingTranslations, englishPricingTranslations } from '@mana/shared-landing-ui/data/pricing';
*
* // Layouts
* import Footer from '@manacore/shared-landing-ui/layouts/Footer.astro';
* import Navigation from '@manacore/shared-landing-ui/layouts/Navigation.astro';
* import Footer from '@mana/shared-landing-ui/layouts/Footer.astro';
* import Navigation from '@mana/shared-landing-ui/layouts/Navigation.astro';
*
* // Templates
* import LegalPageTemplate from '@manacore/shared-landing-ui/templates/LegalPageTemplate.astro';
* import LegalPageTemplate from '@mana/shared-landing-ui/templates/LegalPageTemplate.astro';
*
* // i18n
* import { getLangFromUrl, useTranslations, localizePath } from '@manacore/shared-landing-ui/i18n';
* import { getLangFromUrl, useTranslations, localizePath } from '@mana/shared-landing-ui/i18n';
*
* // Themes (import as CSS)
* import '@manacore/shared-landing-ui/themes';
* import '@manacore/shared-landing-ui/themes/manacore';
* import '@manacore/shared-landing-ui/themes/picture';
* import '@mana/shared-landing-ui/themes';
* import '@mana/shared-landing-ui/themes/mana';
* import '@mana/shared-landing-ui/themes/picture';
* ---
* ```
*

View file

@ -7,13 +7,13 @@
* <ManaPricingSection
* showOneTime={true}
* showTrustIndicators={true}
* ctaBaseUrl="https://app.manacore.io"
* ctaBaseUrl="https://app.mana.io"
* />
* ```
*
* Or with custom translations:
* ```astro
* import { englishPricingTranslations } from '@manacore/shared-landing-ui/data/pricing';
* import { englishPricingTranslations } from '@mana/shared-landing-ui/data/pricing';
* <ManaPricingSection
* translations={englishPricingTranslations}
* />

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-links",
"name": "@mana/shared-links",
"version": "0.1.0",
"private": true,
"type": "module",
@ -10,8 +10,8 @@
"./ui": "./src/ui/index.ts"
},
"dependencies": {
"@manacore/local-store": "workspace:*",
"@manacore/shared-branding": "workspace:*"
"@mana/local-store": "workspace:*",
"@mana/shared-branding": "workspace:*"
},
"peerDependencies": {
"svelte": "^5.0.0"

View file

@ -5,8 +5,8 @@
* the record's detail view in the target app.
*/
import { APP_URLS } from '@manacore/shared-branding';
import type { AppIconId } from '@manacore/shared-branding';
import { APP_URLS } from '@mana/shared-branding';
import type { AppIconId } from '@mana/shared-branding';
/** Route pattern per app and collection. Use {id} as placeholder. */
const DEEP_LINK_PATTERNS: Record<string, Record<string, string>> = {

View file

@ -5,7 +5,7 @@
* Auto-update when IndexedDB changes (local writes, sync, other tabs).
*/
import { useLiveQueryWithDefault } from '@manacore/local-store/svelte';
import { useLiveQueryWithDefault } from '@mana/local-store/svelte';
import { linkCollection } from './store.js';
import type { LocalManaLink, ManaRecordRef } from './types.js';

View file

@ -4,8 +4,8 @@
* Helpers to build cached display data from app metadata.
*/
import { getManaApp } from '@manacore/shared-branding';
import type { AppIconId } from '@manacore/shared-branding';
import { getManaApp } from '@mana/shared-branding';
import type { AppIconId } from '@mana/shared-branding';
import type { LinkCachedData } from './types.js';
/**

View file

@ -1,11 +1,11 @@
/**
* ManaLink Local-First Store
*
* Creates a shared IndexedDB database ('manacore-links') that all apps
* Creates a shared IndexedDB database ('mana-links') that all apps
* can read from. Links are synced to the server via mana-sync.
*/
import { createLocalStore } from '@manacore/local-store';
import { createLocalStore } from '@mana/local-store';
import type { LocalManaLink } from './types.js';
const SYNC_SERVER_URL =

View file

@ -5,7 +5,7 @@
* across different apps in the Mana ecosystem.
*/
import type { BaseRecord } from '@manacore/local-store';
import type { BaseRecord } from '@mana/local-store';
/** Cached display data for a linked record (offline-friendly). */
export interface LinkCachedData {
@ -23,7 +23,7 @@ export interface LinkCachedData {
fetchedAt: string;
}
/** A single link record stored in IndexedDB (manacore-links). */
/** A single link record stored in IndexedDB (mana-links). */
export interface LocalManaLink extends BaseRecord {
/** UUID shared by the forward and reverse link records. */
pairId: string;

View file

@ -1,7 +1,7 @@
<script lang="ts">
import type { LocalManaLink } from '../types.js';
import { getManaApp } from '@manacore/shared-branding';
import type { AppIconId } from '@manacore/shared-branding';
import { getManaApp } from '@mana/shared-branding';
import type { AppIconId } from '@mana/shared-branding';
import { resolveDeepLink } from '../deep-links.js';
interface Props {

View file

@ -6,8 +6,8 @@
* contacts, storage files, etc.) and creates bidirectional links.
*/
import { MANA_APPS, getManaApp } from '@manacore/shared-branding';
import type { AppIconId } from '@manacore/shared-branding';
import { MANA_APPS, getManaApp } from '@mana/shared-branding';
import type { AppIconId } from '@mana/shared-branding';
import { linkMutations } from '../mutations.svelte.js';
import { buildCachedData } from '../resolvers.js';
import type { ManaRecordRef } from '../types.js';

View file

@ -1,5 +1,5 @@
{
"name": "@manacore/shared-llm",
"name": "@mana/shared-llm",
"version": "1.0.0",
"private": true,
"description": "Unified LLM client for all Mana backends via mana-llm service",

View file

@ -2,7 +2,7 @@
* Standalone exports for non-NestJS consumers (e.g. bot-services).
*
* Usage:
* import { LlmClient } from '@manacore/shared-llm/standalone';
* import { LlmClient } from '@mana/shared-llm/standalone';
* const llm = new LlmClient({ manaLlmUrl: 'http://localhost:3025' });
*/

View file

@ -1,7 +1,7 @@
{
"name": "@manacore/shared-logger",
"name": "@mana/shared-logger",
"version": "1.0.0",
"description": "Shared logging utilities for ManaCore mobile and web apps",
"description": "Shared logging utilities for Mana mobile and web apps",
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",

View file

@ -1,5 +1,5 @@
/**
* Shared Logger Utilities for ManaCore Apps
* Shared Logger Utilities for Mana Apps
*
* Dual-mode logger:
* - **Development / Browser**: Console output with colored prefixes (human-readable)
@ -33,7 +33,7 @@ let _getRequestId: (() => string | undefined) | null = null;
*
* @example
* ```typescript
* import { configureLogger } from '@manacore/shared-logger';
* import { configureLogger } from '@mana/shared-logger';
* configureLogger({ serviceName: 'todo-server' });
* ```
*/

Some files were not shown because too many files have changed in this diff Show more