fix(places): phase-grouped tables, plain-English measures, styled links #118

Merged
tudor merged 1 commits from fix/place-page-presentation into fix/place-title-brand-doubling 2026-08-21 20:53:21 +00:00
Owner

Three presentation faults you spotted on the place pages. All three were found by looking at a rendered page — every automated check passed on all of them.

Stacked on #117 (title fix).

a) Links were unstyled

They carried no class at all, so they rendered as default blue underlined browser links beside a site that styles table links as body colour with a brand hover. RankingsView sets .schoolLink { color: var(--text-primary); text-decoration: none } with --brand-strong on hover; the place tables now follow it, and running-copy links take the brand colour.

b) The heading was jargon — and I invented it

RWM expected appears nowhere else on the site. METRIC_DEFINITIONS already names the measure, surfaced at /api/metrics:

name: Reading, Writing & Maths Combined %
description: % meeting expected standard in reading, writing and maths

The heading now reads Reading, writing & maths, with the full definition in the tooltip. Secondary tables read Attainment 8.

c) The column was 30% empty, and that was structural

On /schools/brentwood, 8 of 27 rows were blank. An unphased place page listed both primaries and secondaries but showed a single primary-only measure, so every secondary row was empty.

Neither obvious fix works: picking the other measure just inverts which rows are blank, and putting both in one column mixes a percentage with a 0–90 score — two incomparable scales under one heading.

Each phase now gets its own table, with the measure that applies to it. A blank cell inside one now means the school genuinely has no published result, which is worth saying — so it says Not published rather than a bare dash.

Before After
One table, RWM expected, 30% blank Primary schools (19) — Reading, writing & maths
Secondary schools (8) — Attainment 8

Phased pages (/schools/brentwood/primary) still show a single table with no redundant heading.

Verification

Backend 100 · frontend 253 · tsc --noEmit clean · next build green · 84 e2e journeys. Five new component tests covering exactly the three faults, including one asserting the jargon heading cannot come back.

I also verified every CSS class the component references exists in the stylesheet — a missing CSS module class fails silently, which is how unstyled links shipped in the first place.

🤖 Generated with Claude Code

https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj

Three presentation faults you spotted on the place pages. All three were found by looking at a rendered page — every automated check passed on all of them. **Stacked on #117** (title fix). ## a) Links were unstyled They carried no class at all, so they rendered as default blue underlined browser links beside a site that styles table links as body colour with a brand hover. `RankingsView` sets `.schoolLink { color: var(--text-primary); text-decoration: none }` with `--brand-strong` on hover; the place tables now follow it, and running-copy links take the brand colour. ## b) The heading was jargon — and I invented it `RWM expected` appears nowhere else on the site. `METRIC_DEFINITIONS` already names the measure, surfaced at `/api/metrics`: > `name`: Reading, Writing & Maths Combined % > `description`: % meeting expected standard in reading, writing and maths The heading now reads **Reading, writing & maths**, with the full definition in the tooltip. Secondary tables read **Attainment 8**. ## c) The column was 30% empty, and that was structural On `/schools/brentwood`, **8 of 27 rows were blank**. An unphased place page listed both primaries and secondaries but showed a single primary-only measure, so every secondary row was empty. Neither obvious fix works: picking the other measure just inverts which rows are blank, and putting both in one column mixes a percentage with a 0–90 score — two incomparable scales under one heading. **Each phase now gets its own table**, with the measure that applies to it. A blank cell inside one now means the school genuinely has no published result, which is worth saying — so it says **Not published** rather than a bare dash. | Before | After | |---|---| | One table, `RWM expected`, 30% blank | **Primary schools** (19) — Reading, writing & maths | | | **Secondary schools** (8) — Attainment 8 | Phased pages (`/schools/brentwood/primary`) still show a single table with no redundant heading. ## Verification Backend 100 · frontend 253 · `tsc --noEmit` clean · `next build` green · 84 e2e journeys. Five new component tests covering exactly the three faults, including one asserting the jargon heading cannot come back. I also verified every CSS class the component references exists in the stylesheet — a missing CSS module class fails silently, which is how unstyled links shipped in the first place. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
tudor added 1 commit 2026-08-21 20:50:02 +00:00
Three presentation faults on the place pages, all found by looking at a
rendered page rather than at a test.

An unphased place page showed one primary-only measure for a list holding both
phases: 8 of 27 rows on /schools/brentwood were blank, because secondaries
have no reading-writing-maths score. Picking the other measure would only have
inverted which rows were empty, and putting both in one column would have
mixed a percentage with a 0-90 score. Each phase now gets its own table, so a
blank cell means the school genuinely has no published result — which is worth
saying, and now says "Not published" rather than a bare dash.

"RWM expected" was invented here. The site already names the measure in
METRIC_DEFINITIONS, surfaced at /api/metrics: "Reading, Writing & Maths
Combined %". The heading now reads "Reading, writing & maths" with the full
definition in the tooltip.

Links carried no class at all, so they rendered as default blue underlined
browser links beside a site that styles table links as body colour with a
brand hover. They now follow RankingsView's convention, and running-copy links
take the brand colour.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
tudor merged commit 0f1ca660cb into fix/place-title-brand-doubling 2026-08-21 20:53:21 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tudor/school_compare#118