Ecuador — Cuenca
Projects

EVH Renovatie — A trade website built to get the phone ringing

EVH Renovatie — A trade website built to get the phone ringing
August 18, 2026
EVH Renovatie installs windows, doors and exterior joinery in Putte, Belgium. Their customers are homeowners within about thirty kilometres who are choosing between three local installers, and who will make that choice from a phone, in an evening, in Dutch. The site has one job: turn that search into a quote request. I designed and built it end-to-end. The research here is not a stakeholder-interview exercise, it is understanding a specific buying decision.
  • The search is local and specific. Nobody searches "renovation". They search for a product and a place — screens, roller shutters, a veranda, fly screens — which means one page per service, each able to rank on its own, beats a single services page with anchors.
  • Trust is visual and immediate. A homeowner comparing installers is looking for evidence of finish quality. Photographs of completed work do more than any amount of copy, so the portfolio is a primary page rather than a footnote.
  • The phone number is the conversion. Many customers will not fill in a form at all; they will call. So the number sits in the header on every page, permanently, tappable.
  • The two requests are different. "I have a question" and "I want a price for this specific job" need different fields. Forcing both through one form loses the second, which is the valuable one.
  • Photography carries the page. A full-bleed hero of real installed work, shot on site, with the copy laid over it. The product is the craftsmanship, so the imagery is the argument.
  • A warm, industrial palette: charcoal and a single construction orange for action. Restrained enough to read as professional, warm enough not to feel corporate.
  • Plain, confident Dutch. Ramen & deuren op maat. No slogans, no filler. A trade customer wants to know what you do and where you do it, in the first sentence.
  • Mobile-first, because the traffic is. Large tap targets, a header that keeps the phone number reachable, and forms that are short enough to finish standing up.
  • Nine service pages — windows, doors, curtain walls, verandas, screens, roller shutters, sealant work and fly screens — each a real page with its own metadata and structured data, not a tab.
  • Filterable portfolio: completed projects filtered by category, each with a photograph and a short description of the work.
  • A two-mode contact page: a general enquiry tab and a full quote-request tab that captures the service, the location and the details an installer needs to price a job without a second phone call.
  • Contact details as content: address, phone, email and opening hours laid out where a customer looks for them, not hidden behind a form.
  • A self-service backend: submissions land in a database the client can read, alongside the portfolio projects and testimonials, so the site's content is theirs to change.
A React site that ships as static HTML. The site is built with Vite and React, but it does not ship as a client-rendered single-page app. A post-build step server-renders every one of the twelve routes and writes a static HTML file per route, with the complete head — title, meta, canonical, Open Graph and all the structured data — and the fully rendered body. The client then hydrates that same markup. This matters for exactly the reason the site exists. A crawler or a social scraper with no JavaScript still sees correct metadata and real content, and a homeowner on a phone on mobile data sees the page immediately rather than a spinner. For a business whose entire acquisition channel is local search, shipping a blank shell to a crawler would have been the single most expensive decision available. A backend the client can own. The content and form submissions run on PocketBase, a self-hosted backend that ships as one binary with its own admin interface. Collections for contacts, service requests, portfolio projects and testimonials are versioned as migrations. For a small business this is a better fit than a hosted content management platform: no per-seat cost, no vendor account to manage, and the whole thing is a file they own. Hosting. The static build deploys to Netlify. Hashed assets get a one-year immutable cache, valid routes serve their own prerendered file, and unknown URLs fall back to the app shell. A retired page redirects permanently rather than 404ing, because a dead link that used to rank is a wasted asset.
  • Frontend: React with Vite, React Router, Tailwind CSS, Radix UI primitives with class-variance-authority, Framer Motion for restrained transitions, Lucide icons.
  • SEO: react-helmet for per-route metadata, a custom server-render and prerender pipeline, JSON-LD structured data, and a generated machine-readable site summary.
  • Backend: PocketBase, self-hosted, with versioned collection migrations and rate limits configured.
  • Images: Sharp for build-time image processing.
  • Hosting: Netlify, with explicit cache headers and redirect rules.
A single-page app is the wrong default for a local business. The modern reflex is to ship a client-rendered app and add a meta tag library. For a site whose customers arrive from a Google search on a phone, that trades away the two things that matter most: what the crawler sees and how fast the first paint is. Building the prerender step was the highest-leverage work in the project and none of it is visible. Nine near-identical pages need a content model, not nine files. Services share a structure and differ in content. Driving them from a single data module keeps them consistent and makes adding the tenth service a data change rather than a new page to maintain. Choose the backend the client can live with. PocketBase is not the most powerful option available. It is one binary, with an admin panel a contractor can actually use, and no monthly bill that turns into an awkward conversation in a year. Matching the tool to who maintains it afterwards is part of the design. A fast, fully static, Dutch-language site where every service has its own rankable page, the completed work is front and centre, the phone number is always one tap away, and a quote request arrives with enough detail to price the job. The client owns their content and their inbox, and the site loads before a homeowner on mobile data loses patience.