99c55c1dba
chore(frontend): remove obsolete Admin/AdminLesson pages
2026-05-21 07:17:04 +02:00
9928390946
feat(frontend): router restructure /admin → /lessons with redirects
2026-05-21 07:16:17 +02:00
d5dfc0d2db
feat(frontend): ⌘K search trigger in layout + /lessons nav
2026-05-21 07:15:02 +02:00
4b9ff4b783
feat(frontend): ⌘K search palette modal
2026-05-21 07:13:50 +02:00
5754bec679
feat(frontend): lessons page with filter (replaces Admin.tsx)
2026-05-21 07:12:27 +02:00
0529e2a5e8
feat(frontend): lesson tree with filter + dnd-kit drag reorder
2026-05-21 07:11:13 +02:00
3254e225e9
feat(frontend): rich lesson detail page
2026-05-21 07:09:26 +02:00
d9b913aab7
feat(frontend): lesson stats panel + sublesson list + recent sessions list
2026-05-21 07:07:46 +02:00
2a6d048b65
feat(frontend): rewritten stats page with heatmap + progress + due
2026-05-21 07:06:37 +02:00
4c2d42779f
feat(frontend): due-overview card with start-review CTA
2026-05-21 07:05:35 +02:00
a10d02cbaf
feat(frontend): lesson progress list with sorting
2026-05-21 07:04:34 +02:00
5df6b240d9
feat(frontend): 12-month heatmap component
2026-05-21 07:03:50 +02:00
ab382a2c62
feat(frontend): API clients for search + stats extensions + due session
2026-05-21 07:02:57 +02:00
65dcd185b8
test(ux): integration coverage for search + stats + due session
2026-05-21 07:02:13 +02:00
9bfcb02c25
feat(stats): /lessons-progress and /due routes + heatmap default 52 weeks
2026-05-21 07:00:50 +02:00
754f8b6fc6
feat(sessions): startDueSession + POST /api/sessions/due
2026-05-21 07:00:00 +02:00
fb25f48f04
feat(stats): lessons-progress and due-overview services
2026-05-21 06:58:30 +02:00
f9912a7a8d
feat(search): /api/search route
2026-05-21 06:56:44 +02:00
b1e5d5f276
feat(search): global search service with library/marketplace + cards
2026-05-21 06:55:35 +02:00
aab1b4fdc2
docs: implementation plan for sub-project C — UX extensions (20 tasks)
2026-05-21 02:40:32 +02:00
cdd54d3745
docs: spec for sub-project C — UX extensions
2026-05-21 02:31:23 +02:00
c04b857c10
test(e2e): multi-user sharing + subscribe + practice flow
2026-05-21 00:42:52 +02:00
44622442de
feat(frontend): marketplace route
2026-05-21 00:40:31 +02:00
9fdadca529
feat(dashboard): subscriptions section
2026-05-21 00:39:36 +02:00
6a65c5cf96
feat(frontend): marketplace page with subscribe + fork
2026-05-21 00:38:20 +02:00
3356767d21
feat(admin): visibility toggle, fork/unsubscribe, readonly CardTable for subscribers
2026-05-21 00:36:51 +02:00
7eabd667ce
feat(frontend): lesson badges + marketplace nav link
2026-05-21 00:34:31 +02:00
01f7df3735
feat(frontend): API for visibility/fork/subscribe/marketplace/curated
2026-05-21 00:32:50 +02:00
4d4001e202
test(ownership): multi-user integration coverage
2026-05-21 00:31:23 +02:00
5822dbc8ae
feat(app): mount sharing routes + post-migration backfill
2026-05-21 00:28:29 +02:00
fb95ccd772
feat(routes): thread userId through routes + visibility/fork/curated endpoints
2026-05-21 00:26:49 +02:00
181a757323
refactor(marketplace): substring-only q filter, fix test to use real substring
2026-05-21 00:24:01 +02:00
9dcce76f01
feat(marketplace): list shared roots with filters + sort + pagination
2026-05-21 00:23:10 +02:00
4339728326
feat(fork): subtree fork service + tests
2026-05-21 00:19:46 +02:00
f378c0fdb0
feat(subs): subscribe/unsubscribe/list service + routes
2026-05-21 00:17:16 +02:00
28321c6f84
feat(stats): per-user filtering across all aggregations
2026-05-21 00:15:24 +02:00
a0c11d8e21
feat(sessions): per-user sessions and progress
2026-05-21 00:13:15 +02:00
2d37aee32c
feat(cards): permission-aware CRUD
2026-05-21 00:11:00 +02:00
9aaba94b95
feat(lessons): ownership-aware CRUD + tree filtering + visibility/curated
2026-05-21 00:09:32 +02:00
66363b8094
feat(perms): canRead/canEdit with ancestor walk + tests
2026-05-21 00:07:05 +02:00
262ac8b162
feat(shared): ownership types and marketplace schemas
2026-05-21 00:05:01 +02:00
a872560477
feat(db): ownership columns and lesson_subscriptions table
2026-05-21 00:03:24 +02:00
18fadc44f3
docs: implementation plan for sub-project B — ownership & sharing (20 TDD tasks)
2026-05-20 23:57:31 +02:00
a85d4afa4f
docs: spec for sub-project B — ownership & sharing
2026-05-20 23:46:29 +02:00
e27c1ca06c
chore(auth): non-blocking follow-ups from final review
...
- /api/stats: add verifyCsrf middleware (defense-in-depth; no-op for GETs)
- VerifyEmailPage: useRef guard to prevent React StrictMode double-fire of
the single-use verify token in dev
- router.tsx: route-level code splitting via React.lazy + Suspense; initial
bundle drops from 397 KB to 224 KB with per-route chunks (0.3–14 KB each)
- e2e: wait for verify-email completion before login; bump Account-menu
timeout to handle Vite cold-chunk compile
2026-05-20 23:27:52 +02:00
5739b6d941
test(e2e): register+verify smoke and admin invite flow via Mailpit
2026-05-20 23:19:56 +02:00
28bb903b93
feat(frontend): router with auth boundary, role guard, and all auth pages
2026-05-20 23:12:59 +02:00
117cd52e3e
feat(frontend): admin users page (invite, role, activate, send-reset)
2026-05-20 23:11:53 +02:00
88ba0a790c
feat(frontend): profile page (display name, email, change password)
2026-05-20 23:10:28 +02:00
1850cd78f5
feat(frontend): VerifyEmail + ForgotPassword + ResetPassword + AcceptInvite pages
2026-05-20 23:09:04 +02:00