Skip to main content
TekXpat

Car hire · Chileka Airport

R&H Car Rentals

R&H run a counter inside the arrivals hall at Chileka. Their customers are deciding between them and the desk next door, usually on a phone, usually while still holding a bag.

Sector
Car rental
Where
Chileka International Airport, Blantyre
Live at
rhcar.tekxpat.com

The brief

What they needed

  • Show the fleet properly — what each vehicle is, what it seats, what it costs.

  • Take booking enquiries from people who are already at, or heading to, the airport.

  • Be credible against international rental brands without pretending to be one.

The R&H Car Rentals homepage, showing a photograph of their staffed desk inside the Chileka Airport arrivals hall.
Homepage — the desk itself is the argument, so it leads.
The R&H Car Rentals fleet page on a phone, listing available vehicles with photographs and rates.
The fleet page on a phone, with live rates per vehicle.

What we built

The work

Fleet catalogue

Every vehicle with its own page: photographs, seats, doors, transmission, engine, and the rate where a rate has been confirmed. Filterable by what the customer actually cares about.

Rates that are either right or absent

Confirmed rates are shown. Unconfirmed ones are not guessed at — the page says to ask. Structured price data is only published for rates the client has actually confirmed.

Booking enquiry flow

Vehicle, dates, and contact details, delivered to the desk. As with Phonex Taxi, a delivery failure is surfaced to the customer rather than swallowed.

Airport-specific search presence

Structured data marking the business as a car rental at a named airport, with its service area and payment methods. That is what makes it eligible to appear for "car hire Chileka airport". Opening hours are deliberately absent from the markup until the client confirms them — wrong hours in structured data strand people at an airport.

Built with

  • Next.js 15 (App Router)
  • TypeScript
  • Tailwind CSS
  • Schema.org structured data (AutoRental)
  • GitHub Actions deploy with canonical + sitemap verification
  • Managed hosting on our own server

Decisions

Why it was built this way

The parts that took the longest and are hardest to see. These are the reasons this site exists to talk about, rather than a gallery of screenshots.

Nothing unconfirmed was invented

The client had not confirmed which hall the desk is in, whether they take Mastercard, or where the vehicle yard is. Those are absent from the site rather than filled in plausibly. A confident wrong detail about an airport counter sends a customer to the wrong place.

The palette was measured, not eyeballed

Their signage uses navy, maroon and gold. Gold on the off-white background measures 3.3:1 — fine for a rule or an icon, and a fail for body text. So there are two golds: one for fills, a darker one for anything you have to read.

A wrong canonical tag cannot ship

Every URL on the site derives from one environment variable, and the build fails loudly if it is missing. The deploy then re-checks the live HTML and the live sitemap to confirm they point at the intended domain. A wrong canonical de-indexes a site silently — nothing else in the pipeline would catch it.

The production server never builds

GitHub Actions builds the site and ships the finished artefact. The box that serves the site never runs a build, so a routine deploy cannot exhaust its memory and take down another client running on the same server.

See for yourself

rhcar.tekxpat.com is live right now

Open it on your phone. Time how long it takes to load. Search for the business on Google. Everything on this page is checkable, which is the only kind of claim worth making.

The other one

Phonex Taxi

Taxi and airport transfer service in Blantyre. A Next.js site with a booking system, set up to be found by people searching for a ride.

Read it →

Prefer to talk? WhatsApp us.