Commit graph

5 commits

Author SHA1 Message Date
Till JS
404ddec62d docs(marketplace): CONTENT_PLAN — bilingualer CH/DE-Lehrplan-Korridor + 20 Phase-1-Seed-Decks
Strategie-Dokument für Cardecky-Editorial. Recherche-Synthese aus:

- Lehrplan 21 (CH) — 6 Fachbereiche + 2 Module, 3 Zyklen, 21
  deutschsprachige Kantone (Quelle: zh.lehrplan.ch +
  zh.ch/.../volksschule-schulinfo-unterricht/fachbereiche-und-module)
- KMK-Bildungsstandards (DE) — Primar 2022, Sek 1 HSA/MSA 2022/2023/
  2024, Sek 2 Abi 2012/2020. Bundesländer-Hoheit über Lehrpläne
- SRS-Forschungs-Konsens (Kang 2016, PMC) — Vokabeln + Fakten +
  Definitionen Goldstandard, kreatives Schreiben falsches Werkzeug
- Empirische Anki/Quizlet/Brainscape-Top-Domänen — Medizin (US),
  Sprachen (Japanisch riesig), Programmierung, Geografie, Geschichte

Kernfindung: Cardecky targetet die deutschsprachige Schul-Lücke
zwischen CH-Sek-1 und DE-Sek-1 (Klasse 7–9 / Zyklus 3), wo es heute
keine kuratierte SRS-Bibliothek gibt. Hot-Five-Schnittmenge:
Deutsch-Grammatik, Mathe, Englisch-Vokabeln, Naturwissenschaften,
Geografie.

Inhalt:

- Domain-Matrix mit SRS-Eignung × CH-Lehrplan × DE-KMK ×
  Beliebtheit, Tier A/B/C/D/E
- Stufen-Mapping pro Schulstufe (Zyklus 1 Skip → Sek 1 Kerngeschäft)
- Phase-1-Seed: 20 konkrete Tier-A-Decks (~3.100 Karten gesamt)
  mit Slugs, Karten-Counts, Lizenzen (CC-BY-4.0 default, CC0 für
  gemeinfreie Inhalte wie 1×1)
- Cold-Start-Hebel 1+2+3: Cardecky-Eigenproduktion (via /cards-deck-
  Skill mit menschlichem Reviewer-Stop), Anki-Top-Decks-Import mit
  Original-Author-Attribution + verified_mana-Badge, Lehrkräfte-
  Outreach
- Anti-Patterns: keine Medizin-Decks (anderer Markt), kein
  Religiös-Konfessionelles ohne Editorial-Linie, keine politischen
  Fakten ohne Konsens, kein Anki-Bashing, kein nationalistisches
  Framing
- Lizenz-Hygiene: Lehrplan-21-Inhalte selbst ist CC-BY-NC-ND, KMK-
  Material gemischt — wir formulieren Karten eigenständig neu auf
  Basis der Kompetenz-Bereiche, mit Quellen-Belegen pro Karte
- Offene Punkte: CH-Französisch-vs-DE-Englisch-Track, Schweizer
  Helvetismen, Jahrgangsstufen-Tagging-Schema-Erweiterung, Editorial-
  Gate für Featured, Anki-Importe-Lizenz-Audit, Image-Occlusion-
  Verifikation für Bio-Organe + Geografie-Decks

Owner: @till + Cardecky-Skill. Erste Welle: 5 priorisierte Decks
(Englisch A2/B1, Französisch A2, Mathe Sek 1, Geografie Welt).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 17:16:22 +02:00
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
e3b3a2b478 docs: SMOKE_TEST.md — verifizierter E2E-Lauf gegen lokale Postgres
Phase-3-Verifikation 2026-05-08:
- Drizzle push erfolgreich: 8 Tabellen, 11 Indizes, 6 FKs in
  Schema `cards`
- E2E-Flow durchgespielt: Deck-Create, Card-Create (basic-reverse,
  2 Auto-Reviews), Reviews-Due, FSRS-Grade (state new→learning,
  stability 0→2.3, learning_steps 0→1), Cross-User-Schutz (403),
  Cascade-Delete (Deck→Cards→Reviews alle 0)
- Type-Check + 46 Vitest-Tests grün

Runbook für reproduzierbaren Lauf in docs/SMOKE_TEST.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:43:07 +02:00
Till
8605b1b517 Phase 0+1: Repo-Skelett für Cards-Greenfield
Strategie B (beschlossen 2026-05-08): Cards wird als eigenständige
föderierte App neu gebaut, ohne Code-Übernahme aus mana-monorepo.

Skelett enthält:
- apps/api: Hono+Bun mit /healthz, /version, Manifest-Endpoint, leere
  pgSchema('cards'), Drizzle-Config, erstem Vitest
- apps/web: SvelteKit 2 + Svelte 5 (runes), Vite auf 3082
- packages/cards-domain: Pure-TS, CardType-Discriminated-Union,
  SubIndex-Granularität für Reviews, Future-CardType-Set vorbereitet
- infrastructure/docker-compose.yml: Postgres 16 auf 5435
- app-manifest.json: v1.0.0, Verein-owned, beta-tier
- .github/workflows/ci.yml
- docs/LESSONS_FROM_MANA_MONOREPO.md (Read-Day-Output, 15 Lehren)

Pre-Flight für Phase 2 (Auth-Föderation): DNS cardecky.mana.how,
GitHub-Repo mana-ev/cards, Cards-App-Registrierung in mana-auth,
NPM_AUTH_TOKEN für Verdaccio.

Plan: mana/docs/playbooks/CARDS_GREENFIELD.md

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