Internal progress tracker for the Stage 0 demonstrator. Figures are calculated from requirement statuses.

Stage 0, overall

49%

The mean of 16 components, each calculated from the 38 requirements that count towards Stage 0.

Since the first snapshot

Baseline set 2026-11-02

Foundations 3 components · 88%

Accessibility and performance

100%

Customer asks · §8 Non-functional

Accessibility: meets WCAG 2.2 AA, with an accessibility statement; interactive tools (quiz, scene, cards) must work with keyboard and screen readers and offer a non-visual alternative. Performance and devices: mobile-first design (students will mostly use phones); fast load times on average connections; supports current versions of major browsers.

Remaining work

  • Re-run the audit suite over every new page
  • Write the accessibility statement page

Calculated from 1 requirement

  • R32 Done Mobile-first, accessible, fast §8 Accessibility 100 on all 15 audited routes with performance 97 to 100, plus eight bespoke audit scripts. Greyscale checks prove no state relies on colour alone. The accessibility statement page is the piece still missing. .lighthouse/result.json, scripts/contrast.mjs, scripts/overflow.mjs

Content model and data layer

75%

Customer asks · §3 Cross-sector requirements

Every career and course page carries tags from the green skills taxonomy (see section 5). Content is held in a CMS so Faculty staff can update it without a developer.

Remaining work

  • Add sector, resource, taxonomyTag and caseStudy collections
  • Extend the validator for each
  • Add sectorId to all roles

Calculated from 2 requirements

  • R30 Done Content held so staff can update it without a developer §3, §8 Eighteen typed collections behind one accessor layer, every file stating its source and the date a human last checked it, referential integrity enforced by the validator, and the schema rendered on screen with a real record. Sector is now among them. Resource, taxonomyTag and caseStudy are the three still to add. src/lib/content.js, scripts/validate-data.mjs, src/data/sectors.json
  • R26 Part done The taxonomy as the single tagging system §5 One tag vocabulary exists and is enforced in both directions, but it is a preference vocabulary written for a 16-year-old rather than a skills taxonomy: there is no core, technical and transferable structure, and courses carry a strand rather than tags. src/data/tags.json, scripts/validate-data.mjs

Site structure and navigation

90%

Customer asks · §9 Site structure

The site is organised around three entry points: sectors, audiences and the Faculty. Visitors can start from a sector, an audience or the Faculty, and the tools connect all three.

Remaining work

  • Create the missing routes; header and footer carry the real structure

Calculated from 1 requirement

  • R1 Part done Site structure: three entry points, all page groups §9 The home page is a navigation portal and nothing more: a title, one search box, five “Explore for:” routes keyed to who the reader is, and the two under them, into the work itself at /sectors and into who teaches it at /providers. Every option opens its own page; nothing on / filters in place. The header carries four real destinations on every route (Courses, Explore work, Where to train and About the data), so the structure is navigable from anywhere rather than only from the front door. Every page group from the site map exists and builds, and the validator opens the page behind every nav link and every home-page link, so the structure cannot quietly start pointing at nothing. What is left is the footer, which still carries only the two tools and the provenance trigger; that is a change to a shared component on signed-off routes and has not been asked for. src/pages/index.astro, src/data/home.json, src/components/SiteHeader.astro, src/pages/about.astro

Content pages 6 components · 43%

Careers directory

50%

Customer asks · §3 Sector pages, item 3

A directory of green careers: role title, what the job involves, typical entry routes, skills needed, and sourced salary and demand data with an as-of date.

Remaining work

  • Name the salary source with an as-of date
  • Add a demand or vacancy figure with its source
  • Named entry routes: GCSE, T Level, apprenticeship, A level

Calculated from 1 requirement

  • R7 Part done Careers directory with sourced salary and demand data §3 All 14 roles carry and render a pay range. There is no demand or vacancy figure anywhere in the data, and the pay figures carry no named publication or as-of date on the page. The home page shows no pay figure at all for that reason: a number whose publisher and date the record cannot state is a number nobody can check, and /about says so in as many words. src/pages/role/[id].astro:276-284

Home page

100%

Customer asks · §9 Phasing

Phase 1, content site: home page, six sector pages, three landing pages with the student guidance tools, resource pages, taxonomy, partner profiles and CMS.

Nothing outstanding on this component.

Calculated from 1 requirement

  • R2 Done Home page §9 Rebuilt on 2 November, twice. What it offers is Jamie's: a title, one search box that submits to /courses, and links to pages, with no stats line, no chips, no cards full of records, no switcher and no “Being built” tags, because everything a reader might want to know belongs on the page the link opens, where it is kept true once. How it looks is the site's own language, lifted from /start rather than invented: the wide wrap, the lockup, three illustrated cards for the three audiences who arrive not knowing what the site is, two lime bands under them for the two who do, and the footer's tile row at the foot for the two routes that are not about who you are at all. Which link takes which shape is a judgement about emphasis and Jamie's to make: he swapped the bands and the tiles on 2 November, and the hero was centred and the search control widened to 720px in the same pass. The card scenes are drawn in src/components/PortalArt.astro, which belongs to this page alone. The links are data (src/data/home.json) in three shapes, each allowed only the keys it draws with, so the portal cannot start describing the pages it points at; validate-data.mjs checks that too, and that every route has a page behind it. The page this hub replaced moved to /start unchanged and is the young person's door. src/pages/index.astro, src/data/home.json, src/pages/start.astro

Sector pages

60%

Customer asks · §3 Sector pathways

The portal needs one page for each of six sectors, all built from the same template so visitors can compare them easily. A pathway graphic showing routes from entry level to professional level (for example short courses, T Levels, apprenticeships, FE, degrees and degree apprenticeships), with each step linking to the partner course that offers it.

Remaining work

  • Retrofit to Clean energy related-sector link

Calculated from 5 requirements

  • R3 Part done Sector page template, seven sections §3 The seven-section sector template is built and all six sectors render on it. Six of the seven sections are real, drawn from what the roles already carry; section five, real stories, has nothing behind it and says so rather than drawing an empty frame. src/pages/sectors/[id].astro
  • R4 Part done Retrofit sector populated §3 The content is written and is the strongest in the repo, but it sits on four role pages rather than on a sector page. src/data/roles.json
  • R5 Part done The other five sectors, on the same template §3 All five other sectors exist on the same template as Retrofit, each marked as sample content. Their roles are researched; the paragraph about why each matters to the county is not written yet. src/data/sectors.json
  • R6 Done Pathway graphic, each step linking to a course §3 Four pathways holding 19 steps, five of them at a level with no provision and labelled as gaps. Built per role rather than per sector, which is finer-grained than asked for. src/components/PathwayLadder.astro, src/pages/pathway/[id].astro
  • R8 Part done Related sectors and transferable skills §3 Transferable skills render on all 14 roles, and every sector now names its related sectors and says why, enforced by the validator. The cross-link exists in both directions. What is missing is the same thing on the role page, which still has no route to a neighbouring sector. src/data/sectors.json, src/pages/sectors/[id].astro

Faculty ecosystem and partner profiles

50%

Customer asks · §6 Faculty profile pages

Each of the seven Faculty partners gets a profile page that shows what it offers and how it connects with the others, so visitors see one ecosystem rather than seven separate institutions. A landing page showing all seven partners and a partner-by-sector grid, with each cell linking to the relevant courses.

Remaining work

  • Provider-by-sector grid, reusing the /map component

Calculated from 3 requirements

  • R27 Part done Ecosystem landing page and partner-by-sector grid §6 The provider list is built and every one of the 32 organisations has a profile page. The partner-by-sector grid itself is not built yet; /map still holds the roles-by-levels grid the component came from. The hub routes to it: "Where to train" on the front door and in the header both land on /providers, so the seven partners are reachable from the first screen even though the grid is not built. src/pages/providers.astro, src/pages/partner/[id].astro
  • R28 Part done Partner profile template, eight sections §6 The eight-section profile template is built and renders for all 32 providers, not just the seven Faculty members, because ingestion keys on provider and every provider it can pull from needs somewhere for those courses to land. Facilities, specialisms and who it is for are the sections still waiting on Faculty input. src/pages/partner/[id].astro
  • R29 Part done Progression links between partners §6 Progression between partners is now stated rather than implicit: each profile finds the courses a level above where that provider's own catalogue stops, for the same roles, and names who teaches them. Derived, so it cannot go stale. src/pages/partner/[id].astro

Green skills taxonomy

0%

Customer asks · §5 Green skills taxonomy

Explain green skills in clear language, and group them in a simple structure that the Faculty agrees (for example core, technical and transferable skills). Make the taxonomy the single tagging system for careers, courses and resources, so that visitors can follow a skill from a job to the courses that teach it.

Remaining work

  • Explainer, core/technical/transferable grouping, glossary
  • Marked as draft pending the Faculty's decision

Calculated from 1 requirement

  • R25 Not started Taxonomy page: explainer, structure, glossary, per-audience summary §5 There is no taxonomy page. Every role carries a taxonomy reference and the role page prints the alignment claim, which is the claim with nothing behind it yet. src/pages/role/[id].astro:292-294

Resource library

0%

Customer asks · §5 Resource pages

Four resource pages give each audience a curated, searchable library. Visitors can search and filter by sector, type, audience and date, and sort newest first.

Remaining work

  • One shared search, filter and sort component
  • 10–15 real items from the PDFs already in docs/
  • Policy, teachers and advisers, jobs, and events pages

Calculated from 5 requirements

  • R20 Not started Resource library: search, filter, sort, item fields §5 No resource entity, no component and no items.
  • R21 Not started Policy and evidence page §5 Not started. The source material is already in the repo: the strategy, the skills map, the retrofit pathway maps and four conference documents. docs/green-skills-strategy.pdf
  • R22 Not started Teachers and advisers page, with lesson plan fields §5 Not started. The adviser page is a signpost to one tool, not a resource library. src/pages/advisers.astro
  • R23 Not started Jobs and upskilling page §5 Not started.
  • R24 Not started Events page §5 Not started.

Audience journeys 2 components · 30%

Student journey and tools

43%

Customer asks · §4.1 and §10 acceptance

A short quiz (indoors or outdoors, hands-on or digital, team or solo, interests and favourite subjects) that returns matched careers and says why each matched. A student can reach a shortlist of matched careers, with reasons, in under five minutes and without creating an account.

Remaining work

  • Show the match reasons on the quiz result
  • Shortlist of three and a student landing page
  • Parents and carers section; school subjects in search

Calculated from 7 requirements

  • R10 Not started Student landing page on the common structure §4.1 The student page was folded into /explore, which is a search surface: no benefit blocks, no proof, no next steps, no FAQs. src/pages/explore.astro
  • R11 Part done Student direct-choice route by level §4.1 Sector to career works, and career to routes-in by level works with a next step on each rung. The named routes the requirement asks for — GCSE, T Level, apprenticeship, A level — are not in the data; the ladder is RQF levels 2 to 7. src/components/Ladder.astro
  • R12 Part done Guided quiz returning matched careers with reasons §4.1 Three questions, scored matching, three results and one named course with cost, start date, campus, bus route and phone. The reasons are computed and then not shown: the result card renders only title, pay and the day-one scene. src/islands/SitBeside.jsx:303-325
  • R13 Part done Favourite subjects to careers §4.1 The mechanism maps a typed term to tags and roles and works. Of the obvious school subjects only maths is in the file. src/data/synonyms.json
  • R14 Part done Shortlist, compare three, share without login §4.1 Sharing is built and goes further than asked: a card is rendered off-screen and handed to the device share sheet as an image, so no personal data is collected. The shortlist and the side-by-side compare of three do not exist. src/components/SaveCard.astro, src/islands/SitBeside.jsx
  • R15 Done Explorable scene or swipe cards §4.1 Over-delivered against a target of concept only: a drawn county map with a Gloucester inset, eight training points over 13 campuses and 14 illustrative project pins. src/pages/area.astro
  • R16 Not started Parents and carers section, and a link to a careers adviser §4.1 No parent or carer content anywhere. The adviser page is written for professionals and is not linked from any student-facing surface.

Upskiller and business pages

17%

Customer asks · §4.2 and §4.3

Tool: a “skills gap check” where a visitor selects their current trade or role and a target area, and sees the gap and the shortest route to close it (for example from electrician to heat pump or solar installer). Tool: a “training needs finder” where a business states its sector, team size and goals, and receives suggested courses, apprenticeships and partners.

Remaining work

  • Upskiller page with the Electrician to Heat Pump Installer gap check
  • One business page with a scripted training needs finder

Calculated from 3 requirements

  • R17 Not started Upskiller landing page and skills gap check §4.2 Upskillers is the one audience the requirements name that has no persona. There is no electrician role and no skills-delta model, so the electrician to heat pump script has nothing behind it yet. src/data/personas.json
  • R18 Part done Business landing page and training needs finder §4.3 Two thin business-facing pages exist, each a heading, persona copy and two signpost panels. There is no training needs finder. src/pages/smes.astro, src/pages/employers.astro
  • R19 Not started Request-a-conversation enquiry form §4.3 There is no form element in the repo. Enquiry today means the provider's own phone number and contact page.

Course data 3 components · 58%

Course data and ingestion

74%

Customer asks · §7.1 Course data

Bring course data from the Faculty partners and other local providers into a single database. Support both manual upload and live queries of a provider’s own system, chosen per provider; where a live source is down, show the last good data with its date.

Remaining work

  • Crawler and AI extractor across all providers, with change detection

Calculated from 5 requirements

  • R9 Done Filter by sector, level, provider, location, mode and funding §3 The course finder filters on all six axes §3 names — sector, level, provider, location, mode and funding — with every facet value derived from the data rather than typed, so an ingested course joins the finder by existing. Within an axis the choices are OR, across axes AND. An option that would leave nothing is disabled rather than hidden, because 'there is none of that here' is an answer about the county worth being able to see. A seventh way to narrow the list arrives from the home page: the one search box on / is a plain GET form to /courses, and the finder reads q out of the query string so it opens with the words in its own box and the list already cut down. The six axes still work alongside it and their counts are computed against what the words leave. The finder also accepts provider= for links from a partner profile, and ignores a provider id no course belongs to rather than filtering the page down to nothing. src/pages/courses.astro, src/islands/CourseFinder.jsx, src/lib/search.js, src/pages/index.astro
  • R38 Part done Course data brought into a single database §7.1 The ingestion layer is built: six adapters on one interface, a runner that dedupes, diffs field by field against live data and writes an inbox, and an approval step that runs the validator before writing. Verified end to end with no keys present. The NCS adapter reads the real published workbook — 102,861 rows, 422 of them at providers we hold. What is left is running it with keys and approving a first batch. scripts/ingest/run.mjs, scripts/ingest/ncs.mjs
  • R39 Part done Course finder running on the ingested data §10 The finder runs over whatever is in the course collection, so an approved ingested course appears in it with its source and the date a person accepted it. It is live data the moment ingestion has been run with keys. src/pages/courses.astro
  • R44 Done Course last-updated date shown §10, §11 Derived rather than typed, and it collapses to one date or widens to a range so the sentence stays true. Ingested courses carry their own provenance with the date a person approved them, shown on the course finder and the partner profile. /about now carries the same dates for every collection, not just courses, so "when was this last checked" is a page in the top nav rather than something to go looking for. src/components/SiteFooter.astro, src/islands/CourseFinder.jsx, src/pages/about.astro
  • R48 Part done National course data sources §7.1 The NCS adapter is built and reads the real monthly release, finding its own current file because the name carries its month. The DfE vacancies and Skills England adapters are built and waiting on keys. scripts/ingest/ncs.mjs, scripts/ingest/faa.mjs, scripts/ingest/occmaps.mjs

Review queue

50%

Customer asks · §7.1 and §11 Governance

Validate imports, report errors to an administrator, and keep a log of what changed and when. Each partner remains the owner of its data and signs a data-sharing agreement covering use, refresh frequency and withdrawal.

Nothing outstanding on this component.

Calculated from 1 requirement

  • R47 Part done Review queue for imported courses §7.1, §11 The review queue is built. /inbox lists pending items grouped by provider with source, confidence, a link to the page it came from and a field-level diff; `npm run approve` moves items into live data through the validator and keeps rejections with their reason. The nightly Action opens the pull request that is the queue itself. src/pages/inbox.astro, scripts/approve.mjs, .github/workflows/ingest.yml

Provider ‘tell us’ channel

50%

Customer asks · §7.1 (closest match; the channel itself is our addition)

Accept data in any format the provider can supply (for example spreadsheets, CSV, XML, JSON, feeds or an API); the developer defines the common data model and mapping.

Remaining work

  • Working version needs a server: Stage 1

Calculated from 1 requirement

  • R46 Part done Provider channel for telling us about new training §7.1 The mock channel is built on /providers: a provider pastes a course link and gets a confirmation. It is labelled a demonstration in words rather than small print and sends nothing, because a form that looked like it submitted and did not would leave a provider waiting to hear back. The working version needs a server. src/pages/providers.astro

Launch 2 components · 15%

Sharing and SEO previews

0%

Customer asks · §13 What the site must support

Shareable pages and tools, with clear page titles and preview images for social media and email.

Remaining work

  • Open Graph tags and one preview image per page group
  • Check the production link unfurls in Teams

Calculated from 1 requirement

  • R36 Not started Shareable pages with titles and preview images §8, §13 There are no Open Graph, Twitter, canonical or structured-data tags anywhere, so a link pasted into a chat renders as a bare URL. Every route is deliberately kept out of search until sign-off, which is right and does not conflict with adding preview tags. src/layouts/Base.astro:36-55

Deploy and governance pack

30%

Customer asks · §10 Priorities and acceptance

Budget, timeline and procurement route: to be confirmed by GCC. Bidders should price each phase separately, state their assumptions and include a contingency.

Remaining work

  • Deploy and check on a real phone
  • Sample-content labelling pass
  • Stage 1 proposal priced per phase, decisions list, data-sharing question

How this figure is set

This component has no requirement of its own, so the figure is set by hand in the data. It is the only typed percentage on the page.

How this page is calculated

Each component is the mean of its requirements' scores: done counts 100, part done 50, not started 0, and a requirement may carry its own percentage where half is not the honest number. The overall figure is the mean of the 16 component percentages. A requirement deferred to Stage 1 is excluded rather than scored as zero, so the figure measures the demonstrator and not the whole programme.

Of 48 requirements on record, 7 are done, 21 (1 outside Stage 0) are part done and 11 are not started. A further 9 are deferred to Stage 1. That leaves 38 counted towards the figures above: the deferred ones, and any marked as outside Stage 0, contribute to no bar. They are counted here rather than hidden, because work that was done is still work that was done.

Requirement wording
Green Skills Pathways Portal – Website Requirements (Jon Hickman, 28 Oct 2026), read against the codebase. Statuses and evidence paths were seeded from the gap review in STAGE-0-GAP-REVIEW.md §8, which was produced by reading each file rather than from notes.
Component quotes
Green Skills Pathways Portal – Website Requirements (Jon Hickman, 28 Oct 2026); STAGE-0-GAP-REVIEW.md
Last checked
2026-11-02 · last snapshot 2026-11-02