01Finding a programme
20 ways
- All 37 programmes sit in one filterable list instead of behind nested menus.
- The list filters by free text, by faculty and by NQF level at the same time.
- Every filter state is a shareable URL, so a counsellor can send a student one link.
- Seven faculty hubs group the programmes the way the college is actually organised.
- Each programme card states its level, its credential and its duration before you click.
- The programme list says how many results are showing, so an empty filter is never silent.
- An empty result offers a way out rather than a blank page.
- Site search covers every page, not just programmes.
- Search is reachable from any page with one key press.
- Search ranks a title match above a description match, so the fees page wins on “fees”.
- Search falls back to a full results page when the palette has nothing.
- A dedicated search page exists for linking, sharing and readers without JavaScript.
- The mega menu shows a one-line summary under every link, so the label is never the only clue.
- The menu separates Report 191 from occupational qualifications, which the old site conflated.
- A site map lists every page in one place.
- Breadcrumbs on every inner page state where you are in the structure.
- Related programmes are linked from each programme page.
- The what-to-study page answers the question a school leaver actually asks first.
- Each faculty page lists its programmes with the same card as the main list.
- Programme pages carry the entry requirement in the same place every time.
02Reading it on a phone
12 ways
- The layout is built mobile first and tested at 320, 390, 768, 1024 and 1440 pixels.
- No page scrolls horizontally at any of those widths.
- Every image ships an 800-pixel variant, so a phone is never sent desktop bytes.
- Every image carries its intrinsic width and height, so nothing shifts as it loads.
- Images are cropped, never stretched — no picture on the site is squashed.
- Only the one image at the top of a page loads eagerly; the rest wait.
- Touch targets are raised to 44 pixels on coarse pointers, where a finger is the pointer.
- The navigation drawer shows the whole site at once instead of an accordion.
- Long control labels shrink rather than wrap or overflow.
- Tables scroll inside their own box rather than widening the page.
- Type sizes are fluid, so nothing needs a separate mobile stylesheet.
- The apply action is reachable from the drawer on every screen size.
03Being readable
18 ways
- Every text and field pairing is checked against WCAG AAA in both themes at build time.
- The check reads the real token values, so it cannot drift from what ships.
- Fixed-polarity colours are asserted identical in both themes, so no state inverts.
- The focus indicator is two concentric rings of opposite polarity, so one always clears 3:1.
- Control borders are checked against 3:1 on every field they can land on.
- A link stays readable through its hover, including when the accent fills the box.
- Headings never skip a level, on any of the 67 pages.
- Every page has exactly one h1.
- Every image has alt text, or is explicitly marked decorative.
- Every form control has a programmatic name.
- Every ARIA reference resolves to an element that exists.
- No element carries a positive tabindex.
- Landmarks are present on every page, so a screen reader can skip the chrome.
- A skip link is the first thing in the tab order.
- Motion honours prefers-reduced-motion, including the scroll-spy and the reveal.
- The dark theme is a real palette, not an inversion — asserted, not assumed.
- Placeholder text is de-emphasised but still clears contrast.
- Disabled controls keep a visible border, so they read as unavailable rather than broken.
04Loading fast
11 ways
- The whole site is static HTML — no CMS, no database, no server rendering.
- One stylesheet covers 67 pages.
- The carousel library is a separate chunk, loaded only on pages that carry a rail.
- The lightbox is loaded with it, and only there.
- Search loads its index the first time someone opens the palette, not on page load.
- Fonts use metric-compatible fallbacks, so the swap does not reflow the page.
- Per-image and per-page byte budgets are enforced by the test suite.
- Nothing referenced is missing, and nothing shipped is unused — both are asserted.
- One scroll listener drives every scroll-linked effect on the page.
- Scroll work is batched into a frame, so it cannot thrash layout.
- The build fails if a chunk dynamically imports the entry chunk, which would deadlock.
05Being findable
10 ways
- Every page has its own title and description, written for that page.
- Every page declares a canonical URL.
- Open Graph and Twitter Card tags give a controlled title, description and image when shared.
- CollegeOrUniversity structured data carries the name, address, contact and accreditation.
- Programme pages add their own structured data for the qualification.
- Semantic headings give a crawler a clear outline of every page.
- URLs are readable and stable, with no query strings in the structure.
- The site map is an HTML page, not only an XML file.
- Internal links are checked at build time, so a dead link cannot ship.
- Anchors are checked too, so a table-of-contents link cannot point at nothing.
06Being trusted
10 ways
- Accreditation numbers are published exactly as the college registers them.
- Each accrediting body is named with its own mark and its own registration number.
- The marks are the bodies' own artwork, not redrawn.
- Registration and exam-centre numbers appear in the footer of every page.
- Content extracted from the old site is carried over verbatim rather than paraphrased.
- Every source paragraph over 60 characters is asserted to survive onto the rebuilt page.
- Errors found in the source content are documented for the college rather than silently rewritten.
- Duplicate and empty source pages are named, and what replaced them is stated.
- The application form states plainly that it has no backend until the college sets one.
- No testimonial, statistic or partner logo on the site is invented.
07Being maintainable
12 ways
- Every page is generated from one layout, so a header change is a one-line change.
- The 37 programmes come from a single catalogue file.
- Navigation, campuses, contact details and accreditation come from a single facts file.
- Every colour, size, radius, shadow and motion curve comes from one token block.
- Two radii and a pill are the whole shape system, so no component invents its own.
- Interface strings live in one file, in five languages.
- Markup escapes by default; raw HTML has to be asked for explicitly.
- The generator only deletes files it wrote, identified by a marker.
- The test suite runs over the generated HTML, so it tests what ships.
- Structural rules — no nested list item, no flow content in a paragraph — are asserted.
- The design system page renders the live tokens, so a change can be checked in one place.
- A browser audit script drives the real page at five widths and reports overflow and errors.
08Applying
15 ways
- The application form is one page, not a wizard that hides how much is left.
- It is grouped into numbered sections, so a long form still reads as four short ones.
- Every field states whether it is required before you reach it, not after you submit.
- Validation messages are written as sentences, not as browser defaults.
- An invalid field is announced to a screen reader, not only outlined in red.
- The first invalid field takes focus on a failed submit, so nobody hunts for the error.
- Optional fields say why they are optional and when they will be needed.
- Choosing a programme from its own page carries that choice into the form.
- The programme list in the form is grouped by faculty, so 37 options stay navigable.
- Until the college sets a handler, the form says plainly that nothing has been sent yet.
- It hands the applicant a transcript of their own answers rather than losing them.
- It never claims a submission succeeded when it has not left the browser.
- The client-side validation is documented as presentation only; the server must validate again.
- The form posts nowhere third-party — there is no analytics or marketing tag on any page.
- There is a phone number, a WhatsApp number and an email beside the form for anyone who would rather talk.
09How it is checked
33 ways
- Seven assertion suites run over the generated HTML on every build.
- The pages suite proves metadata, landmarks and one h1 on every page.
- It resolves every internal link and every anchor, so a dead link cannot ship.
- It fails on an orphan page — anything the navigation cannot reach.
- It fails on a placeholder value left in real content.
- The markup suite proves structural nesting: no list item outside a list, no nested link.
- It proves no flow content sits inside a paragraph, which silently breaks layout.
- It proves every element that opens is closed, in order.
- The accessibility suite proves alt text and intrinsic dimensions on every image.
- It proves a programmatic name on every control.
- It proves every ARIA reference resolves to an element that exists.
- It proves no heading level is skipped and no positive tabindex is used.
- It proves all five locales are complete, so a missing translation cannot ship.
- The contrast suite reads the real token values rather than a copy of them.
- It checks every text and field pairing the design system actually puts on screen.
- It checks the focus ring against every field it can land on, in both themes.
- It checks control borders against the 3:1 non-text threshold on every field.
- It catches a cascade-layer trap where a component rule tries to recolour a utility and cannot.
- The assets suite fails on a referenced image that is missing.
- It fails on a shipped image nothing references.
- It enforces a per-image and a per-page byte budget.
- The content suite proves every source paragraph over sixty characters survives onto the rebuilt page.
- It proves every faculty links its programmes.
- It proves every source page is either rendered or excluded by name.
- The bundle suite runs on built output, not source.
- It catches a chunk that dynamically imports the entry chunk — a cycle that deadlocks at runtime.
- A browser audit drives all 70 pages at five widths and reports horizontal overflow by element.
- It reports any image painted larger than the pixels available to fill it.
- It reports any image stretched off its own aspect ratio.
- It reports any control label that has wrapped onto a second line.
- It reports any bleeding hero picture that covers text in the band below it.
- A behaviour audit drives search, the filters, the forms, the lightbox, the menus and the theme.
- It exists because a bundling fault once left the search page rendered but inert while every static check passed.
10Reading a programme
13 ways
- All 37 programme pages come from one template, so none of them drifts from the others.
- Each states its NQF level, its credential, its duration and its campuses in the same place.
- Entry requirements are stated before the curriculum, which is the order a reader needs them in.
- The awarding body is named on the page, not only in the footer.
- Body content is carried over from the college's own words rather than rewritten.
- Where the source content was wrong, the page says so rather than repeating it silently.
- Long qualification tables scroll inside their own box instead of widening the page.
- Each page links its faculty and its sibling programmes.
- Each page can be printed as a document, with the destination of every link written out.
- The print stylesheet drops the chrome, the carousels and the decorative bands.
- Printing opens every accordion and tab panel, so nothing is hidden on paper.
- Printed pages force black on white regardless of the theme on screen.
- Headings avoid breaking away from the text beneath them on paper.
11Details that are easy to skip
22 ways
- Scrollbars are themed rather than left as the operating system default.
- The scrollbar thumb takes the accent on hover, so it reads as part of the product.
- Text selection uses the brand amber rather than the browser blue.
- The scroll-to-top button carries the reading position on its rim.
- It appears past 600px and disappears under 200px, so it cannot flicker at a threshold.
- The contact strip retracts as reading starts and returns when you scroll back up.
- The header retracts on the way down and returns immediately on the way up.
- Clicking an item in the on-page navigation holds the header still while it scrolls.
- The on-page navigation scrolls the active section into its own centre as you read.
- It reserves the width of its own bold state, so the strip does not reflow as you pass a heading.
- Section anchors account for the header height, so a heading never lands behind the bar.
- The decorative circles behind the headings are marked decorative and never announced.
- The favicon is the college crest, at the size a browser actually paints it.
- The theme is resolved before first paint, so no page flashes the wrong one.
- Fonts declare a metric-matched fallback, so the swap does not move a single line.
- Focus is returned to whatever opened a dialog when it closes.
- A closed drawer leaves the tab order rather than lurking in it invisibly.
- Modals trap the tab ring, so keyboard focus cannot wander behind them.
- Every dialog closes on Escape.
- The command palette opens on ⌘K and Ctrl+K.
- Arrow keys move through search results and Enter opens the highlighted one.
- A search with no match hands the query to the full search page instead of doing nothing.
12The shape of the thing
14 ways
- Two radii and a pill are the entire shape system, so no component invents its own corner.
- Every interactive control shares one height and one radius, so a row of them reads as one row.
- Controls are sized by padding rather than a fixed height, so a longer label never clips.
- Icons inside a control are sized against the text beside them, not set in pixels.
- The eyebrow is set in a monospace at a colour the heading never uses, so a label reads as a label.
- Section titles close with the brand dot in place of a full stop.
- The header runs wider than the text column, so the chrome frames the page rather than lining up with it.
- A hero photograph hangs half its own height past its section, over a rule you can see it cross.
- The band below reserves that overhang, so the picture never lands on something you were reading.
- Decorative circles are clipped by their own layer, so a band can let a picture out without letting them out.
- Third-party marks sit on one light plate rather than each wearing its own white box.
- Forms carry a shallow gradient and a brand wash, so a long form is not a flat sheet of paper.
- The filter bar stays where the reader left it instead of following them down the page.
- Nothing on the site uses a colour, a size, a radius or a motion curve that is not in the token block.
13Reaching more people
10 ways
- The interface is available in English, French, Chinese, Portuguese and Spanish.
- The language choice persists across pages.
- The scope of translation is stated in the switcher, so nobody expects translated tuition.
- Every locale is asserted complete at build time — no missing string can ship.
- The theme choice persists and is resolved before first paint, so nothing flashes.
- The site respects the operating system's colour scheme when no choice has been made.
- WhatsApp is offered alongside phone and email, because that is how applicants write.
- Contact is broken out by department, so an enquiry reaches the right desk first time.
- Programme pages can be printed as a usable document, not a screenshot of a website.
- The printed page carries the destination of every link.
See it running.
Every claim above is in the build. The design system page shows the parts on their own.