Skip to content

Insights 6b: lazy sections - rating + forecast, re-solve, pairs & teams, improvement, shelf picks, top row (admins only) - #278

Merged
JanMikes merged 10 commits into
mainfrom
insights/phase-6b
Oct 19, 2026
Merged

JanMikes merged 10 commits into
mainfrom
insights/phase-6b

Conversation

@JanMikes

Copy link
Copy Markdown
Member

Insights Phase 6b (docs/features/insights/implementation-plan.md §6.1, sections 9-11, 13, 15 + the top row): the Insights page's lazy sections. Behind INSIGHTS_PUBLIC; only admins see anything.

What changes

  • Lazy frames below the fold. Each has its own route and controller, and redirects to its section when opened alone. The page's rules apply to all of them:
    • 404 while the flag is off;
    • your own data only, with trials counting as membership;
    • the predictions setting and your time zone are respected;
    • the page's filters apply, with members-only values stripped.
  • The frames:
    • Rating + forecast: one frame, so the rating model loads once. It says "on today's ladder"; players opted out of rankings get no place. The path onto the ladder shows only within reach.
    • Re-solve radar.
    • Pairs & teams: never mixed into solo results; a hidden private teammate shows as "Hidden Puzzler".
    • Improvement curve + rating over time.
    • Try next from your shelf: 6c's estimate line.
  • Top row:
    • MSP rating tile: the stored rating plus the place on today's ladder. These ride on the context statement the page already runs, so the first response stays at 10 statements.
    • "Try next" / "MSP rating" cards: a small frame inside the findings grid.
  • Free players: one lock per section with real counts, and no members-only values in the HTML.
  • Phones:
    • The skill-map and pairs axis shows from md width up; each row's tag already says faster or slower.
    • The hidden labels of locked question chips no longer widen the page.
    • Checked in 6 locales from 320 to 1200 px, members and free.

No migration.

Budget (cache miss)

Part Member Free
First response 10 (unchanged) 10
Top row 14 10
Shelf picks 4 2
Rating + forecast 11 9
Re-solve / pairs / improvement 5 / 5 / 3 - / 5 / 2

Every frame takes about 25-80 ms per request.

Translations

209 new keys, in all 6 locales, with matching placeholders. Register as on the rest of Insights: Czech "vy", French "vous", German "du", Spanish "tú".

🤖 Generated with Claude Code

JanMikes and others added 10 commits October 19, 2026 08:58
…s & teams, improvement)

WIP: English only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ster and terms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…axis + chip fixes

- Shelf picks (ShelfPicks) as their own lazy part 'shelf' after the rating frame: likely window through 3c
  (_shelf_estimate.html.twig, for 6c to replace), share of solvers beaten; free = lock with the count; predictions off
  = note + setting
- Top row: the MSP rating tile reads the stored rating and its place on today's ladder from the context statement
  (one more column, GetPlayerRatingRanking::sqlRankOf() - the first response stays 10 statements); the 'Try next' and
  'MSP rating' finding cards are an eager frame in the findings grid sharing the rating and shelf cache entries
- 6a's skill-map axis was cut off on phones: the strips' axis shows from md up; the chip scroller is position:
  relative (the locked chips' visually-hidden labels widened the page on phones)
- 6 locales; tests, budgets and page.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s ShelfPicks

- each pick's time = insights/estimate/_line.html.twig (time, certainty bar, tier chip, the shared sheet), resolved
  for the picks with ResolvePersonalEstimates (members only, flag-gated); the row's picture and name are the links
- my own window partial removed; the note explains the ≈ line (6 locales)
- budgets: shelf picks ≤ 6 member (4 measured), top row ≤ 16 (14 measured)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… frame errors

- pending rows: 'N of 20 solvers · M more needed', the bar against 20 (solversNeeded is what is missing); test at 15
- rating over time: no place in the tooltip (the snapshot's rank follows another rule and not the opt-out); nothing for
  a private profile; test for opted out + private
- pair names in the best results' meta as plain text - escaped once; test with ' and &
- insights_frame_controller.js (eager): turbo:frame-missing (prevented - an expired session's sign-in page lands there)
  and turbo:fetch-request-error show 'Couldn't load this part' + 'Try again' (placeholder back, src anew), aria-busy and
  role=status cleared; works in the findings grid; 6 locales
- rating cache part keyed by the player's privacy and ranking opt-out too
- shelf frame budget at route level (7 statements incl. the estimate lines)
- rating strips: a visually hidden list with every bar's details

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JanMikes
JanMikes merged commit 9a727da into main Oct 19, 2026
13 checks passed
@JanMikes
JanMikes deleted the insights/phase-6b branch October 19, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant