About school data
-
Making UK school performance data actually readable
+
Making England's school performance data actually readable
- School performance data in England is rich but fragmented. The Department for Education publishes
- Key Stage 2 SATs, GCSE attainment, Ofsted outcomes, progress scores, admissions figures and
- demographics — each in its own table, each with its own jargon.
+ School performance data in England is rich but fragmented. The Department for Education and Ofsted
+ publish Key Stage 2 SATs, GCSE attainment, inspection outcomes, progress scores, admissions figures
+ and demographics — each in its own table, each with its own jargon.
SchoolCompare brings it all into one place. Every school page shows performance against the national
average, explains what the numbers mean, and lets you shortlist schools side by side. Built for
parents, governors, journalists, and anyone who wants to understand a school without reading a
- 40-page inspection report.
+ full inspection report.
diff --git a/nextjs-app/components/HomeView.module.css b/nextjs-app/components/HomeView.module.css
index 81e6397..cbe4fc0 100644
--- a/nextjs-app/components/HomeView.module.css
+++ b/nextjs-app/components/HomeView.module.css
@@ -720,10 +720,13 @@
.miniRowHead {
display: flex;
justify-content: space-between;
- font-size: 0.48rem;
+ align-items: baseline;
+ gap: 0.2rem;
+ font-size: 0.44rem;
color: var(--text-muted, #6d685f);
text-transform: uppercase;
- letter-spacing: 0.04em;
+ letter-spacing: 0.01em;
+ white-space: nowrap;
}
.miniRowHead strong {
@@ -869,28 +872,77 @@
color: var(--text-primary, #1a1612);
}
-.ofstedBadge {
+.ofstedFramework {
align-self: flex-start;
- padding: 0.2rem 0.55rem;
+ padding: 0.15rem 0.5rem;
border-radius: 4px;
- background: rgba(45, 125, 125, 0.12);
- color: var(--accent-teal, #2d7d7d);
- font-size: 0.55rem;
+ background: rgba(90, 58, 110, 0.12);
+ color: #5a3a6e;
+ font-size: 0.5rem;
font-weight: 700;
letter-spacing: 0.05em;
+ text-transform: uppercase;
}
-.ofstedVerdict {
- font-family: var(--font-playfair), 'Playfair Display', serif;
- font-size: 1.05rem;
+.rcList {
+ display: flex;
+ flex-direction: column;
+ gap: 0.3rem;
+}
+
+.rcRow {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+}
+
+.rcArea {
+ font-size: 0.62rem;
+ color: var(--text-secondary, #4a453d);
+}
+
+.rcChip {
+ padding: 0.1rem 0.4rem;
+ border-radius: 3px;
+ font-size: 0.52rem;
font-weight: 700;
- line-height: 1.2;
- color: var(--text-primary, #1a1612);
+ letter-spacing: 0.03em;
+ white-space: nowrap;
+ flex-shrink: 0;
}
-.ofstedVerdict em {
+.rcChipGood {
+ background: rgba(45, 125, 125, 0.12);
color: var(--accent-teal, #2d7d7d);
- font-style: normal;
+}
+
+.rcChipNeutral {
+ background: var(--accent-gold-bg, rgba(180, 150, 40, 0.12));
+ color: var(--accent-gold-text, #7a6800);
+}
+
+/* Safeguarding is a separate binary met/not-met judgement, not a graded area,
+ so it sits below the five-point list behind a divider with its own chip. */
+.rcSafeguarding {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+ margin-top: 0.05rem;
+ padding-top: 0.35rem;
+ border-top: 1px dashed var(--border-color, #e5dfd5);
+}
+
+.rcSep {
+ color: var(--text-muted, #8a847a);
+ font-style: italic;
+}
+
+.rcChipMet {
+ background: transparent;
+ color: var(--accent-teal, #2d7d7d);
+ border: 1px solid rgba(45, 125, 125, 0.4);
}
.ofstedMeta {
diff --git a/nextjs-app/components/HomeView.tsx b/nextjs-app/components/HomeView.tsx
index 945770b..4662a26 100644
--- a/nextjs-app/components/HomeView.tsx
+++ b/nextjs-app/components/HomeView.tsx
@@ -261,7 +261,7 @@ export function HomeView({ initialSchools, filters, totalSchools, howItWorks, ed
- Updated with 2026/2027 admissions results
+ Updated for the 2026/27 admissions round
Every school in England, compared.
diff --git a/nextjs-app/components/HowItWorksSection.tsx b/nextjs-app/components/HowItWorksSection.tsx
index ae22fc2..75a3783 100644
--- a/nextjs-app/components/HowItWorksSection.tsx
+++ b/nextjs-app/components/HowItWorksSection.tsx
@@ -5,15 +5,26 @@
import styles from './HomeView.module.css';
export function HowItWorksSection() {
+ // "exc" is the school's above-expected result. DfE names this differently
+ // by subject: "higher standard" for the reading and maths tests, "greater
+ // depth" for teacher-assessed writing. "nat" is the national expected %.
const miniCascade = [
- { subj: 'Reading', exp: 96, exc: 73, nat: 75 },
- { subj: 'Writing', exp: 81, exc: 15, nat: 72 },
- { subj: 'Maths', exp: 85, exc: 47, nat: 74 },
+ { subj: 'Reading', exp: 96, exc: 44, nat: 75, excLabel: 'Higher std' },
+ { subj: 'Writing', exp: 81, exc: 26, nat: 72, excLabel: 'Greater depth' },
+ { subj: 'Maths', exp: 85, exc: 41, nat: 74, excLabel: 'Higher std' },
];
const compareRows = [
{ label: 'Reading, Writing & Maths', a: '70%', b: '64%', aHi: true },
+ { label: 'Higher standard (RWM)', a: '13%', b: '6%', aHi: true },
{ label: 'Ofsted', a: 'Outstanding', b: 'Good', aHi: true },
- { label: 'Reading progress', a: '+2.1', b: '+0.4', aHi: true },
+ ];
+ // Report card (Ofsted's framework from Nov 2025): one rating per area of
+ // school life on a five-point scale. Safeguarding is judged separately, as a
+ // binary met/not-met outcome — kept out of this list and shown on its own.
+ const reportCard: Array<{ area: string; grade: string; good: boolean }> = [
+ { area: 'Achievement', grade: 'Strong', good: true },
+ { area: 'Curriculum & teaching', grade: 'Expected standard', good: false },
+ { area: 'Attendance & behaviour', grade: 'Strong', good: true },
];
return (
@@ -29,7 +40,7 @@ export function HowItWorksSection() {
Primary · Year 6 · Key Stage 2 SATs
- {miniCascade.map(({ subj, exp, exc, nat }) => (
+ {miniCascade.map(({ subj, exp, exc, nat, excLabel }) => (
{subj}
Expected{exp}%
@@ -37,7 +48,7 @@ export function HowItWorksSection() {
{nat}%
-
Exceeding{exc}%
+
{excLabel}{exc}%
@@ -49,15 +60,15 @@ export function HowItWorksSection() {
Secondary · Year 11 · GCSE Attainment 8
-
This schoolNational avg 50.2
+
This schoolNational avg 45.9
-
62.4
-
+12.2 vs national
+
54.8
+
+8.9 vs national
@@ -77,15 +88,26 @@ export function HowItWorksSection() {
Latest Ofsted inspection
- OUTSTANDING
-
Rated Outstanding at last inspection.
- Full inspection · March 2024
+ Report card · five-point scale
+
+ {reportCard.map(({ area, grade, good }) => (
+
+ {area}
+ {grade}
+
+ ))}
+
+
+ Safeguarding · separate check
+ Met
+
+ Full inspection · March 2026
Judgement
Ofsted at a glance
-
Current grade, inspection date, and a plain-English headline — without opening a 40-page report.
+
Since November 2025, Ofsted rates each area of school life on a five-point scale rather than one overall word. We show every area and the inspection date — and, for schools not yet reinspected, the older overall grade they still carry.