tudor 4b54c25943
Stage (build -> staging -> E2E gate) / prepare (push) Successful in 1s
Stage (build -> staging -> E2E gate) / Build Backend (FastAPI) (push) Successful in 19s
Stage (build -> staging -> E2E gate) / Build Frontend (Next.js) (push) Successful in 1m24s
Stage (build -> staging -> E2E gate) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 13s
Stage (build -> staging -> E2E gate) / Deploy to Staging (push) Successful in 27s
Stage (build -> staging -> E2E gate) / E2E Journeys against Staging (push) Successful in 3m3s
Merge pull request 'test(e2e): scroll a long list, and wait out the popup crossfade' (#167) from fix/e2e-after-half-mile-default into main
Reviewed-on: #167
2026-10-01 21:22:34 +00:00
2026-01-06 19:05:22 +00:00
2026-04-07 16:17:56 +01:00
2026-01-07 16:20:49 +00:00

SchoolCompare

SchoolCompare compares schools across England: primary (KS2), secondary (KS4), all-through and post-16 provision, with coverage depending on the source dataset. It provides school search, postcode maps, comparisons, rankings, place pages, Ofsted information, admissions and destination measures. Editorial content lives in a Payload CMS blog.

Start here

Repository map

Path Responsibility
backend/ FastAPI routes, cached school data, read-only SQLAlchemy mappings, feature flags
nextjs-app/ Next.js App Router, React UI, Payload CMS, frontend tests
pipeline/plugins/extractors/ Custom Singer taps for GIAS, EES, Ofsted and other datasets
pipeline/transform/ dbt staging/intermediate models, marts, seeds and data tests
pipeline/dags/ Airflow extraction, transformation and publication workflows
pipeline/scripts/ Search indexing, code generation and operational diagnostics
e2e/ Playwright journeys against a running environment
.gitea/workflows/ PR checks, staging deployment and manual production promotion
scripts/ CI review tooling and historical data utilities; see the legacy inventory
docs/superpowers/, mockups/ Design history and prototypes, not application entry points

Runtime

The public site is Next.js, not the FastAPI root page. Browser /api/* requests pass through a Next.js route handler to FastAPI. Server-rendered pages call FastAPI directly using FASTAPI_URL, including its /api suffix.

PostgreSQL/PostGIS stores school data. Meltano/Singer extracts source data; dbt builds marts.*; FastAPI reads those tables. Typesense serves text search and autocomplete. Payload runs inside Next.js and owns a separate payload database schema and uploaded media.

There is no automatic CSV import or sample dataset on startup. A working school-data environment needs populated marts from the pipeline or an approved database snapshot. See development before choosing a setup.

Validation

cd nextjs-app
npm ci
npm run typecheck
npm test -- --runInBand

Backend checks, pipeline validation, runtime versions and E2E requirements are listed in DEVELOPMENT.md. No npm run lint script is currently defined.

Deployment

Work on a feature branch and open a PR. Merging to main builds images and deploys staging. Production promotion is a separate, human-triggered Gitea workflow. Use DEPLOY.md and the Portainer compose files as the operational references. The generic compose examples still reference :latest, which the current release workflow does not publish.

S
Description
No description provided
Readme
53 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 56.2%
Python 25.7%
CSS 13.2%
HTML 4.1%
JavaScript 0.6%
Other 0.2%