Commit graph

5 commits

Author SHA1 Message Date
Till JS
e2b493d528 feat(study): Periodensystem-Karten mit Kategorie-Farben und Eigenschaften-Tabelle
- build_cards.py: Atommasse, Kategorie, Periode/Gruppe für alle 118 Elemente
- front: "# {Symbol}" → großes zentriertes Heading im Study-View
- back: Name + Eigenschaften-Tabelle (Z, Atommasse, Kategorie, P/G)
- fields.color: Kategorie-Farbe (10 Kategorien, je eigene Hex-Farbe)
- Study-Page: cardColor liest fields.color → linker Streifen wechselt pro Element
- CSS: h1 (4rem, zentriert), table (Header hidden, Label gedimmt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 14:38:48 +02:00
Till JS
9a07454b75 seed: 3 Cardecky-Decks v1.0.0 + Audit-Trail im Repo
Drei Cardecky-Decks live im lokalen Marketplace, mit komplettem
Audit-Trail unter docs/marketplace/seed/:

| Deck                          | Karten | Lizenz    |
|-------------------------------|--------|-----------|
| geografie-welt-top30          |    30  | CC0-1.0   |
| english-a2-grundwortschatz    |   500  | CC-BY-4.0 |
| periodensystem-elemente       |   118  | CC0-1.0   |

648 Karten gesamt = 1296 FSRS-Reviews. Alle drei via /cards-deck-
Skill 5-Stage-Pipeline (Plan, Recherche, Design, Validate, Publish).
Bulk-Mode mit Python-Heredoc-Generator, Server-Side atomic-Insert
in <1s pro Deck.

Pro Deck im Audit-Trail:
- plan.md (Subtopic-Boundaries, Streitfälle vorab)
- research/sources.md (3-8 nummerierte Quellen)
- research/notes.md (Recherche-Notes, Streitfall-Auflösungen)
- design/build_cards.py (deterministischer Generator mit Sanity-
  Checks gegen Front-Duplikate)
- design/cards.jsonl (atomic Output, 1 Karte/Zeile)
- design/outline.md (Subtopic-Counts + F-Range)
- validate/report.md (5 Standard-Checks alle ✓)
- publish/deck.json + cards.log (Server-Response + Round-Trip)

CONTENT_PLAN §8 Phase-1-Seed-Liste: 3/20 done.

README.md erklärt die seed/-Konvention für künftige Cardecky-Decks
sowie das Update-Protokoll bei PR-Merges aus dem Marketplace.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:49:05 +02:00
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