BIKZ.DEV — CASE No. 18 TURAN ASIA · 2026 LARAVEL + POSTGRESQL · TOUR OPERATOR PLATFORM LIVE ON TURANASIA.KZ · KK / RU / EN +7 775 878 17 32 BIKZ.DEV — CASE No. 18 TURAN ASIA · 2026
Case · No. 18
2026
Web · Laravel + PostgreSQL · Custom admin

TURAN ASIA.

A complete rebuild for a tour operator that has been selling Kazakhstan since 1994. Three languages everywhere — Kazakh, Russian and English, down to every tour programme and every photo caption. A Laravel 11 + PostgreSQL API, a custom admin panel instead of an off-the-shelf CMS, a Baikonur launch calendar, and a media library that turns a folder of photos into a link a manager can send a client.

Tour operator Trilingual 2026
Turan Asia homepage — 'we open the world with you' hero with a mountain slider and the trilingual navigation
Year
2026
Languages
3
Scale
30 years of tours
Status
Live
01

About the project

// 2 min read

Turan Asia has been running tours across Kazakhstan and Central Asia since 1994 — and was still selling them from a site built on PHP 5.6, where every price change meant emailing a developer. We replaced the whole thing: a static, framework-free front end for speed, a Laravel 11 + PostgreSQL API behind it, and a custom admin panel rather than a boxed CMS, because the catalogue is unusual — a tour has a day-by-day programme, fixed departures or an on-request mode, a group price and a separate private price, and all of it in three languages.

turanasia.kz homepage — hero slider, trilingual navigation and the 'since 1994' badge
01Home — the hero slider and the language switch that carries into the link

Every piece of content is trilingual by design: titles, programmes, conditions and photo captions are stored as translated JSON fields, and the language a visitor picks is written into the address — so a manager can send a client the English version of a tour and it opens in English. Tour pages assemble themselves from the API: a gallery where photos and video sit in one strip, a day-by-day timeline parsed out of the programme text, collapsible sections, departure dates with seats left, and a request form that lands straight in the admin panel. Messenger previews are rendered on the server — WhatsApp and Telegram don't run JavaScript, so Laravel injects the tour's own title, description and photo into the HTML before it ships.

Tour page in Kazakh — photo gallery with thumbnails, price card and the booking request form
02A tour in Kazakh — gallery, price card and the request form

Baikonur gets its own section, because selling it is a different job: the cosmodrome is a closed city, launches slip, and paperwork has to be filed 60 days ahead for foreign citizens. The page carries a launch calendar with tour categories as filters, an on-request mode for tours without fixed dates, and an FAQ answering the permit questions before anyone writes in. The media library works the same way for the sales team — managers build albums, mark them public or link-only, and send a client a single photo or a whole album by a link that previews properly in a messenger and is closed to search engines.

Baikonur page in Kazakh — a Soyuz launch photo, the permit rules and what the all-inclusive group tour covers
03Baikonur — permits, deadlines and what the group tour covers

Under the hood: Sanctum tokens and two roles in the admin, translated JSON fields on every model, uploads resized and EXIF-rotated on the way in so a 10 MB phone photo doesn't end up on the page, stable slugs that survive an edit, clean URLs, sitemap and per-page meta. The old PHP 5.6 site was archived and the domain moved over on the same server without downtime, with an HTTPS certificate issued in the same pass. The admin panel lives on its own subdomain, sealed off from the public site.

02

Stack

// what we shipped on
Laravel 11 PHP 8.3 PostgreSQL Sanctum JavaScript HTML / CSS Nginx Let's Encrypt Ubuntu
Next case · No. 19 · 2026

KORSHI.

← Previous: ASAR