Commit graph

11 commits

Author SHA1 Message Date
Till JS
7dbbf63523 Phase 12 R2: Marketplace-Backend α + β — Authors + Deck-Init + Publish
Routes (additiv unter /api/v1/marketplace/*):
- POST/GET /authors/me — eigenes Author-Profil anlegen/updaten/lesen
- GET /authors/:slug — public Profile-Lookup (banned-reason gestrippt)
- POST /decks — Deck-Init (Slug-Validation + Pflicht-Author-Profil +
  CHECK auf paid + Pro-License)
- POST /decks/:slug/publish — Versions-Snapshot mit per-Karte
  cardContentHash aus @cards/domain, per-Version-Hash, AI-Mod-Stub-Log,
  atomarer latest_version_id-Bump in Drizzle-Transaction
- PATCH /decks/:slug — Metadaten-Update (Owner-Only)
- GET /decks/:slug — Public-Detail mit optional-auth-Middleware

Geport aus cards-decommission-base:services/cards-server/, mit
Greenfield-Anpassungen:
- Hashing über @cards/domain.cardContentHash (gemeinsame SoT
  zwischen privatem cards.cards und marketplace.deck_cards), per-
  Version-Hash als SHA-256 über sortierte Karten-Hashes mit Ord-Prefix
- AI-Moderation als R2-Stub (pass+rationale+model='stub'),
  echte mana-llm-Anbindung in späterer Welle
- Auth-Middleware-Shape an Greenfield (userId/tier/authMode in
  c.get(...) statt user-Object), optional-auth als Schwester für
  anonymen Public-Read
- Hono-typing: outer Marketplace-Decks-Router ist Partial<AuthVars>
  weil Public-GET kein JWT braucht; Auth-Subroute ist strict

Lese-Referenz:
- 3331 LOC altes cards-server-Code (routes, services, middleware,
  lib) unter docs/marketplace/archive/code/ archiviert. Read-only,
  nicht im Build-Path.

Verifikation:
- 16 neue Vitest-Tests (Slug + Version-Hash), 72 gesamt grün
- type-check 0 errors
- E2E-Smoke gegen lokale cards-api: Cardecky-Author + Deck
  r2-stoische-ethik mit 3 Karten v1.0.0 (basic + basic + cloze),
  per-Karten-Hashes geschrieben, ai_moderation_log-Row da, semver-409
  + paid-422-Errors verifiziert. Smoke-Daten danach aufgeräumt.

Verbleibend für R3+: Discovery (explore + search), Engagement (stars/
subscribe/fork), Smart-Merge mit FSRS-State-Erhalt; danach R4 PRs +
Card-Discussions, R5 Frontend-Routes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:13:58 +02:00
Till JS
9a7068dd19 Phase 12 R0+R1: Marketplace-Restore-Plan + Schema in marketplace-pgSchema
R0 (Doku):
- Archiv unter docs/marketplace/archive/ aus managarten-Tag
  cards-decommission-base: MARKETPLACE_PLAN (654 Z., Vollvision mit
  mana-credits-Flow, Anti-Patterns), COMPETITORS, GUIDELINES,
  cards-server_CLAUDE.
- docs/playbooks/MARKETPLACE_RESTORE.md mit Schema-Naming-Entscheidung
  (eigenes marketplace-pgSchema), Wellen R0-R6, Cardecky-Skill-
  Integration, Lizenz-Modell.
- CLAUDE.md Invariante 2: Strategie-B gilt nur für Study-/FSRS-/Sync-
  Schicht; Marketplace-Restore ist explizite Ausnahme.
- STATUS.md: Phase 12 R0+R1 durch.

R1 (Schema):
- 16 Tabellen + 5 Enums im neuen marketplace-pgSchema (authors,
  decks, deck_versions, deck_cards, tag_definitions, deck_tags,
  deck_stars, deck_subscriptions, deck_forks, deck_pull_requests,
  card_discussions, deck_reports, ai_moderation_log, deck_purchases,
  author_payouts, author_follows).
- drizzle.config.ts: schemaFilter ['cards', 'marketplace'].
- Greenfield cards-pgSchema unangetastet.
- DB-CHECK decks_price_requires_license verifiziert (paid Deck mit
  CC-BY wirft sauber ab).
- type-check + 56 API-Tests grün, drizzle-kit push idempotent.

Decks dormant (kein Code-Pfad ruft die Tabellen). R2 (Backend α/β:
Author-Profile + Publish + AI-Mod) als nächstes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:05:22 +02:00
Till JS
e596199ba0 dev: dev:full + cards-dev-Alias + lokale mana-auth-Pipeline
Some checks are pending
CI / validate (push) Waiting to run
- pnpm dev:full chained: docker:up --wait → db:push → concurrently dev + dev:auth
- vite.config: ssr.noExternal + optimizeDeps.exclude für @mana/* aus Verdaccio
  (Raw-.ts-Sourcen brechen Node-22-Type-Stripping in node_modules)
- README + STATUS auf neuen Setup-Umfang aktualisiert (mana-auth läuft mit)
- concurrently als devDep, dev:auth/docker🆙auth/db:push:auth Sub-Scripts

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 12:38:51 +02:00
Till JS
f1622e9a48 docs: Phase 7 LIVE — mana-share + mana-mcp deployed
Some checks are pending
CI / validate (push) Waiting to run
2026-05-08 21:11:31 +02:00
Till JS
a960d09e5b docs: STATUS auf Phase 2/6/7/11
All checks were successful
CI / validate (push) Successful in 5s
2026-05-08 20:49:43 +02:00
Till JS
6ea96dddda docs: Phase 10 LIVE — cardecky.mana.how + cardecky-api.mana.how
Some checks are pending
CI / validate (push) Waiting to run
🚀 Hard-Cutover am 2026-05-08:
- Forgejo-Remote git.mana.how/till/cards angelegt + Push (Sprint 17a)
- Mac-Mini-Build via docker-compose.production.yml (Sprint 17b),
  Bind-Mounts auf /Volumes/ManaData/cards/{postgres,minio}
- Cloudflare-Tunnel-Routes cardecky.mana.how → :5181 (web) und
  cardecky-api.mana.how → :3191 (api), reload via launchctl kickstart
- Alte Container mana-app-cards-{server,web} gestoppt + entfernt
- nginx :4400 (in mana-monorepo) macht 301 von cards.*/cards-api.*
  auf cardecky.*/cardecky-api.* — User-Bookmarks bleiben funktional

Verifikation: https://cardecky-api.mana.how/healthz → ok,
/.well-known/mana-app.json exposed Manifest v1.0.0 beta-tier,
Deck + Card via API anlegbar (content_hash wird geschrieben).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:19:59 +02:00
Till JS
04c48ed930 docs: STATUS.md auf Phase-9-Welle-3-Stand
Some checks are pending
CI / validate (push) Waiting to run
24 Commits / 129 Tests / Phase 9 weit ausgebaut. Subtilität #11
(MinIO-Media-Storage, ObjectKey-Format <userId>/<ulid>.<ext>) und
#12 (Image-Occlusion-Architektur, MaskRegion-Schema, Editor/View-
Komponenten) ergänzt. MVP-Card-Set jetzt 4-mitgliedrig: basic,
basic-reverse, cloze, image-occlusion. Lokal-Dev-Setup um Bucket-
Container erweitert. Git-Historie + "Was als Nächstes" auf neuesten
Stand — Phase 9 ist jetzt im Wesentlichen fertig, Image-Occlusion-
Polish (Resize/Move) und weitere CardTypes (type-in, audio, mc)
sind die nächsten autonomen Items.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:52:49 +02:00
Till JS
e7ae93dcf9 docs: STATUS.md auf Phase-9-Welle-2-Stand
22 Commits / 105 Tests / Phase 9 weit ausgebaut. Subtilität #10
(content_hash-Architektur) ergänzt — Anki-Re-Import-Dedupe nutzt es,
Backfill-Lücke für Pre-9j-Karten dokumentiert. Git-Historie auf
neuesten Stand. "Was als Nächstes" auf Pre-Flight + Media-Upload
neu sortiert.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:31:57 +02:00
Till JS
a640594a24 docs: STATUS.md auf Phase-9-Polish-Stand
TL;DR aktualisiert: 17 Commits, 94 Tests, Phase 9 läuft mit 6 Sprints
durch (9a Card-Edit, 9b Cloze-Editor, 9c Inbox-Banner, 9d Protocol-
Swap+npm.mana.how, 9e Account/DSGVO-Self-Service, 9f Statistik).
Architektur-Subtilität #3 von "lokaler Mirror" auf "Re-Export +
historischer Kontext" geschärft. Git-Historie + "Was als Nächstes"
auf den neuen Stand gezogen — Schwerpunkt jetzt i18n/A11y, Hint-
Anzeige, Media-Upload für Anki-Import.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:07:53 +02:00
Till JS
9da10b3252 Phase 8d: STATUS.md auf Phase-8-Stand aktualisiert
TL;DR-Summary auf 11 Commits / 92 Tests / Cloze + Anki-Import
verschoben. Phasen-Tabelle: 8  mit 92 Tests grün. Architektur-
Subtilitäten ergänzt (#6 Cloze-N-Reviews, #7 Strategie-B-Ausnahme
für Anki-Parser, #8 Media-Drop, #9 sql-wasm.wasm-Pflege; alte #6
Decommission rutscht auf #10). MVP-Card-Type-Set in Punkt 6 der
festgenagelten Architektur-Entscheidungen aktualisiert. Subtilität
#2 (SubIndex-Granularität) verweist jetzt auf #6 für die text-
abhängige Cloze-Variante.

"Was als Nächstes ansteht"-Empfehlung neu sortiert: Card-Edit-Page
+ Pre-Flight-Abräumen (Verdaccio-Token liegt vor) statt Anki-Import
auf Platz 1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:46:33 +02:00
Till
2bed28212d docs: STATUS.md als Single Source of Truth für Cards-Onboarding
Bisherige Doku war über CLAUDE.md, README.md, SMOKE_TEST.md,
LESSONS_FROM_MANA_MONOREPO.md plus mana/docs/playbooks/CARDS_GREENFIELD.md
zerstreut — eine fresh-AI-Session musste sich Status zusammenstückeln.

STATUS.md zentralisiert:
- TL;DR + Architektur-Topologie
- Architektur-Entscheidungen (festgenagelt)
- Phasen-Status-Tabelle (/🚧/⏸ pro Phase mit Verifikations-Hinweis)
- Lokal-Lauf-Anleitung (5 Schritte zu cards-api + cards-web im Browser)
- Verifizierte Endpoints-Liste
- Pre-Flight für Phase 2 + Live-Föderation
- Wichtige Pointer: Konventionen, Stack, Files, Cross-Repo-Doks
- Git-Historie (6 Commits)
- 6 Architektur-Subtilitäten, die nicht offensichtlich sind:
  Reviews-plaintext, SubIndex-Granularität, Protocol-Mirror-TEMPORARY,
  Inbox-Auto-Create, Dev-Auth-temporär, mana-monorepo-Decommission
- Onboarding-Sequenz (5-Min-Lese-Plan)
- Vorschläge für nächste Phasen

Cross-References:
- CLAUDE.md verweist als erstes auf STATUS.md
- README.md ebenso
- mana/docs/playbooks/CARDS_GREENFIELD.md (im Plattform-Repo) verweist
  zurück auf cards/STATUS.md für aktuellen Stand — Playbook ist der
  Plan, STATUS.md ist die Lage.

Konvention: bei Phasen-Wechsel STATUS.md aktualisieren, nicht den
Playbook (sonst Doku-Drift).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:18:16 +02:00