All work

Computerredder — Local Service Site with a Self-Service Admin

Computerredder home page

Computerredder does computer repair at people's homes across Zuid-Holland. The customers are older, not technical, and they find help the same way every time: they search a town name plus a problem. That makes the whole business a search problem — and it makes the owner's ability to change a price without phoning a developer a hard requirement, not a nice-to-have.

The technical problem

  • Local search needs pages, not keywords. Ranking for “computerhulp aan huis Dordrecht” means having a page about exactly that — and the same for every town and every service, which multiplies into dozens of combinations that no one is going to write or maintain by hand.
  • Content that changes must not need a deploy. Rates, phone number, WhatsApp and availability appear on nearly every page. If editing them means a developer, they go stale; if they go stale, the site starts lying to customers.
  • Speed and reachability on a small budget. The audience is on modest devices and sometimes bad connections, and the business should not carry a monthly bill for a database it barely uses.

How I solved it

  • Programmatic pages: Next.js 16 App Router with TypeScript, statically generating around 60 pages from the service and location matrix — one real, indexable page per town and per service, each with its own metadata and structured data, all from one template.
  • Self-service admin: a password-protected portal where the owner edits rates, contact details and availability. Saving revalidates the affected static pages, so a single edit propagates across the whole site within seconds and stays statically served afterwards.
  • Right-sized storage: a JSON file in development, Redis in production. The site has one settings document, not a relational model, so it does not carry a database it would never use.
  • Contact without an inbox to harvest: a form over Resend instead of a published email address, defended with a honeypot and a timing check, working with JavaScript disabled, and storing nothing — the message leaves as email.
  • Identity, not a template: cream, pine green and amber with Fraunces headings and a lifebuoy mark, so it reads as a local business a neighbour would call.

The result

A statically rendered site that competes on local search across a whole province, and that its owner maintains alone — no deploys, no developer, no monthly platform bill.

Stack

Next.js 16 (App Router) · TypeScript · Tailwind CSS 4 · Redis / Upstash · Resend · Vitest · Vercel

Computerredder services overview
Computerredder location page for Dordrecht
Computerredder rates page

Contact

Say hello

A role, a project or a rough idea — all welcome. I read every message and reply within 24 hours.