managarten/apps/cards
Till JS 46fefd5cc4 feat(cards): Phase ε.4 — Card list + discussions on /d/<slug>
- DiscussionService.countsForDeck: bulk count (visible) comments per
  card-content-hash for one deck. Mounted at GET
  /v1/decks/:slug/discussion-counts so the public deck page can
  render comment badges without N+1 fetches.
- <DeckCardList> on /d/<slug>: lists the latest version's cards,
  renders a one-line preview + "💬 N" badge, and expands the
  inline <CardDiscussions> on click. Anonymous visitors see counts;
  posting requires auth (CardDiscussions already gates that).
2026-05-07 22:46:47 +02:00
..
apps/web feat(cards): Phase ε.4 — Card list + discussions on /d/<slug> 2026-05-07 22:46:47 +02:00
docs feat(cards): Phase ε.3 — PR notifications + Card-Discussions UI 2026-05-07 22:24:45 +02:00
COMPETITORS_2026-05.md docs(cards): competitor analysis Mai 2026 2026-05-07 15:28:02 +02:00
GUIDELINES.md feat(cards): Phase-1 Spinoff — standalone cards.mana.how + cards-core extraction 2026-05-07 01:20:43 +02:00
package.json feat(cards): Phase-1 Spinoff — standalone cards.mana.how + cards-core extraction 2026-05-07 01:20:43 +02:00
README.md feat(cards): Phase-1 Spinoff — standalone cards.mana.how + cards-core extraction 2026-05-07 01:20:43 +02:00

Cards

Spaced-repetition flashcards on cards.mana.how.

Phase-1 standalone web app. The frontend lives here; data, auth, and sync are shared with the rest of the Mana stack:

  • Auth: mana-auth (SSO), *.mana.how
  • Sync: mana-sync, app-id cards
  • Storage: mana_platform.cards.* (Postgres, RLS)

The same cards data backs the mana built-in Cards module at mana.how/cards. Schema changes ship to both frontends together — see apps/cards/GUIDELINES.md.

Layout

apps/cards/
├── apps/
│   └── web/        # SvelteKit 2 + Svelte 5 — the Phase-1 surface
├── GUIDELINES.md   # Project rules (read first)
└── README.md

apps/cards/apps/mobile/ and any production apps/cards/apps/landing/ will land in Phase 2/3.

Quick start

pnpm install
pnpm --filter @cards/web dev      # cards.mana.how on http://localhost:5180