feat(achievements): rebuild the page as a trophy cabinet with hints

Replace the card grid with medals, a showcase, category shelves, a record book and a
detail sheet. Add GET /achievements/hints, which explains how to unlock what is still
locked from the user's own library and reading history, backed by a new page-count
index. Year-Round Reader now reports its months read as progress.
This commit is contained in:
neon
2026-10-16 15:44:16 +00:00
parent c544a28e77
commit 83f17d6ff8
66 changed files with 28937 additions and 1143 deletions
+19
View File
@@ -468,6 +468,25 @@ export const E2E_SUITES = Object.freeze({
...SHARED_DB_AND_HELPER_PATHS,
],
},
"achievement-hints": {
id: "achievement-hints",
name: "Achievement Hints",
timeout: 60,
lane: "full",
description: "Achievement how-to-get-it hints: real queries, library scoping, and per-user isolation",
vitestTarget: "test/achievement-hints.e2e-spec.ts",
junitOutput: `${TEST_RESULTS_DIR}/achievement-hints-e2e-junit.xml`,
prepareDedicatedDatabase: true,
useDedicatedDatabase: true,
changedPaths: [
"server/src/modules/achievement/**",
"server/test/achievement-hints.e2e-spec.ts",
"server/test/e2e/authorization-matrix/**",
".github/workflows/e2e-runner.yml",
"packages/types/src/achievement.ts",
...SHARED_DB_AND_HELPER_PATHS,
],
},
"series-next-book": {
id: "series-next-book",
name: "Series Next Book",