Complete Next.js migration with SSR and Docker deployment
Some checks failed
Build and Push Docker Images / Build Backend (FastAPI) (push) Successful in 1m26s
Build and Push Docker Images / Build Frontend (Next.js) (push) Failing after 1m48s
Build and Push Docker Images / Trigger Portainer Update (push) Has been skipped

- Migrate from vanilla JavaScript SPA to Next.js 16 with App Router
- Add server-side rendering for all pages (Home, Compare, Rankings)
- Create individual school pages with dynamic routing (/school/[urn])
- Implement Chart.js and Leaflet map integrations
- Add comprehensive SEO with sitemap, robots.txt, and JSON-LD
- Set up Docker multi-service architecture (PostgreSQL, FastAPI, Next.js)
- Update CI/CD pipeline to build both backend and frontend images
- Fix Dockerfile to include devDependencies for TypeScript compilation
- Add Jest testing configuration
- Implement performance optimizations (code splitting, caching)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Tudor
2026-02-02 20:34:35 +00:00
parent f4919db3b9
commit ff7f5487e6
72 changed files with 18636 additions and 20 deletions

View File

@@ -0,0 +1,91 @@
/**
* Footer Component
* Site footer with links and info
*/
import styles from './Footer.module.css';
export function Footer() {
const currentYear = new Date().getFullYear();
return (
<footer className={styles.footer}>
<div className={styles.container}>
<div className={styles.content}>
<div className={styles.section}>
<h3 className={styles.title}>SchoolCompare</h3>
<p className={styles.description}>
Compare primary school KS2 performance across England. Data sourced from UK Government
Compare School Performance.
</p>
</div>
<div className={styles.section}>
<h4 className={styles.sectionTitle}>About</h4>
<ul className={styles.links}>
<li>
<a
href="https://www.compare-school-performance.service.gov.uk/"
target="_blank"
rel="noopener noreferrer"
className={styles.link}
>
Data Source
</a>
</li>
<li>
<span className={styles.linkDisabled}>Privacy Policy</span>
</li>
<li>
<span className={styles.linkDisabled}>Terms of Use</span>
</li>
</ul>
</div>
<div className={styles.section}>
<h4 className={styles.sectionTitle}>Resources</h4>
<ul className={styles.links}>
<li>
<a
href="https://www.gov.uk/government/organisations/department-for-education"
target="_blank"
rel="noopener noreferrer"
className={styles.link}
>
Department for Education
</a>
</li>
<li>
<a
href="https://www.gov.uk/school-performance-tables"
target="_blank"
rel="noopener noreferrer"
className={styles.link}
>
School Performance Tables
</a>
</li>
</ul>
</div>
</div>
<div className={styles.bottom}>
<p className={styles.copyright}>
© {currentYear} SchoolCompare. Data © Crown copyright.
</p>
<p className={styles.disclaimer}>
This is an unofficial service. Official school performance data is available at{' '}
<a
href="https://www.compare-school-performance.service.gov.uk/"
target="_blank"
rel="noopener noreferrer"
className={styles.link}
>
compare-school-performance.service.gov.uk
</a>
</p>
</div>
</div>
</footer>
);
}