{ "date": "2026-05-08", "day_number": 1, "weekday": "Freitag", "commits": 45, "authors": [ { "name": "Till JS", "count": 38 }, { "name": "Till", "count": 7 } ], "additions": 15371, "deletions": 1122, "net_lines": 14249, "files_changed": 134, "new_files": 0, "deleted_files": 0, "session": { "first_commit_at": "2026-05-08T12:08:41.000Z", "last_commit_at": "2026-05-08T20:10:52.000Z", "total_span_minutes": 482, "active_minutes": 244, "pauses": [ { "from": "14:41", "to": "16:43", "minutes": 122 }, { "from": "18:52", "to": "20:09", "minutes": 77 }, { "from": "21:11", "to": "21:50", "minutes": 39 } ], "longest_focus_minutes": 130 }, "top_dirs": [ { "path": "apps/web/src/lib", "pct": 20 }, { "path": "apps/web/src/routes", "pct": 14 }, { "path": "packages/cards-domain/src", "pct": 12 }, { "path": "apps/api/src/routes", "pct": 8 }, { "path": "apps/api/src/db", "pct": 4 } ], "top_extensions": [ { "ext": ".ts", "count": 159 }, { "ext": ".svelte", "count": 59 }, { "ext": ".json", "count": 23 }, { "ext": ".md", "count": 14 }, { "ext": ".yml", "count": 10 }, { "ext": ".yaml", "count": 7 } ], "tags": [ "prod-compose", "dockerfiles", "api Dockerfile", "prod", "auth" ], "commits_list": [ { "hash": "8605b1b", "short": "Phase 0+1: Repo-Skelett für Cards-Greenfield", "type": null, "scope": null, "additions": 1197, "deletions": 0, "timestamp": "2026-05-08T14:08:41+02:00" }, { "hash": "45a47e0", "short": "Phase 3: Domain-Modell + Decks/Cards/Reviews-CRUD", "type": null, "scope": null, "additions": 1897, "deletions": 106, "timestamp": "2026-05-08T14:21:54+02:00" }, { "hash": "5f67bd9", "short": "Phase 3 follow-up: type-check + tests grün, ts-fsrs v5 API", "type": null, "scope": null, "additions": 2345, "deletions": 35, "timestamp": "2026-05-08T14:41:04+02:00" }, { "hash": "e3b3a2b", "short": "docs: SMOKE_TEST.md — verifizierter E2E-Lauf gegen lokale Postgres", "type": null, "scope": null, "additions": 111, "deletions": 0, "timestamp": "2026-05-08T16:43:07+02:00" }, { "hash": "89a7a92", "short": "Phase 4: Frontend-Core MVP — Decks, Cards, Study mit FSRS-Loop", "type": null, "scope": null, "additions": 1582, "deletions": 58, "timestamp": "2026-05-08T16:52:31+02:00" }, { "hash": "0328caa", "short": "Phase 5: Föderations-Endpunkte — Cards ist föderierter Peer", "type": null, "scope": null, "additions": 1371, "deletions": 0, "timestamp": "2026-05-08T17:10:35+02:00" }, { "hash": "2bed282", "short": "docs: STATUS.md als Single Source of Truth für Cards-Onboarding", "type": null, "scope": null, "additions": 336, "deletions": 0, "timestamp": "2026-05-08T17:18:16+02:00" }, { "hash": "553a78d", "short": "Phase 8a: Cloze als MVP-Card-Type, Cluster-Counter", "type": null, "scope": null, "additions": 248, "deletions": 13, "timestamp": "2026-05-08T17:35:39+02:00" }, { "hash": "0b609c4", "short": "Phase 8b: Cloze-Render im Study-View", "type": null, "scope": null, "additions": 18, "deletions": 1, "timestamp": "2026-05-08T17:37:53+02:00" }, { "hash": "2ca09fe", "short": "Phase 8c: Anki-Import via portiertem Parser", "type": null, "scope": null, "additions": 916, "deletions": 3, "timestamp": "2026-05-08T17:43:12+02:00" }, { "hash": "9da10b3", "short": "Phase 8d: STATUS.md auf Phase-8-Stand aktualisiert", "type": null, "scope": null, "additions": 78, "deletions": 20, "timestamp": "2026-05-08T17:46:33+02:00" }, { "hash": "0a40367", "short": "Phase 9a: Card-Edit-Page für alle 3 CardTypes", "type": null, "scope": null, "additions": 247, "deletions": 4, "timestamp": "2026-05-08T17:51:42+02:00" }, { "hash": "35366ed", "short": "Phase 9b: Cloze-Editor in /cards/new", "type": null, "scope": null, "additions": 113, "deletions": 38, "timestamp": "2026-05-08T17:52:55+02:00" }, { "hash": "47419b3", "short": "Phase 9c: Inbox-Banner auf /decks und /study", "type": null, "scope": null, "additions": 63, "deletions": 0, "timestamp": "2026-05-08T17:54:19+02:00" }, { "hash": "aff4d95", "short": "Phase 9d: Pre-Flight — Protocol-Mirror durch upstream ersetzt", "type": null, "scope": null, "additions": 83, "deletions": 175, "timestamp": "2026-05-08T18:00:56+02:00" }, { "hash": "03117d5", "short": "Phase 9e: Account-Page mit DSGVO-Self-Service", "type": null, "scope": null, "additions": 316, "deletions": 52, "timestamp": "2026-05-08T18:03:41+02:00" }, { "hash": "6db6dc3", "short": "Phase 9f: Statistik-Dashboard", "type": null, "scope": null, "additions": 238, "deletions": 2, "timestamp": "2026-05-08T18:06:13+02:00" }, { "hash": "a640594", "short": "docs: STATUS.md auf Phase-9-Polish-Stand", "type": null, "scope": null, "additions": 60, "deletions": 26, "timestamp": "2026-05-08T18:07:53+02:00" }, { "hash": "c25c1d0", "short": "Phase 9g: i18n DE/EN über alle Routes", "type": null, "scope": null, "additions": 826, "deletions": 270, "timestamp": "2026-05-08T18:22:00+02:00" }, { "hash": "fd86d96", "short": "Phase 9h: A11y-Pass", "type": null, "scope": null, "additions": 87, "deletions": 7, "timestamp": "2026-05-08T18:24:33+02:00" }, { "hash": "4b451f1", "short": "Phase 9i: Cloze-Hint-Anzeige", "type": null, "scope": null, "additions": 60, "deletions": 12, "timestamp": "2026-05-08T18:26:00+02:00" }, { "hash": "593d447", "short": "Phase 9j: Anki-Re-Import-Dedupe via content_hash", "type": null, "scope": null, "additions": 176, "deletions": 8, "timestamp": "2026-05-08T18:29:56+02:00" }, { "hash": "e7ae93d", "short": "docs: STATUS.md auf Phase-9-Welle-2-Stand", "type": null, "scope": null, "additions": 42, "deletions": 15, "timestamp": "2026-05-08T18:31:57+02:00" }, { "hash": "c9eb0a6", "short": "Phase 9k: Media-Upload via MinIO-Container", "type": null, "scope": null, "additions": 886, "deletions": 78, "timestamp": "2026-05-08T18:42:56+02:00" }, { "hash": "39b1791", "short": "Phase 9l: Image-Occlusion als 4. MVP-CardType", "type": null, "scope": null, "additions": 681, "deletions": 33, "timestamp": "2026-05-08T18:50:45+02:00" }, { "hash": "04c48ed", "short": "docs: STATUS.md auf Phase-9-Welle-3-Stand", "type": null, "scope": null, "additions": 59, "deletions": 21, "timestamp": "2026-05-08T18:52:49+02:00" }, { "hash": "045903b", "short": "Phase 10a: Production-Deploy-Stack (Mac Mini)", "type": null, "scope": null, "additions": 203, "deletions": 0, "timestamp": "2026-05-08T20:09:19+02:00" }, { "hash": "a993cc2", "short": "fix(prod-compose): cards-api needs NPM_AUTH_TOKEN build-arg", "type": "fix", "scope": "prod-compose", "additions": 2, "deletions": 0, "timestamp": "2026-05-08T20:10:39+02:00" }, { "hash": "cfdc582", "short": "fix(dockerfiles): copy tsconfig.base.json into build context", "type": "fix", "scope": "dockerfiles", "additions": 2, "deletions": 2, "timestamp": "2026-05-08T20:12:01+02:00" }, { "hash": "464aee1", "short": "fix(prod-compose): cards-minio port 9110→9210 (cadvisor belegt 9110)", "type": "fix", "scope": "prod-compose", "additions": 4, "deletions": 4, "timestamp": "2026-05-08T20:13:06+02:00" }, { "hash": "78a6c8f", "short": "fix(prod-compose): cards-api port 3091→3191 (3091 belegt)", "type": "fix", "scope": "prod-compose", "additions": 2, "deletions": 2, "timestamp": "2026-05-08T20:13:46+02:00" }, { "hash": "f9d7a16", "short": "fix(api Dockerfile): COPY app-manifest.json (runtime-import)", "type": "fix", "scope": "api Dockerfile", "additions": 4, "deletions": 0, "timestamp": "2026-05-08T20:14:20+02:00" }, { "hash": "0dff798", "short": "fix(prod): public URLs auf cardecky.* (war cards.* — bookmarks via nginx-301)", "type": "fix", "scope": "prod", "additions": 7, "deletions": 6, "timestamp": "2026-05-08T20:18:10+02:00" }, { "hash": "6ea96dd", "short": "docs: Phase 10 LIVE — cardecky.mana.how + cardecky-api.mana.how", "type": null, "scope": null, "additions": 8, "deletions": 2, "timestamp": "2026-05-08T20:19:59+02:00" }, { "hash": "506aec3", "short": "Phase 2a: Cards-API JWT-Verify (additiv zum Dev-Stub)", "type": null, "scope": null, "additions": 73, "deletions": 11, "timestamp": "2026-05-08T20:41:09+02:00" }, { "hash": "76d4e92", "short": "Phase 6: Tier-Awareness + mana-credits-Client (Plumbing)", "type": null, "scope": null, "additions": 147, "deletions": 10, "timestamp": "2026-05-08T20:45:08+02:00" }, { "hash": "5b6d096", "short": "fix(prod-compose): pass MANA_AUTH_URL/MANA_CREDITS_URL/SERVICE_KEY/DEV_STUB into cards-api container", "type": "fix", "scope": "prod-compose", "additions": 4, "deletions": 0, "timestamp": "2026-05-08T20:45:55+02:00" }, { "hash": "d7c7c97", "short": "Phase 7a: cards.create-Tool für Cloze + Image-Occlusion + content_hash", "type": null, "scope": null, "additions": 36, "deletions": 4, "timestamp": "2026-05-08T20:48:39+02:00" }, { "hash": "a960d09", "short": "docs: STATUS auf Phase 2/6/7/11 ✅", "type": null, "scope": null, "additions": 4, "deletions": 4, "timestamp": "2026-05-08T20:49:43+02:00" }, { "hash": "7119756", "short": "Phase 10c: Cards-Web SSO-Login gegen mana-auth", "type": null, "scope": null, "additions": 236, "deletions": 55, "timestamp": "2026-05-08T21:08:06+02:00" }, { "hash": "f1622e9", "short": "docs: Phase 7 LIVE — mana-share + mana-mcp deployed", "type": null, "scope": null, "additions": 1, "deletions": 1, "timestamp": "2026-05-08T21:11:31+02:00" }, { "hash": "1b840a9", "short": "Phase 10d: Token-Refresh + 401-Retry im Cards-Web", "type": null, "scope": null, "additions": 118, "deletions": 15, "timestamp": "2026-05-08T21:50:12+02:00" }, { "hash": "3b74583", "short": "fix(auth): two-step Login (Better-Auth-native + /refresh) für SSO-Cookie", "type": "fix", "scope": "auth", "additions": 30, "deletions": 15, "timestamp": "2026-05-08T21:52:46+02:00" }, { "hash": "87a7a31", "short": "fix(web): SvelteKit-env via \\$env/dynamic/public statt import.meta.env", "type": "fix", "scope": "web", "additions": 17, "deletions": 8, "timestamp": "2026-05-08T22:03:35+02:00" }, { "hash": "f11df63", "short": "Phase 9m: KI-Deck-Generation via mana-llm", "type": null, "scope": null, "additions": 437, "deletions": 6, "timestamp": "2026-05-08T22:10:52+02:00" } ], "review_state": "auto", "llm": { "model": null, "generated_at": null } }