Client Project — Website + Vehicle Enquiry System
Sell Your Car to Caitlin
Enter your plate → the car’s details appear → mileage, condition, photos → an offer from the person who buys it. Eighteen town pages around a Coatbridge base.

Sell Your Car to Caitlin is a family-run car buyer in Coatbridge: Caitlin is the name on the door, her husband Carlo values every car himself, and they buy across Glasgow and both Lanarkshires — cars, vans up to 3.5 tonnes, non-runners, cars with finance, paid by bank transfer the same working day. The website’s job was to replace the “phone us for a valuation” dead end with a two-minute enquiry that arrives on Carlo’s desk complete: the DVLA’s own record of the car, the seller’s honest notes, and photos from their phone. Twenty-eight pages, eighteen of them for the towns the business buys in.
Interactive
Explore the site
Twenty-eight pages built around one box: the registration. Pick a part of the site to see it.
- 28
- pages, all hand-written
- 18
- town pages
- 2
- steps to a complete enquiry
- 7
- facts the DVLA lookup fills in
The challenge
Selling a car privately means guessing what it’s worth, then haggling. The national car-buying portals answer with an algorithm and chip the number on the doorstep. A small local buyer’s advantage is that a person values the car — but a person needs the details first, and “call us” loses the seller who is comparing at ten at night. The site had to collect a complete enquiry without feeling like paperwork, and to be found by someone searching for a buyer in their own town.
What we built
A registration lookup that fills in the car
Type the plate and the site asks the DVLA’s Vehicle Enquiry Service for the make, year, fuel, engine size, colour, tax and MOT status, and shows them back for confirmation. The DVLA doesn’t return the model, so the seller adds it. If the service is down or doesn’t know the plate, the form falls back to make and year typed by hand and the enquiry still goes through.
Step two: the car as it actually is
Mileage, condition in the seller’s own words, a note on anything they’d want to mention, and photos straight from the phone — shrunk in the browser before upload so a camera-roll picture doesn’t stall on a mobile connection. Name, number, email and area, and a consent line. Two steps, about two minutes.
An enquiry pipeline that doesn’t drop anything
Every enquiry is saved to a database with a reference number before any email is sent. Carlo gets a notification with the car, the photos and a one-click reply; the seller gets a confirmation quoting the reference. If the mail service fails, a scheduled job retries until it lands — the record exists either way.
Pages for every kind of seller
Cars, vans up to 3.5 tonnes, and a plain-spoken scrap and non-runner page that says “before you scrap it, ask Carlo”. Eighteen town pages from Coatbridge out to Bathgate and Lanark, each with the distance from base, the kind of cars sold there and local questions. A how-it-works page that explains exactly what the lookup gives and doesn’t give.
Key user journeys
Airdrie seller, Sunday evening
Search “sell my car Airdrie” → the Airdrie page, two miles from base → plate in the box → the DVLA fills in the car → mileage, honest condition, four photos → confirmation email with a reference → Carlo’s offer by email
Van owner who’d rather not type
Sell your van page → “Prefer WhatsApp?” → a prefilled message to Carlo with what to include → reg, mileage and photos from the camera roll → offer on WhatsApp
A car that failed its MOT
Scrap and non-runners page → what to send and what won’t happen → plate and photos → an offer, or an honest “it’s scrap” → collection arranged if it can’t be driven
Key capabilities
- DVLA Vehicle Enquiry Service lookup from the registration, with a typed make-and-year fallback so no seller is turned away
- Two-step enquiry: confirmed vehicle, then mileage, condition, notes and photos resized in the browser before upload
- Enquiries stored with a reference number first, emails second, and a retry job for any notification that fails
- Carlo’s notification carries the photos and a one-click reply; the seller gets a confirmation quoting the reference
- Prefilled WhatsApp as the alternative route on every page, and two phone numbers, one of them freephone
- Eighteen town pages with distance from the Coatbridge base, typical cars and local questions, plus van and scrap pages
- A database-backed rate limit on the lookup and the form, and a hidden honeypot field, so the DVLA quota and Carlo’s inbox stay clean
- Structured data for the business, its hours, its areas and its questions
Visual walkthrough

The team page says plainly who does what: Caitlin is the name and the face, Carlo reads every enquiry and makes every offer. A family business that tells you who is looking at your car.

Eighteen towns, each with its distance from the Coatbridge base and its own page. Coatbridge is home; Airdrie is two miles; Glasgow is twenty minutes along the M8.
Technical approach
- Hand-built, statically rendered pages on Next.js, with the lookup and the enquiry as the only parts that run on request.
- The DVLA call is server-side only, behind a database-backed rate limit, with a fixture mode for development and a manual fallback in production.
- Enquiries land in Postgres before anything else happens; email is a consequence of the record, not the record itself, and a scheduled retry picks up any notification the mail service dropped.
- Photos are resized in the browser to a sensible size, then stored in object storage and linked from the enquiry — Carlo’s notification shows them inline.
- No analytics and no cookie banner: the site sets nothing it would need to ask about. Local fonts, no third-party scripts.
Built with
- Next.jsFramework: twenty-eight pages rendered ahead of time, with server routes for the lookup, the upload and the enquiry.
- ReactThe two-step enquiry form, the plate lookup and the photo uploader are React components.
- TypeScriptThe DVLA response, the enquiry record and every town page are typed, end to end.
- Tailwind CSSStyling, with the brand’s own palette; nothing shipped that a page doesn’t use.
- Node.jsServer routes: vehicle lookup, photo upload, enquiry submission, and the retry job.
- NeonServerless Postgres in London: enquiries, references, notification state and the rate limiter.
- PostgreSQLPlain SQL through a standard Postgres driver, so the same code runs locally and in production.
- VercelHosting, edge delivery, the scheduled retry, and Blob storage for the sellers’ photos.
- ResendCarlo’s notification and the seller’s confirmation, with a reference number in both.
- CloudflareDNS for the domain.
- WhatsAppA prefilled message to Carlo on every page, as the no-typing route.
- GoogleStructured data for the business, hours, areas and questions; the reviews link.
- GitHubVersion control; every change reviewable.
What this demonstrates
A lead-capture system dressed as a simple form. Where Roadsist Auto prices the job with an engine, this site gathers the job completely — the official record of the car, the seller’s own account, the photos — so a person can price it fast. The same evidence discipline as every other site here: the town pages exist because the van goes there.
More work
Three more, all live.

Bilingual B2B Manufacturing Website
LIT-15 Cast Iron Foundry
A bilingual site for a Bulgarian iron foundry, written for the engineers who specify castings rather than the people who buy them.

Bilingual Website + Online Enrolment
Азбукарче Bulgarian School
A bilingual website for Glasgow's first Bulgarian school — enrolment, news and school life in two languages.

Multi-role Web Application + Internal System + PWA
Азбукарче Electronic Diary
A real, installable school system for a Bulgarian community school in Glasgow.
Need a form that arrives complete?
Tell us about your business and what you need — we’ll review what you’ve sent and come back with the most sensible next step.
