chore(brand): rename Cards → Cardecky (display, infra, license-IDs)

- App display name → Cardecky in mana-apps.ts, MODULE_REGISTRY, alle Docs
- Domains: cardecky.mana.how (App), cardecky-api.mana.how (Marketplace
  API), cardecky.com (Marketing-Landing — cloudflared-route + nginx-Block
  vorbereitet, DNS muss noch gesetzt werden)
- 301-Redirect cards.mana.how → cardecky.mana.how (nginx + cloudflared)
  für alte Bookmarks; kann nach 6–12 Monaten wieder raus
- SPDX license IDs Cards-Personal-Use/Pro-Only-1.0 → Cardecky-* via
  Drizzle 0001-Migration (DROP CHECK → UPDATE rows → SET DEFAULT → ADD
  CHECK), inkl. _journal- und 0001_snapshot-Update
- In-mana cards-Modul: dezenter Banner zur Standalone-App (GUIDELINES
  §12), einmal schließbar via localStorage
- Docker-CORS-Listen, sso-origins.ts, Prometheus-Target aktualisiert

Technische IDs bleiben bewusst: appId 'cards', schema
mana_platform.cards.*, Verzeichnis apps/cards/, Package @cards/web,
services/cards-server, Env-Vars CARDS_*, UMAMI_WEBSITE_ID_CARDS*, Class
CardsEvents — Mana-Konvention (Brand ≠ technischer Identifier).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-08 13:49:47 +02:00
parent a6a003fa5e
commit 61f2772789
52 changed files with 2149 additions and 141 deletions

View file

@ -79,7 +79,7 @@ In zwei intensiven Sessions wurde die gesamte Mana-Architektur von einem **API-f
| Calendar | 3003 | 119 | RRULE Expansion, ICS Import |
| Contacts | 3004 | 89 | Avatar Upload (S3), vCard Import |
| Picture | 3006 | 144 | Replicate Image Gen + S3 Upload |
| Cards | 3009 | 130 | AI Deck/Card Generation |
| Cardecky | 3009 | 130 | AI Deck/Card Generation |
| Mukke | 3010 | 106 | S3 Upload/Download URLs |
| Questions | 3011 | 121 | Web Research (mana-search) |
| Storage | 3016 | 117 | File Upload/Download + Versions |
@ -322,7 +322,7 @@ mana-analytics (Hono, 475 LOC)
| 3 | Calendar | calendars, events | ✅ Komplett |
| 4 | Clock | alarms, timers, worldClocks | ✅ Komplett |
| 5 | Contacts | contacts | ✅ Komplett |
| 6 | Cards | decks, cards | ✅ Komplett |
| 6 | Cardecky | decks, cards | ✅ Komplett |
| 7 | Presi | decks, slides | ✅ Komplett |
| 8 | Picture | images, boards, boardItems, tags, imageTags | ✅ Komplett |
| 9 | Inventar | collections, items, locations, categories | ✅ Komplett |

View file

@ -1,8 +1,8 @@
# Cards: Migration zu PostgreSQL + Drizzle ORM
# Cardecky: Migration zu PostgreSQL + Drizzle ORM
## Übersicht
Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-gehosteten PostgreSQL-Datenbank mit Drizzle ORM.
Dieses Dokument beschreibt die Migration von Cardecky von Supabase zu einer selbst-gehosteten PostgreSQL-Datenbank mit Drizzle ORM.
---
@ -10,14 +10,14 @@ Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-
```
┌─────────────────┐ ┌─────────────────┐
│ Cards Web │ │ Cards Mobile │
│ Cardecky Web │ │ Cardecky Mobile │
│ (SvelteKit) │ │ (Expo) │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
┌───────────▼───────────┐
│ Cards Backend │
│ Cardecky Backend │
│ (NestJS) │
└───────────┬───────────┘
@ -36,14 +36,14 @@ Dieses Dokument beschreibt die Migration von Cards von Supabase zu einer selbst-
```
┌─────────────────┐ ┌─────────────────┐
│ Cards Web │ │ Cards Mobile │
│ Cardecky Web │ │ Cardecky Mobile │
│ (SvelteKit) │ │ (Expo) │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
┌───────────▼───────────┐
│ Cards Backend │
│ Cardecky Backend │
│ (NestJS + Drizzle) │
└───────────┬───────────┘
@ -733,14 +733,14 @@ async function migrateDecks() {
console.log(`Migrated ${supabaseDecks.length} decks`);
}
async function migrateCards() {
async function migrateCardecky() {
console.log('Migrating cards...');
const { data: supabaseCards, error } = await supabase.from('cards').select('*');
const { data: supabaseCardecky, error } = await supabase.from('cards').select('*');
if (error) throw error;
for (const card of supabaseCards) {
for (const card of supabaseCardecky) {
await newDb
.insert(cards)
.values({
@ -760,13 +760,13 @@ async function migrateCards() {
.onConflictDoNothing();
}
console.log(`Migrated ${supabaseCards.length} cards`);
console.log(`Migrated ${supabaseCardecky.length} cards`);
}
async function main() {
try {
await migrateDecks();
await migrateCards();
await migrateCardecky();
// ... andere Tabellen
console.log('Migration completed successfully!');
} catch (error) {

View file

@ -109,7 +109,8 @@ Cloudflare Tunnel (bb0ea86d...)
| `quotess.mana.how` | Quotes Landing | `/srv/landings/quotes` |
| `presis.mana.how` | Presi Landing | `/srv/landings/presi` |
| `clocks.mana.how` | Clock Landing | `/srv/landings/clock` |
| `cards.mana.how` | Cards Landing | `/srv/landings/cards` |
| `cardecky.mana.how` | Cardecky App | (Docker container — not a static landing) |
| `cardecky.com` | Cardecky Marketing-Landing | `/srv/landings/cardecky` |
| `food.mana.how` | Food Landing | `/srv/landings/food` |
| `citycorners.mana.how` | CityCorners Landing | `/srv/landings/citycorners` |
| `docs.mana.how` | Dokumentation | `/srv/landings/docs` |

View file

@ -50,7 +50,7 @@ Diese Befehle starten ein komplettes Projekt mit allen zugehörigen Apps und Dep
| ------------------------- | ------------------------------------------------------ |
| `pnpm maerchenzauber:dev` | Startet Maerchenzauber (Backend, Web, Mobile, Landing) |
| `pnpm mana:dev` | Startet Mana (Web, Mobile, Landing) |
| `pnpm cards:dev` | Startet Cards (Web, Mobile, Landing) |
| `pnpm cards:dev` | Startet Cardecky (Web, Mobile, Landing) |
| `pnpm memoro:dev` | Startet Memoro (Web, Mobile, Landing) |
## Turbo Filter

View file

@ -119,7 +119,7 @@ The generator then creates app-specific `.env` files with the correct prefixes f
|----------|-------------|---------|
| `ARTICLES_IMPORT_WORKER_DISABLED` | Set to `true` to skip starting the bulk-import worker on this apps/api instance. Useful for tests, or when running multiple apps/api replicas and you want to designate a specific one as the worker. The worker uses `pg_try_advisory_xact_lock` so multiple instances are safe by default — this env-var is the explicit opt-out. | `false` |
### Cards Project
### Cardecky Project
| Variable | Description | Default |
|----------|-------------|---------|

View file

@ -84,7 +84,7 @@ Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
|--------|--------|-------|------------------|-------------------|
| **Replicate** | Picture | Bildgenerierung (Flux, SDXL, SD) | `PICTURE_REPLICATE_API_TOKEN` | €20-100/Monat |
| **OpenRouter** | Chat | Cloud LLMs (Claude, GPT, Llama, DeepSeek) | `OPENROUTER_API_KEY` | €10-50/Monat |
| **Google Gemini** | Planta, Food, Cards | Vision & Text AI | `GEMINI_API_KEY`, `PLANTA_GEMINI_API_KEY` | €5-20/Monat |
| **Google Gemini** | Planta, Food, Cardecky | Vision & Text AI | `GEMINI_API_KEY`, `PLANTA_GEMINI_API_KEY` | €5-20/Monat |
| **Azure OpenAI** | Chat (Docker) | GPT-4o via Azure | `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_KEY` | Optional |
| **Anthropic** | Mana Games | Claude API | `MANA_GAMES_ANTHROPIC_API_KEY` | Optional |
| **Ollama** | Chat | Lokale LLMs (Gemma 3, Llama) | `OLLAMA_URL` | ✅ Bereits lokal |
@ -477,7 +477,7 @@ PICTURE_REPLICATE_API_TOKEN=r8_xxx
# OpenRouter (Chat)
OPENROUTER_API_KEY=sk-or-v1-xxx
# Google Gemini (Planta, Food, Cards)
# Google Gemini (Planta, Food, Cardecky)
GEMINI_API_KEY=AIza...
PLANTA_GEMINI_API_KEY=AIza...
FOOD_GEMINI_API_KEY=AIza...

View file

@ -49,7 +49,7 @@ These apps have server-side compute and support both `local` and `full` modes:
| Calendar | 3003 | 5179 | Yes | Yes |
| Contacts | 3004 | 5184 | Yes | Yes |
| Picture | 3006 | 5175 | Yes | Yes |
| Cards | 3009 | 5176 | Yes | Yes |
| Cardecky | 3009 | 5176 | Yes | Yes |
| Mukke | 3010 | 5180 | Yes | Yes |
| Questions | 3011 | 5111 | Yes | Yes |
| Storage | 3016 | 5185 | Yes | Yes |

View file

@ -190,7 +190,7 @@ Ein User gilt als "verified" wenn MINDESTENS EINS zutrifft:
### Reward-Struktur
#### Cards
#### Cardecky
| Metrik | Threshold | Credits | Max/Monat |
|--------|-----------|---------|-----------|
@ -566,7 +566,7 @@ CREATE TABLE community.bounty_pool (
- [ ] Create Admin endpoints für Manual Review Queue
- [ ] **Integration in Content Apps**
- [ ] Cards: Track deck copies
- [ ] Cardecky: Track deck copies
- [ ] Quotes: Track quote submissions/views
- [ ] Presi: Track template usage

View file

@ -258,7 +258,7 @@ Unabhängig von der nativen Strategie: Service Worker und Web App Manifest hinzu
### React Native / Expo nur für dedizierte Einzel-Apps
Die bestehenden Expo-Apps im Monorepo machen Sinn für Module, die eine fundamental native Mobile-UX brauchen (z.B. Cards mit Swipe-Gesten, Chat mit nativen Push Notifications). Für "die gesamte unified App auf Mobile bringen" ist der Aufwand (komplettes Rewrite) nicht verhältnismässig.
Die bestehenden Expo-Apps im Monorepo machen Sinn für Module, die eine fundamental native Mobile-UX brauchen (z.B. Cardecky mit Swipe-Gesten, Chat mit nativen Push Notifications). Für "die gesamte unified App auf Mobile bringen" ist der Aufwand (komplettes Rewrite) nicht verhältnismässig.
### IndexedDB-Risiko mitigieren

View file

@ -42,7 +42,7 @@ Alle 76 Module der Mana-App (`apps/mana/apps/web/src/lib/modules/`).
| `picture` | ManaPicture | AI-Bildgenerierung |
| `photos` | Photos | Foto-Management mit Alben, Tags und Favoriten |
| `presi` | Presi | Präsentationen mit AI-Design-Vorschlägen |
| `cards` | Cards | AI-generierte Flashcards mit Spaced Repetition |
| `cards` | Cardecky | AI-generierte Flashcards mit Spaced Repetition |
| `recipes` | Rezepte | Rezepte sammeln mit Zutaten und Schritten |
| `library` | Bibliothek | Bücher, Filme, Serien, Comics — Status, Rating, Fortschritt |
| `storage` | Storage | Cloud-Storage mit Ordnern, Versionierung und Sharing |

View file

@ -46,7 +46,7 @@
- **Warum:** Reise-Apps monetarisieren gut. AI-generierte City Guides sind unique. Saisonaler Peak (Urlaubszeit), aber wiederkehrende Nutzung bei Vielreisenden.
- **Empfehlung:** Free (Tracking unlimited, 1 Guide/Stadt), Premium (unlimited Guides + Offline-Download).
### 7. Cards (Deck/Flashcard Management)
### 7. Cardecky (Deck/Flashcard Management)
- **Modell:** Credit-System vorhanden (10 Mana/Deck, 5/AI-Generation)
- **Warum:** Anki, Quizlet sind bewiesene Märkte. AI-Kartengeneration ist starker USP. Studenten zahlen für Lerntools (besonders vor Prüfungen).

View file

@ -39,7 +39,7 @@ All monitoring tools are publicly accessible - no login required (except GlitchT
| Planta | https://stats.mana.how/share/1e83a8a67fa84d3995455c21dedbe3a2/plants-webapp |
| Presi | https://stats.mana.how/share/a1eb8d1fa4d543e6b97ac41351fe1c6f/presi-webapp |
| Skilltree | https://stats.mana.how/share/5de13e0895ae4a69aa2a834f985be14d/skilltree-webapp |
| Cards | https://stats.mana.how/share/1c1d54c4782943e58dde0a6db7c86ec6/cards-webapp |
| Cardecky | https://stats.mana.how/share/1c1d54c4782943e58dde0a6db7c86ec6/cards-webapp |
### GlitchTip Error Tracking

View file

@ -8,7 +8,7 @@ Dieses Dokument bietet eine umfassende Übersicht über alle Projekte im Manacor
2. [Projekte](#projekte)
- [Maerchenzauber](#maerchenzauber)
- [Manacore](#mana)
- [Cards](#cards)
- [Cardecky](#cardecky)
- [Memoro](#memoro)
- [Picture](#picture)
- [uLoad](#uload)
@ -129,7 +129,7 @@ Manacore ist die zentrale Plattform für Organisations-Management, Team-Kollabor
#### Unterstützte Apps
- **Memoro** - Sprachaufnahmen und Memory-Management
- **Cards** - KI-gestützte Lernkarten
- **Cardecky** - KI-gestützte Lernkarten
- **Storyteller** - Kreatives Schreiben mit KI
- **Mana** - Zentrale Account- und Organisationsverwaltung
@ -155,11 +155,11 @@ mana/
---
### Cards
### Cardecky
**KI-gestütztes Lernkarten-System**
Cards ist ein Deck-Management-System mit KI-gestützter Kartenerstellung und dem integrierten Mana Credit-System.
Cardecky ist ein Deck-Management-System mit KI-gestützter Kartenerstellung und dem integrierten Mana Credit-System.
#### Features
@ -489,7 +489,7 @@ Alle Projekte teilen gemeinsame Packages unter `packages/`:
| Package | Beschreibung |
| ------------------- | ------------------------- |
| `cards-database` | Cards Datenbank-Schema |
| `cards-database` | Cardecky Datenbank-Schema |
| `uload-database` | uLoad Datenbank-Schema |
### Verwendung
@ -615,7 +615,7 @@ Siehe die jeweiligen CLAUDE.md Dateien in den Projektverzeichnissen für detaill
- [i18n](./I18N.md) - Internationalisierungs-Guide
- [Self-Hosting Guide](./SELF-HOSTING-GUIDE.md) - Self-Hosting Anleitung
- [uLoad Deployment](./ULOAD-DEPLOYMENT.md) - uLoad Deployment Guide
- [Cards Postgres Migration](./CARDS_POSTGRES_MIGRATION.md) - Datenbank-Migration
- [Cardecky Postgres Migration](./CARDS_POSTGRES_MIGRATION.md) - Datenbank-Migration
---
@ -639,7 +639,7 @@ Dieser Abschnitt enthält durchdachte Ideen für neue Anwendungen, die das Manac
- Kreatives Schreiben (Maerchenzauber)
- Sprachaufnahmen & Transkription (Memoro)
- Lernen & Wissensmanagement (Cards)
- Lernen & Wissensmanagement (Cardecky)
- Bildbearbeitung (Picture)
- Link-Management (uLoad)
- Kommunikation (Chat)
@ -664,7 +664,7 @@ Dieser Abschnitt enthält durchdachte Ideen für neue Anwendungen, die das Manac
**Synergien:**
- **Memoro-Integration:** Audio-Memos werden automatisch als Notizen importiert
- **Cards-Integration:** Aus Notizen Lernkarten generieren
- **Cardecky-Integration:** Aus Notizen Lernkarten generieren
- **Chat-Integration:** Chat-Verläufe als Notizen speichern
**Credit-Modell:**
@ -910,7 +910,7 @@ Dieser Abschnitt enthält durchdachte Ideen für neue Anwendungen, die das Manac
**Synergien:**
- **Cards-Integration:** Kursinhalte → Lernkarten
- **Cardecky-Integration:** Kursinhalte → Lernkarten
- **Memoro-Integration:** Vorlesungen aufnehmen und transkribieren
- **ManaNote-Integration:** Kurs-Notizen
- **ManaVideo-Integration:** Video-Lektionen
@ -943,7 +943,7 @@ Dieser Abschnitt enthält durchdachte Ideen für neue Anwendungen, die das Manac
**Synergien:**
- **Cards-Integration:** Highlights → Lernkarten
- **Cardecky-Integration:** Highlights → Lernkarten
- **ManaNote-Integration:** Exzerpte in Notizen überführen
- **ManaLearn-Integration:** Leselisten für Kurse
@ -1403,7 +1403,7 @@ Basierend auf Synergien mit bestehenden Apps, Marktpotenzial und technischer Mac
| ------------- | ------------------------------------------------- |
| **ManaNote** | Natürliche Erweiterung von Memoro, hohe Synergien |
| **ManaWrite** | Nutzt bestehende KI-Infrastruktur, klarer Markt |
| **ManaRead** | Ergänzt Cards perfekt, Bildungsmarkt |
| **ManaRead** | Ergänzt Cardecky perfekt, Bildungsmarkt |
| **ManaMeet** | Memoro-Technologie wiederverwendbar |
#### Mittlere Priorität (Strategisch wichtig)
@ -1414,7 +1414,7 @@ Basierend auf Synergien mit bestehenden Apps, Marktpotenzial und technischer Mac
| **ManaCalendar** | Verbindet alle Produktivitäts-Apps |
| **ManaPodcast** | Wachsender Markt, Memoro-Basis |
| **ManaDesign** | Picture erweitern, Marketing-Use-Cases |
| **ManaLearn** | Cards + Memoro + Video kombinieren |
| **ManaLearn** | Cardecky + Memoro + Video kombinieren |
#### Langfristig (Exploration)
@ -1456,9 +1456,9 @@ Basierend auf Synergien mit bestehenden Apps, Marktpotenzial und technischer Mac
### Fazit
Das Manacore-Ökosystem hat enormes Potenzial für Erweiterungen. Die bestehende Infrastruktur (Credits, Auth, Shared Packages, KI-Integration) ermöglicht schnelle Entwicklung neuer Apps. Der Fokus sollte zunächst auf Produktivitäts-Tools liegen, die starke Synergien mit Memoro und Cards haben.
Das Manacore-Ökosystem hat enormes Potenzial für Erweiterungen. Die bestehende Infrastruktur (Credits, Auth, Shared Packages, KI-Integration) ermöglicht schnelle Entwicklung neuer Apps. Der Fokus sollte zunächst auf Produktivitäts-Tools liegen, die starke Synergien mit Memoro und Cardecky haben.
Die Vision: **Ein zusammenhängendes Ökosystem, in dem Daten nahtlos zwischen Apps fließen** - von der Sprachaufnahme (Memoro) über Notizen (ManaNote) zu Lernkarten (Cards), mit KI-Unterstützung auf jedem Schritt.
Die Vision: **Ein zusammenhängendes Ökosystem, in dem Daten nahtlos zwischen Apps fließen** - von der Sprachaufnahme (Memoro) über Notizen (ManaNote) zu Lernkarten (Cardecky), mit KI-Unterstützung auf jedem Schritt.
---

View file

@ -69,7 +69,7 @@ All web apps now use the shared packages consistently:
- Mana Web
- Memoro Web
- Maerchenzauber Web
- Cards Web
- Cardecky Web
---
@ -127,7 +127,7 @@ packages/shared-tailwind/
- Memoro Web (full migration with theme.css + components.css)
- Mana Web (preset only, keeps local colors)
- Cards Web (colors import, HSL-based system)
- Cardecky Web (colors import, HSL-based system)
- Maerchenzauber Web (dependency added)
---

View file

@ -124,7 +124,7 @@ Da bereits **mana-sync (Go)** als zentraler Sync-Server existiert und **local-fi
- Schwer (~50 MB node_modules pro Backend)
- Viel Boilerplate (Module, Controller, Service, DTO fuer jede Entity)
- Overkill fuer simple CRUD-Operationen
- NestJS Version-Drift: 18 Backends auf ^10.4.x, Cards auf ^11.0.1
- NestJS Version-Drift: 18 Backends auf ^10.4.x, Cardecky auf ^11.0.1
### Empfehlung

View file

@ -97,10 +97,10 @@ Brevo ist SPOF für alle Transaktions-Emails (Verifizierung, Passwort-Reset).
**Status: ✅ ERLEDIGT** (2026-03-24)
Alle 9 Backends nutzen jetzt `@mana/shared-llm``mana-llm` Gateway:
- Auth, Chat, Context, Food, Planta, Traces, Cards, Bot Services, Matrix Bots
- Auth, Chat, Context, Food, Planta, Traces, Cardecky, Bot Services, Matrix Bots
- Google Gemini als automatischer Fallback wenn Ollama überlastet
- OpenAI SDK komplett entfernt (Project Doc Bot)
- Google Gemini SDK entfernt (Cards)
- Google Gemini SDK entfernt (Cardecky)
#### 2.2 PostgreSQL Backup stärken
@ -219,7 +219,7 @@ Food und Planta nutzen Google Gemini Vision. Alternativen via Ollama:
- ✅ Prio 1: Picture App nutzt lokales `mana-image-gen` (FLUX.2 klein) als Default
- ✅ Prio 2: Project Doc Bot: OpenAI SDK komplett entfernt, nutzt mana-llm + mana-stt
- ✅ Prio 3: Alle LLM-Calls über `mana-llm` geroutet (10 Backends, `@mana/shared-llm`)
- ✅ Prio 3: Google Gemini Fallback in mana-llm + Cards Gemini SDK entfernt
- ✅ Prio 3: Google Gemini Fallback in mana-llm + Cardecky Gemini SDK entfernt
- ✅ Prio 4: PostgreSQL Backup mit stündlichen Dumps + täglichen Base-Backups
- ✅ Prio 6: Landing Pages self-hosted via Nginx (10 Domains, kein Cloudflare Pages mehr)
- ✅ Prio 8: Cloudflare-Fallback Plan dokumentiert (WireGuard + Caddy)

View file

@ -324,7 +324,7 @@ Folgende Apps nutzen bereits die zentralen User Settings:
- Chat (`chat`)
- Contacts (`contacts`)
- Mana (`mana`)
- Cards (`cards`)
- Cardecky (`cards`)
- Picture (`picture`)
- Presi (`presi`)
- Storage (`storage`)

View file

@ -36,7 +36,7 @@ All apps follow `MAJOR.MINOR.PATCH`:
| Quotes | 0.2.0 | Beta |
| Clock | 0.2.0 | Beta |
| Food | 0.2.0 | Beta |
| Cards | 0.2.0 | Beta |
| Cardecky | 0.2.0 | Beta |
| Mana | 0.2.0 | Beta |
| Matrix | 0.2.0 | Beta |
| Photos | 0.2.0 | Beta |

View file

@ -1386,7 +1386,7 @@ Phase 1 (Events) ──────┬──> Phase 2 (Projections)
| 10 | Body | 5 | 3 | Batch 2 |
| 11 | Finance | 2 | 1 | Batch 3 |
| 12 | Dreams | 2 | 1 | Batch 3 |
| 13 | Cards | 2 | 1 | Batch 3 |
| 13 | Cardecky | 2 | 1 | Batch 3 |
| 14 | Times | 2 | 2 | Batch 3 |
| 15 | Social Events | 2 | 1 | Batch 3 |
| 16 | Music | 1 | 1 | Batch 4 |