Open an Account's profile at /players/<username>: rows, show more, empty and not-found #390

Closed
opened 2026-10-11 16:27:51 +00:00 by root · 13 comments
root commented 2026-10-11 16:27:51 +00:00 (Migrated from gitlab.core-project.space)

Imported from GitHub amaurycoudr/chess-project#390, opened by @amaurycoudr on 2026-10-11 16:27 UTC.


Parent

#366

What to build

Anyone can open /players/<username> and see the Account's username, "Joined ", and its decided Games newest first. Each row shows when the Game ended, the Account's Color, the opponent (a username linked to their profile, or "Guest" as plain text), the result from the Account's side (won, lost, drawn) and how it ended, and opens the Game page. "Show more" loads older Games. An Account with no Games says so; an unknown username shows a not-found page; a username typed in another case opens the profile and corrects the address without a new history entry. The document title is the username. See #366, Front.

The view lives in the games vertical beside "My games" and renders the same game row, so the opponent link also appears in "My games". The route's loader primes the profile query and "show more" pages through an infinite query from the vertical's query options factory. Not-found reuses the Game page's pattern. Every new string is in the Paraglide catalogue in English and French (ADR 0025).

A new e2e spec walks the main story: a Player signs up and, seated against a Guest in a second browser context, plays a Game the Guest resigns; a third, signed-out context opens the profile by its address, reads the username, the join month and one row "won" by Resignation, then opens the row and reaches the Game page.

Seam: The front views (the profile view) and e2e

Acceptance criteria

  • The profile view shows the username as stored, the localized join month and year, and one row per Game with its end time, Color, opponent, result wording and ending, for each result and ending from either Color
  • An Account opponent is a link to their profile; a Guest opponent reads "Guest" with no link; a row with no opponent reads as such
  • A row opens its Game page
  • "Show more" appears only when there is a next page, and appends the older Games
  • An Account with no Games shows the empty state
  • An unknown username shows the not-found page
  • A username in another case shows the profile and replaces the address with the stored casing, adding no history entry
  • The document title is the username
  • "My games" rows link an Account opponent the same way
  • Every new string exists in English and French
  • The new e2e spec passes as described above
  • The gate is green, and e2e is green
> _Imported from GitHub [amaurycoudr/chess-project#390](https://github.com/amaurycoudr/chess-project/issues/390), opened by [@amaurycoudr](https://github.com/amaurycoudr) on 2026-10-11 16:27 UTC._ <!-- github-issue:390 --> --- ## Parent #366 ## What to build Anyone can open `/players/<username>` and see the **Account**'s username, "Joined <month year>", and its decided **Games** newest first. Each row shows when the **Game** ended, the **Account**'s **Color**, the opponent (a username linked to their profile, or "Guest" as plain text), the result from the **Account**'s side (won, lost, drawn) and how it ended, and opens the **Game** page. "Show more" loads older **Games**. An **Account** with no **Games** says so; an unknown username shows a not-found page; a username typed in another case opens the profile and corrects the address without a new history entry. The document title is the username. See #366, *Front*. The view lives in the games vertical beside "My games" and renders the same game row, so the opponent link also appears in "My games". The route's loader primes the profile query and "show more" pages through an infinite query from the vertical's query options factory. Not-found reuses the **Game** page's pattern. Every new string is in the Paraglide catalogue in English and French (ADR 0025). A new e2e spec walks the main story: a **Player** signs up and, seated against a **Guest** in a second browser context, plays a **Game** the **Guest** resigns; a third, signed-out context opens the profile by its address, reads the username, the join month and one row "won" by **Resignation**, then opens the row and reaches the **Game** page. Seam: The front views (the profile view) and e2e ## Acceptance criteria - [ ] The profile view shows the username as stored, the localized join month and year, and one row per **Game** with its end time, **Color**, opponent, result wording and ending, for each result and ending from either **Color** - [ ] An **Account** opponent is a link to their profile; a **Guest** opponent reads "Guest" with no link; a row with no opponent reads as such - [ ] A row opens its **Game** page - [ ] "Show more" appears only when there is a next page, and appends the older **Games** - [ ] An **Account** with no **Games** shows the empty state - [ ] An unknown username shows the not-found page - [ ] A username in another case shows the profile and replaces the address with the stored casing, adding no history entry - [ ] The document title is the username - [ ] "My games" rows link an **Account** opponent the same way - [ ] Every new string exists in English and French - [ ] The new e2e spec passes as described above - [ ] The gate is green, and e2e is green
root commented 2026-10-11 16:27:51 +00:00 (Migrated from gitlab.core-project.space)

GitHub issue relations, imported as "related" links (GitLab CE has no sub-issues or blocking links).

  • Parent (sub-issue of): #366
  • Blocked by: #389
  • Blocking: #391
> _GitHub issue relations, imported as "related" links (GitLab CE has no sub-issues or blocking links)._ <!-- github-relations --> - Parent (sub-issue of): #366 - Blocked by: #389 - Blocking: #391
root commented 2026-10-13 08:39:52 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #391

mentioned in issue #391
root commented 2026-10-13 08:41:23 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #366

mentioned in issue #366
root commented 2026-10-13 08:41:30 +00:00 (Migrated from gitlab.core-project.space)

mentioned in issue #389

mentioned in issue #389
root commented 2026-10-13 08:42:32 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #366

marked this issue as related to #366
root commented 2026-10-13 08:42:43 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #389

marked this issue as related to #389
root commented 2026-10-13 08:42:44 +00:00 (Migrated from gitlab.core-project.space)

marked this issue as related to #391

marked this issue as related to #391
root commented 2026-10-15 09:22:55 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 24dfeff71a

mentioned in commit 24dfeff71ade21f217a819a1f15c5b1bb8ebcbdb
root commented 2026-10-15 09:22:55 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 06d374b14e

mentioned in commit 06d374b14ed7ebd8da21a85b1cc6600ab67760d3
root commented 2026-10-15 09:22:56 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 83865b66ed

mentioned in commit 83865b66ed05ae715cda83dbec3c08cfbe28e45b
root commented 2026-10-15 09:22:56 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 4e2a203cd9

mentioned in commit 4e2a203cd9d77546a12140651cd2addd141b1ff7
root commented 2026-10-15 09:22:56 +00:00 (Migrated from gitlab.core-project.space)

mentioned in commit 0101533097

mentioned in commit 010153309756384f5b01723768536aa8343b0f26
root commented 2026-10-15 09:23:10 +00:00 (Migrated from gitlab.core-project.space)

mentioned in merge request !531

mentioned in merge request !531
root (Migrated from gitlab.core-project.space) closed this issue 2026-10-15 09:44:36 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
amaurycoudr/chess-project#390
No description provided.