Backend (apps/presence-api): - tcg-config: centralized rarity/price/shiny config, daily reset Europe/Paris - tcg-index-catalog: idempotent Emoji Kitchen sticker indexer (23139 combos) - tcg-catalog-store: in-memory catalog with path-traversal guard - tcg-card-store: card instances, discoveries (unique constraint), daily tracking - tcg-booster-store: daily/paid/admin boosters, per-user mutex, replay protection - tcg-economy-log: JSONL audit log - cookie-store: added debitCookies/creditCookies (atomic, no negative balance) - server.ts: 11 HTTP routes (/tcg/images, /tcg/booster/*, /tcg/collection, etc.) - 47 backend tests (concurrence, atomicity, path traversal, admin auth) Protocol (packages/protocol): - tcg.ts: shared types + strict parsers (rarity, burn, pagination) Frontend (apps/client): - tcg-controller: client API controller (Matrix OpenID auth) - BotsuTcgPage: 3 tabs (Booster, Collection, Cimetière) with filters/pagination - catalog.ts: emoji-tcg app registered - Router.tsx + paths.ts: /botsu/tcg/ route - BotsuNav: nav entry with Smile icon Docs: - docs/emoji-tcg-licence.md: Emoji Kitchen attribution and licence note Config: EMOJI_KITCHEN_ROOT, DAILY_BOOSTER_SIZE=3, BOOSTER_PRICE=1000, SHINY_RATE=0.01, RARITY_* (sum=1 validated at startup), BURN_REWARD=50 Tests: 106 backend + 98 frontend + 46 protocol = 250 pass
Shared packages
Reusable BOTSU packages will live here. Planned packages include UI, protocol, identity, presence SDK, and testing utilities.
Each package must provide its own tests and public API. Application-specific behavior remains under apps/.