feat(front): redesign Puzzles with a landing, solving on GameScreen and a home with Puzzles #557

Merged
root merged 23 commits from feat/450-puzzles-redesign into main 2026-10-19 19:15:00 +00:00
root commented 2026-10-19 15:01:54 +00:00 (Migrated from gitlab.core-project.space)

Closes #450, #451, #452, #453, #454, #455, #456, #457.

Summary

Puzzles get a landing, solving moves onto GameScreen, and the home splits into a Puzzles half and a Play half.

 /                       HomePage
-  <Doors> Local · Online
+  <Half "Puzzles">  <HomePuzzles>      Puzzle rating · Mixed training | Resume · 3 least-tried Themes
+                                       visitor: Create an account → back to /puzzles
+  <Half "Play">     Online first, Local as a link
 /puzzles                PuzzlesPage
-  board + Theme select
+  Puzzle rating · big door (Mixed training | Resume)
+  Theme family tabs → Theme cards (position, description, solved/tried | New) → /puzzles/train?theme=…
+  last five Attempts → History
+/puzzles/train           PuzzleTrainPage on GameScreen
+  Puzzle row (rating hidden until resolved) · board · Player row
+  rail: Theme (opens the Theme switcher in place) · move list
+  result dialog on solved | failed: rating change · Next · Retry · Review

The API gains one procedure, and the Puzzle's own rating once it is resolved:

 puzzle.*
+  progress → { pending, themes: [{ theme, tried, solved }] }   # Replays never count
   move     → solved | failed  { rated, themes, +rating }
   solution →                  { rest, rated, themes, +rating }

Layout, across pages: PageFrame is centred at 80 rem (My games, the profile, the account, the History), and on lg the GameScreen board grows with the window height up to 56 rem (Local, Room, Game review).

Evidence

  • Before: the home had two doors and nothing about Puzzles; /puzzles was a bare board beside a Theme select.
    After: the screenshot bot's before/after for Home, Local and Room on desktop and mobile is in the comment below. It covers no Puzzles screen, since those need an Account.

  • Before: no test for the landing, the train screen, the result dialog or the home's Puzzles half.
    After: pipeline #242 is green on 1e45efd1, including e2e:

    e2e puzzles.spec
      home Puzzles half → a Theme on the landing → solve one, fail one, each in a result dialog
        with its rating change → both in the History → replay one unrated
      visitor: home Puzzles half → sign-up → Puzzles landing
      1920×1080: Local and solving boards grow beside the move list; landing and My games centred
    api rpc-puzzle-progress
      every Theme untried for a new Account · pending not counted · a Puzzle counts toward each
      of its Themes · Replays never count · only the caller's Attempts · UNAUTHORIZED signed out
    front: 1549 passed
    

Merge Danger

Door: two-way

No migration and no stored data changes. puzzle.progress and the rating fields are additive, so a revert only drops them.

Blast Radius: wide

  • Every PageFrame and GameScreen page changes width: PageFrame goes from 56 rem pinned left to 80 rem centred, GameScreen from 68 to 80 rem, and its board grows on tall screens. My games, the profile, the account, the History, Local, Room and Game review all move.
  • Old /puzzles?theme=… links now open the landing and ignore the Theme, with no redirect to /puzzles/train?theme=….
  • Front and API ship together: the front now expects rating on solved, failed and solution, so a front deployed before its API would fail to read a result.
Closes #450, #451, #452, #453, #454, #455, #456, #457. ## Summary Puzzles get a landing, solving moves onto `GameScreen`, and the home splits into a Puzzles half and a Play half. ```diff / HomePage - <Doors> Local · Online + <Half "Puzzles"> <HomePuzzles> Puzzle rating · Mixed training | Resume · 3 least-tried Themes + visitor: Create an account → back to /puzzles + <Half "Play"> Online first, Local as a link /puzzles PuzzlesPage - board + Theme select + Puzzle rating · big door (Mixed training | Resume) + Theme family tabs → Theme cards (position, description, solved/tried | New) → /puzzles/train?theme=… + last five Attempts → History +/puzzles/train PuzzleTrainPage on GameScreen + Puzzle row (rating hidden until resolved) · board · Player row + rail: Theme (opens the Theme switcher in place) · move list + result dialog on solved | failed: rating change · Next · Retry · Review ``` The API gains one procedure, and the Puzzle's own rating once it is resolved: ```diff puzzle.* + progress → { pending, themes: [{ theme, tried, solved }] } # Replays never count move → solved | failed { rated, themes, +rating } solution → { rest, rated, themes, +rating } ``` Layout, across pages: `PageFrame` is centred at 80 rem (My games, the profile, the account, the History), and on `lg` the `GameScreen` board grows with the window height up to 56 rem (Local, Room, Game review). ## Evidence - **Before:** the home had two doors and nothing about Puzzles; `/puzzles` was a bare board beside a Theme select. **After:** the screenshot bot's before/after for Home, Local and Room on desktop and mobile is in the comment below. It covers no Puzzles screen, since those need an Account. - **Before:** no test for the landing, the train screen, the result dialog or the home's Puzzles half. **After:** pipeline #242 is green on `1e45efd1`, including e2e: ```text e2e puzzles.spec home Puzzles half → a Theme on the landing → solve one, fail one, each in a result dialog with its rating change → both in the History → replay one unrated visitor: home Puzzles half → sign-up → Puzzles landing 1920×1080: Local and solving boards grow beside the move list; landing and My games centred api rpc-puzzle-progress every Theme untried for a new Account · pending not counted · a Puzzle counts toward each of its Themes · Replays never count · only the caller's Attempts · UNAUTHORIZED signed out front: 1549 passed ``` ## Merge Danger **Door:** two-way No migration and no stored data changes. `puzzle.progress` and the `rating` fields are additive, so a revert only drops them. **Blast Radius:** wide - **Every `PageFrame` and `GameScreen` page** changes width: `PageFrame` goes from 56 rem pinned left to 80 rem centred, `GameScreen` from 68 to 80 rem, and its board grows on tall screens. My games, the profile, the account, the History, Local, Room and Game review all move. - **Old `/puzzles?theme=…` links** now open the landing and ignore the Theme, with no redirect to `/puzzles/train?theme=…`. - **Front and API ship together:** the front now expects `rating` on `solved`, `failed` and `solution`, so a front deployed before its API would fail to read a result.
project_1_bot_a8dd9262857d850eef8dca5206e61de5 commented 2026-10-19 15:07:35 +00:00 (Migrated from gitlab.core-project.space)

Screenshots

Before is production, after is this merge request's review app at 1e45efd.

Desktop

Page Before After
Home
Local game
Room

Mobile

Page Before After
Home
Local game
Room
<!-- chess-screenshots --> ### Screenshots Before is production, after is this merge request's review app at 1e45efd. #### Desktop | Page | Before | After | | --- | --- | --- | | Home | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/home-desktop.png" width="400"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/home-desktop.png" width="400"> | | Local game | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/local-desktop.png" width="400"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/local-desktop.png" width="400"> | | Room | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/room-desktop.png" width="400"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/room-desktop.png" width="400"> | #### Mobile | Page | Before | After | | --- | --- | --- | | Home | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/home-mobile.png" width="200"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/home-mobile.png" width="200"> | | Local game | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/local-mobile.png" width="200"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/local-mobile.png" width="200"> | | Room | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/before/room-mobile.png" width="200"> | <img src="https://gitlab.core-project.space/amaurycoudr/chess-project/-/jobs/2188/artifacts/raw/review-screenshots/after/room-mobile.png" width="200"> |
root commented 2026-10-19 15:18:07 +00:00 (Migrated from gitlab.core-project.space)

added 4 commits

  • 4b753127 - feat(front): open a move list on Black's half and let GameScreen show an empty board
  • 4e15ac8f - feat(front): solve Puzzles on GameScreen at /puzzles/train, with a move list
  • 9d6c0121 - fix(front): wrap the solving footer's help actions so Next stays in the rail
  • 5f64127a - Merge branch 'feat/450-puzzles-redesign' into feat/452-solving-on-gamescreen

Compare with previous version

added 4 commits <ul><li>4b753127 - feat(front): open a move list on Black&#39;s half and let GameScreen show an empty board</li><li>4e15ac8f - feat(front): solve Puzzles on GameScreen at /puzzles/train, with a move list</li><li>9d6c0121 - fix(front): wrap the solving footer&#39;s help actions so Next stays in the rail</li><li>5f64127a - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/452-solving-on-gamescreen</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=355&start_sha=b2fcc78b0af38e4d93d37e2b20fc205ced86b193)
root commented 2026-10-19 15:38:22 +00:00 (Migrated from gitlab.core-project.space)

added 1 commit

  • 77f9d177 - feat(front): open the Puzzles landing at /puzzles, with Theme families and recent Attempts

Compare with previous version

added 1 commit <ul><li>77f9d177 - feat(front): open the Puzzles landing at /puzzles, with Theme families and recent Attempts</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=358&start_sha=5f64127a7f5d405ab34426f051ec1509ad4ea53e)
root commented 2026-10-19 15:47:58 +00:00 (Migrated from gitlab.core-project.space)

added 4 commits

  • 720626fd - feat(api): reveal the Puzzle's own rating in the solved, failed and solution results
  • 2649e617 - feat(front): open a result dialog when a Puzzle is solved or failed on the board
  • 3c5d8b14 - test(e2e): assert the result dialog and its rating change on a solve, a failure and a Replay
  • c9649fe8 - Merge branch 'feat/450-puzzles-redesign' into feat/453-result-dialog

Compare with previous version

added 4 commits <ul><li>720626fd - feat(api): reveal the Puzzle&#39;s own rating in the solved, failed and solution results</li><li>2649e617 - feat(front): open a result dialog when a Puzzle is solved or failed on the board</li><li>3c5d8b14 - test(e2e): assert the result dialog and its rating change on a solve, a failure and a Replay</li><li>c9649fe8 - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/453-result-dialog</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=362&start_sha=77f9d177a95d024dbbde44bb7322667a02702c8d)
root commented 2026-10-19 16:06:43 +00:00 (Migrated from gitlab.core-project.space)

added 4 commits

  • 934fdc43 - feat(api): count each Theme's tried and solved Attempts in puzzle.progress
  • f0416b2f - feat(front): show Theme progress, family rates and Resume on the Puzzles landing
  • 42abe707 - Merge branch 'feat/450-puzzles-redesign' into feat/455-theme-progress
  • 1de664e7 - test(front): wait for the result dialog before leaving a solved Puzzle for the landing

Compare with previous version

added 4 commits <ul><li>934fdc43 - feat(api): count each Theme&#39;s tried and solved Attempts in puzzle.progress</li><li>f0416b2f - feat(front): show Theme progress, family rates and Resume on the Puzzles landing</li><li>42abe707 - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/455-theme-progress</li><li>1de664e7 - test(front): wait for the result dialog before leaving a solved Puzzle for the landing</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=365&start_sha=c9649fe8bbfc2df1ecc7bebba598260df7bc1a1b)
root commented 2026-10-19 16:11:12 +00:00 (Migrated from gitlab.core-project.space)

added 4 commits

  • 327a85c8 - feat(front): switch Theme from the solving screen's header
  • f88661bb - Merge branch 'feat/450-puzzles-redesign' into feat/456-theme-switcher
  • 607dd340 - test(front): review past the result dialog before switching Theme after a solve
  • c4465fd4 - Merge branch 'feat/450-puzzles-redesign' into feat/456-theme-switcher

Compare with previous version

added 4 commits <ul><li>327a85c8 - feat(front): switch Theme from the solving screen&#39;s header</li><li>f88661bb - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/456-theme-switcher</li><li>607dd340 - test(front): review past the result dialog before switching Theme after a solve</li><li>c4465fd4 - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/456-theme-switcher</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=367&start_sha=1de664e70b0cd2025b1c3ec648be9a3f0c1137ea)
root commented 2026-10-19 16:27:08 +00:00 (Migrated from gitlab.core-project.space)

added 2 commits

  • 1f1f9e7c - feat(front): split the home into a Puzzles half and a Play half
  • 6ecbdc1a - test(e2e): walk the home's Puzzles half to the landing, signed in and through sign-up

Compare with previous version

added 2 commits <ul><li>1f1f9e7c - feat(front): split the home into a Puzzles half and a Play half</li><li>6ecbdc1a - test(e2e): walk the home&#39;s Puzzles half to the landing, signed in and through sign-up</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=369&start_sha=c4465fd43905cc7cc4e55522ded6f7824f691a2a)
root commented 2026-10-19 18:46:26 +00:00 (Migrated from gitlab.core-project.space)

added 25 commits

  • 6ecbdc1a...9e6fc7df - 2 commits from branch main
  • 9e6fc7df...92782bfb - 13 earlier commits
  • aec8085e - test(front): wait for the result dialog before leaving a solved Puzzle for the landing
  • 00129623 - feat(front): switch Theme from the solving screen's header
  • 29225d4a - Merge branch 'feat/450-puzzles-redesign' into feat/456-theme-switcher
  • 12ce7266 - test(front): review past the result dialog before switching Theme after a solve
  • 1f85aafc - Merge branch 'feat/450-puzzles-redesign' into feat/456-theme-switcher
  • 7dfd4bfd - feat(front): split the home into a Puzzles half and a Play half
  • a5044b73 - test(e2e): walk the home's Puzzles half to the landing, signed in and through sign-up
  • 5df99d22 - test(front): wait for the Player's face before reading the home's Puzzles half
  • 12ee71b5 - test(front): know the home by its Puzzles heading on the dead ends' way home
  • 1e45efd1 - test(front): refuse a lost Session's stream once, so either call after it is answered

Compare with previous version

added 25 commits <ul><li>6ecbdc1a...9e6fc7df - 2 commits from branch <code>main</code></li><li>9e6fc7df...92782bfb - 13 earlier commits</li><li>aec8085e - test(front): wait for the result dialog before leaving a solved Puzzle for the landing</li><li>00129623 - feat(front): switch Theme from the solving screen&#39;s header</li><li>29225d4a - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/456-theme-switcher</li><li>12ce7266 - test(front): review past the result dialog before switching Theme after a solve</li><li>1f85aafc - Merge branch &#39;feat/450-puzzles-redesign&#39; into feat/456-theme-switcher</li><li>7dfd4bfd - feat(front): split the home into a Puzzles half and a Play half</li><li>a5044b73 - test(e2e): walk the home&#39;s Puzzles half to the landing, signed in and through sign-up</li><li>5df99d22 - test(front): wait for the Player&#39;s face before reading the home&#39;s Puzzles half</li><li>12ee71b5 - test(front): know the home by its Puzzles heading on the dead ends&#39; way home</li><li>1e45efd1 - test(front): refuse a lost Session&#39;s stream once, so either call after it is answered</li></ul> [Compare with previous version](/amaurycoudr/chess-project/-/merge_requests/57/diffs?diff_id=370&start_sha=6ecbdc1a3273aeac95e2e83df9b6187274c4b4c7)
root commented 2026-10-19 19:09:15 +00:00 (Migrated from gitlab.core-project.space)

marked this merge request as ready

marked this merge request as **ready**
root commented 2026-10-19 19:12:15 +00:00 (Migrated from gitlab.core-project.space)

changed the description

changed the description
root commented 2026-10-19 19:12:24 +00:00 (Migrated from gitlab.core-project.space)

marked this merge request as draft

marked this merge request as **draft**
root commented 2026-10-19 19:14:57 +00:00 (Migrated from gitlab.core-project.space)

marked this merge request as ready

marked this merge request as **ready**
root (Migrated from gitlab.core-project.space) merged commit into main 2026-10-19 19:15:00 +00:00
Sign in to join this conversation.
No description provided.