Timeless International

Website Design / Website Development / UI/UX Design / SEO / Web Hosting / 2026

Gosheni Safaris: 484 WordPress pages, rebuilt as a booking platform

Client: Gosheni Safaris

Fifteen years of safari content — tours, 308 lodges and camps, 125 journal posts — lived inside a WordPress and Elementor build whose homepage shipped 737KB of HTML, 41 stylesheets and 33 scripts before a single photograph. We rebuilt it as a server-rendered Laravel platform with its own visual page builder, three languages, a booking engine and an AI safari concierge, redirected every URL in the old sitemap so nothing that had earned a ranking lost one, and switched goshenisafaris.com over to it in October 2026.

The challenge

Gosheni sells trips that cost as much as a car, and the site that sold them was a page builder standing on eight plugins: Elementor Pro, Dynamic Content for Elementor, ThePlus, FluentForm, a Turnstile widget and the Hello theme underneath. The homepage answered in six seconds and finished in ten. Its hero was a 48MB background video that, in every browser we pointed at it, never started — so the first thing a visitor saw was a grey rectangle where the Serengeti should have been.

The deeper problem was that nothing was a record. A tour was a hand-built page, so its price, its itinerary and its departure dates were paragraphs — impossible to filter, compare, translate, or quote from. Adding a language meant rebuilding 484 pages by hand. Adding a booking meant a form plugin and an inbox. And every page was one careless drag away from breaking, so the people who owned the content had learned not to touch it.

The approach

We audited before we wrote anything: every route, every template, every plugin, and where each of them would land afterwards. That map is what made the rest boring, in the way a migration should be.

Then we modelled the business rather than the pages. Sixty-three Eloquent models — Tour, ItineraryDay, TourPrice, Accommodation, Destination, Country, MonthGuide, Booking, Payment, Quote, Inquiry — so a tour is a record that knows its own itinerary, its own seasons and its own price, and every listing, filter, sitemap entry and quote is a query rather than a copy.

Marketing kept the freedom the page builder gave them, minus the weight: Timeless Builder is a 45-widget visual editor with versioning, scheduled publishing and preview, built into the admin and rendering through the same React components the public pages use. Editors drag blocks; the page still ships two stylesheets.

The move itself was the part nobody sees: 3,410 media files onto Cloudflare R2, all 487 URLs in the old WordPress sitemap mapped and verified before go-live (696 redirect rules in all), redirect chains flattened, sitemaps regenerated, and 1,031 automated tests standing behind it — plus releases the client can run from the admin, with a database backup, a health check and a rollback path built into the button.

The results

goshenisafaris.com switched to the new platform in October 2026. Measured on the live site, the homepage serves 440KB of HTML against WordPress's 737KB, one stylesheet instead of 41 and two external scripts instead of 33. Time to first byte is 1.0s against 5.9s, and the load event fires at 3.4s against 10.6s.

The HTML is heavier than the 156KB we measured on the staging build in September, and that is deliberate: pages are now rendered on the server, so a search engine or an AI assistant gets the whole page in the first response instead of an empty shell and a script.

Behind it: 100 published tours, 308 lodges and camps, 118 destinations across 6 countries and 125 journal posts are records rather than pages — searchable, filterable, translatable into English, French and German, and bookable with payment through Pesapal. All 487 URLs from the old sitemap still resolve, and the sitemap has grown from 484 URLs to 702.

What did not improve, and we would rather say it than let somebody else find it: the homepage transfers 3.9MB on a cold load against the old one's 1.2MB, and 3.3MB of that is photographs. That is down from 5.6MB in September, after the hero moved to a sized WebP and a phone-sized video. The old page was lighter because it showed almost nothing. Responsive sources for the carousels and a CDN in front of the bucket are the next round of work.

All case studies · Start a project