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, 309 lodges and camps, 123 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, a booking engine and an AI safari concierge, redirected every URL in the old sitemap, and switched goshenisafaris.com over to it in October 2026. Six weeks and 89 releases later it also holds a seat on a group departure for 48 hours, builds proposals for groups and takes job applications.
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. The platform launched with 63 Eloquent models and has 88 today: Tour, ItineraryDay, TourPrice, Accommodation, Destination, Country, MonthGuide, Booking, Payment, Quote, Inquiry and the rest. 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, not a copy.
Marketing kept the freedom the page builder gave them, minus the weight. Timeless Builder is a visual editor with versioning, scheduled publishing and preview, built into the admin and rendering through the same React components the public pages use. It launched with 45 widgets and has 73 now. Editors drag blocks; the page still ships one stylesheet.
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 on the day. There are 1,568 now. The client runs releases 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 again on the live site on 14 November, the homepage serves 482KB of HTML against WordPress’s 737KB, one stylesheet instead of 41 and two external scripts instead of 33. Time to first byte is 0.9s against 5.9s, and the load event fires at 2.1s against 10.6s.
The HTML is heavier than the 156KB we measured on the staging build in September, and that is deliberate: pages are 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. Since 14 October it also carries the styles the first screen needs. In our Lighthouse runs that day, three each way, the homepage’s largest paint moved from 3.4s to 1.3s.
Behind it: 164 published tours, 309 lodges and camps, 128 destination pages across 6 countries and 123 journal posts are records, not pages. They can be searched, filtered and booked, with payment through Pesapal. The sitemap has grown from 484 URLs to 789.
The site kept changing after the switch. In six weeks it gained a group departures page that holds a seat for 48 hours, Pesapal checkout without leaving the page, bookings synced both ways with the company’s CRM, a Kilimanjaro hub with a route finder, a proposal builder for groups, nine private day trips, two-factor login for staff and an app visitors can install on a phone.
What did not go to plan, and we would rather say it than let somebody else find it. Every address in the old sitemap was redirected, but 57 tours were imported as hidden drafts and their addresses sent to country pages. That cost rankings until it was fixed on 6 November, and the SEO case study has the full account. French and German have translated menus but English content, so they stay out of search. And the homepage got heavier, not lighter: it now opens on a 30-second film of the river crossing, and a desktop visitor downloads all 45.8MB of it on top of 2.9MB of page. The old page transferred 1.2MB. Sized images for the carousels and a CDN in front of the bucket were the next round of work in October. They still are, and the film has joined them.