Mancunian Way Driving School
The same website built twice, so the choice is about engines.
The real thing, running here. Hover to scroll it, or click to use it — Escape stops.
Two websites, one brief
The ask was for a site with a back end to log into and update, and a site without one, so the choice could be made by looking at both rather than by reading a description.
So both were built, from one file of copy. content.py holds every word; the
static generator renders it to flat HTML, and the same file emits the JSON the
app seeds from. The two builds are the same website. The decision is about
engines.
| Static | App | |
|---|---|---|
| Stack | Python → flat HTML | TypeScript, Express 5, SQLite |
| Hosting | Any static host, or a USB stick | A VPS, Fly.io, a Pi |
| Cost | £0 | ~£4–6/month |
| The form | Hands the message to your email app | Posts to the server, read in an admin area |
| Changing a price | Edit, rebuild, re-upload | Log in on your phone, type, save |
| Spam protection | None possible | Honeypot, timing check, rate limit |
| What can break | Nothing | A server, a database, a certificate |
The recommendation was static first, and move to the app when reading enquiries in an inbox becomes annoying — or when the back end is wanted as a portfolio piece in its own right, which may be the honest reason to build it.
The animations
Two things had to feel right rather than merely move.
The L-plate hangs on a string with a knot, and three animations stack: the string sways, the plate swings from the knot, and the plate twists on its own Y axis through an irregular 7.2-second cycle. The irregularity is the entire trick — an even rotation reads immediately as a turntable and stops being wind.
The cars are five SVGs in four lanes at different depths, speeds and delays, with centre lines scrolling at two rates behind them and a streetlight sweep across the band. The lead car is the school car, roof sign and L plate on the boot.
Both respect prefers-reduced-motion, and there is a Motion on/off toggle in
the footer that remembers the choice. The media query catches people who have
configured their system; the toggle catches everyone who has not but still
finds it too much.
The page that matters most
The About page states that all three parts of the DVSA qualification are not yet taken.
That is not modesty. A trainee instructor on a pink licence presenting as a fully qualified ADI with a green badge is a real problem, not a presentational one. The page says where things stand and it stays that way until there is a badge — which is the same reason the Reviews page marks its four reviews as placeholders rather than quietly implying they are real.
Refinements
How it changed
Every pass, dated, oldest first — nothing trimmed and nothing tidied out. The version that got rejected is usually more informative than the one that shipped.
8
- Started
Built it twice rather than guessing which was wanted
The brief was one site with a back end to log into and one without, so the choice could be made by looking. Both were built and both were run. The trap this avoids is the usual one — picking an architecture from a description, discovering the trade-offs afterwards, and then being too far in to change.
Functionality - Changed
One source of copy, two engines
Every word lives in `content.py`. The static generator renders it to flat HTML; the same file emits the JSON the app seeds from. So the two builds are genuinely the same website, and the comparison is about hosting, cost and what can break — not about which one has better text.
Functionality - Note
The comparison, written down rather than argued
Static: any host, £0, nothing to break, and changing a price means editing a file and re-uploading. App: a VPS at £4–6/month, a server and a database and a certificate that can all fail, and changing a price means logging in on your phone. Spam protection is only possible on one of them. Recommendation was static first, move when reading enquiries in an inbox becomes annoying.
Functionality - Changed
The L-plate had to twist, not spin
A real two-sided plate on a string with a knot, with three stacked animations — the string sways, the plate swings from the knot, and the plate twists on its Y axis through an irregular 7.2-second cycle. The irregular cycle is the whole trick: an even one reads instantly as a turntable and stops looking like wind.
Style - Changed
Cars with depth, not a loop
Five SVG cars in four lanes at different depths, speeds and delays, crossing an asphalt band under the hero, with centre lines scrolling at two speeds and a streetlight sweep. The lead car is the school car, roof sign and L plate included. A thinner version of the band doubles as a section divider.
Style - Changed
A motion toggle, not just a media query
Both builds respect `prefers-reduced-motion`, but there is also an explicit Motion on/off control in the footer that remembers the choice. The media query covers people who have configured their system. The toggle covers everyone who has not but still finds it too much.
Ease of use - Note
The placeholder prices say they are placeholders
The rate card is modelled on Manchester market rates and none of it has been agreed. Rather than leave plausible-looking numbers to be discovered later, the page carries a red box saying they are placeholders and must not be published unchanged. Same reasoning as the Reviews page marking its four reviews as fake: content that looks finished is the kind you stop seeing.
Quality of life - Shipped
The About page says the qualification is not taken
All three DVSA parts are listed as not yet taken. This is a legal distinction rather than a modest one — a trainee on a pink licence must not present as a fully qualified instructor with a green badge. The page stays that way until there is a badge.
Functionality
Screens
A look around
Look around — 4 screens

The hero, with the twisting L-plate and five cars crossing the asphalt band below it. 
Prices — three blocks and a fifteen-row rate card, with a red box stating outright that the figures are placeholders and the page must not be published unchanged. 
Coverage with a live postcode checker, 38 districts and five DVSA test centres with route notes. 
The About page states that the ADI qualification has not been taken. That is a legal distinction, not modesty.