feat(admissions): reference SchoolCompare tools at each stage of the journey
Build and Push Docker Images / Build Backend (FastAPI) (push) Successful in 12s
Build and Push Docker Images / Build Frontend (Next.js) (push) Successful in 47s
Build and Push Docker Images / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 12s
Build and Push Docker Images / Trigger Portainer Update (push) Successful in 1s

Add a per-step link on the primary and secondary admissions timelines
pointing to the relevant SchoolCompare tool (search, compare shortlist,
rankings) for that stage — from researching criteria through offer day
and appeals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tudor
2026-07-01 22:33:22 +01:00
co-authored by Claude Opus 4.8
parent 794c27f6b6
commit 58c5eb8ecc
2 changed files with 59 additions and 1 deletions
@@ -420,6 +420,28 @@
margin: 0; margin: 0;
} }
.stepTool {
display: inline-flex;
align-items: center;
gap: 0.35rem;
margin-top: 0.6rem;
font-size: 0.82rem;
font-weight: 600;
color: var(--accent-teal, #2d7d7d);
text-decoration: none;
transition: gap 0.2s ease, color 0.2s ease;
}
.stepTool:hover {
color: var(--accent-coral-dark, #c45a3f);
gap: 0.6rem;
}
.stepToolArrow {
font-size: 0.9em;
line-height: 1;
}
/* ─── Tips ───────────────────────────────────────────── */ /* ─── Tips ───────────────────────────────────────────── */
.tips { .tips {
+37 -1
View File
@@ -54,38 +54,46 @@ interface Step {
title: string; title: string;
body: string; body: string;
highlight?: 'deadline' | 'offer'; highlight?: 'deadline' | 'offer';
/* How SchoolCompare helps at this stage of the journey */
tool?: { label: string; href: string };
} }
const SECONDARY_STEPS: Step[] = [ const SECONDARY_STEPS: Step[] = [
{ {
title: 'Check entry criteria', title: 'Check entry criteria',
body: 'Look at each school\'s admissions policy — catchment areas, faith criteria, sibling priority, and aptitude tests vary widely. Use school detail pages on SchoolCompare for admissions history.', body: 'Look at each school\'s admissions policy — catchment areas, faith criteria, sibling priority, and aptitude tests vary widely.',
tool: { label: 'Find schools & view their admissions history', href: '/' },
}, },
{ {
date: 'September', date: 'September',
title: 'Portal opens', title: 'Portal opens',
body: 'Your local council opens its online admissions portal. Register early to avoid last-minute technical issues. You apply through your home council even if you prefer schools in neighbouring boroughs.', body: 'Your local council opens its online admissions portal. Register early to avoid last-minute technical issues. You apply through your home council even if you prefer schools in neighbouring boroughs.',
tool: { label: 'Build and compare your shortlist', href: '/compare' },
}, },
{ {
date: '31 October', date: '31 October',
title: 'Application deadline', title: 'Application deadline',
body: 'Submit your ranked list of up to six schools. Councils treat all preferences equally — list schools in the genuine order you want them, not strategically.', body: 'Submit your ranked list of up to six schools. Councils treat all preferences equally — list schools in the genuine order you want them, not strategically.',
highlight: 'deadline', highlight: 'deadline',
tool: { label: 'Compare performance to order your preferences', href: '/rankings' },
}, },
{ {
date: '1 March', date: '1 March',
title: 'National Offer Day', title: 'National Offer Day',
body: 'Results are published online, usually from 12:01 am. You\'ll receive an email or letter with your allocated school.', body: 'Results are published online, usually from 12:01 am. You\'ll receive an email or letter with your allocated school.',
highlight: 'offer', highlight: 'offer',
tool: { label: 'Look up your allocated school', href: '/' },
}, },
{ {
date: '~15 March', date: '~15 March',
title: 'Accept or decline', title: 'Accept or decline',
body: 'Respond by the deadline your council gives — typically around 15 March. Accepting does not prevent you from keeping a place on a waiting list for a preferred school.', body: 'Respond by the deadline your council gives — typically around 15 March. Accepting does not prevent you from keeping a place on a waiting list for a preferred school.',
tool: { label: 'Weigh your offer against your other choices', href: '/compare' },
}, },
{ {
title: 'Appeals', title: 'Appeals',
body: 'If unsuccessful, you can appeal within 20 school days of the refusal letter. Secondary appeals consider whether prejudice to the school outweighs your case — success rates vary.', body: 'If unsuccessful, you can appeal within 20 school days of the refusal letter. Secondary appeals consider whether prejudice to the school outweighs your case — success rates vary.',
tool: { label: 'Gather performance evidence for your case', href: '/rankings' },
}, },
]; ];
@@ -93,32 +101,38 @@ const PRIMARY_STEPS: Step[] = [
{ {
title: 'Research entry criteria', title: 'Research entry criteria',
body: 'Faith schools, language units, and distance-based catchments differ by school. Start by reading each school\'s admissions policy on their website or the council\'s website.', body: 'Faith schools, language units, and distance-based catchments differ by school. Start by reading each school\'s admissions policy on their website or the council\'s website.',
tool: { label: 'Find schools & view their admissions history', href: '/' },
}, },
{ {
date: 'September', date: 'September',
title: 'Portal opens', title: 'Portal opens',
body: 'Apply through your home council\'s portal, even if your preferred school is in another borough. Most councils accept applications from September.', body: 'Apply through your home council\'s portal, even if your preferred school is in another borough. Most councils accept applications from September.',
tool: { label: 'Build and compare your shortlist', href: '/compare' },
}, },
{ {
date: '15 January', date: '15 January',
title: 'Application deadline', title: 'Application deadline',
body: 'List up to 36 schools (the number varies by council) in genuine preference order. The equal preference rule means all preferences are considered before any offers are made.', body: 'List up to 36 schools (the number varies by council) in genuine preference order. The equal preference rule means all preferences are considered before any offers are made.',
highlight: 'deadline', highlight: 'deadline',
tool: { label: 'Compare performance to order your preferences', href: '/rankings' },
}, },
{ {
date: '16 April', date: '16 April',
title: 'National Offer Day', title: 'National Offer Day',
body: 'Results are published online. Reception offers are sent on 16 April (or the next working day if that falls on a weekend or bank holiday).', body: 'Results are published online. Reception offers are sent on 16 April (or the next working day if that falls on a weekend or bank holiday).',
highlight: 'offer', highlight: 'offer',
tool: { label: 'Look up your allocated school', href: '/' },
}, },
{ {
date: '~1 May', date: '~1 May',
title: 'Accept or decline', title: 'Accept or decline',
body: 'Respond by your council\'s deadline, typically around 1 May. Accepting secures the place while you wait to see if a preferred school\'s waiting list moves.', body: 'Respond by your council\'s deadline, typically around 1 May. Accepting secures the place while you wait to see if a preferred school\'s waiting list moves.',
tool: { label: 'Weigh your offer against your other choices', href: '/compare' },
}, },
{ {
title: 'Appeals', title: 'Appeals',
body: 'Infant class-size appeals (Reception to Year 2) have a very narrow legal test and a low success rate. For Year 3+, appeals follow the same process as secondary.', body: 'Infant class-size appeals (Reception to Year 2) have a very narrow legal test and a low success rate. For Year 3+, appeals follow the same process as secondary.',
tool: { label: 'Gather performance evidence for your case', href: '/rankings' },
}, },
]; ];
@@ -293,6 +307,17 @@ export function AdmissionsView() {
{step.date && <div className={styles.stepDate}>{step.date}</div>} {step.date && <div className={styles.stepDate}>{step.date}</div>}
<div className={styles.stepTitle}>{step.title}</div> <div className={styles.stepTitle}>{step.title}</div>
<p className={styles.stepBody}>{step.body}</p> <p className={styles.stepBody}>{step.body}</p>
{step.tool && (
<a
href={step.tool.href}
className={styles.stepTool}
data-umami-event="admissions_tool_clicked"
data-umami-event-target={step.tool.href}
>
{step.tool.label}
<span className={styles.stepToolArrow} aria-hidden="true"></span>
</a>
)}
</div> </div>
</li> </li>
))} ))}
@@ -330,6 +355,17 @@ export function AdmissionsView() {
{step.date && <div className={styles.stepDate}>{step.date}</div>} {step.date && <div className={styles.stepDate}>{step.date}</div>}
<div className={styles.stepTitle}>{step.title}</div> <div className={styles.stepTitle}>{step.title}</div>
<p className={styles.stepBody}>{step.body}</p> <p className={styles.stepBody}>{step.body}</p>
{step.tool && (
<a
href={step.tool.href}
className={styles.stepTool}
data-umami-event="admissions_tool_clicked"
data-umami-event-target={step.tool.href}
>
{step.tool.label}
<span className={styles.stepToolArrow} aria-hidden="true"></span>
</a>
)}
</div> </div>
</li> </li>
))} ))}