Santal Tour
A travel agency site: 21 static pages in three languages, 6 KB of JS and an enquiry that actually arrives
Overview
A site for a Tashkent travel agency: international tours, visas, umrah packages and flight tickets. Seven sections in three languages — Uzbek, Russian and English — are generated by a Python script into plain static files: no database, no admin panel, no framework. The only dynamic part is the enquiry form: it posts to a PHP handler and answers with JSON without reloading the page.
The problem
People choose a travel agency with a phone in their hand, often on mobile data. The previous site pulled in a theme and plugins to render what is essentially five blocks of text and a phone number. Add three languages and it is easy to end up with the Uzbek version half a site behind the Russian one within a month.
The solution
No framework: 6 KB of dependency-free JS, and everything it does is optional — the site reads fine with JS disabled, and the form then simply submits as a plain POST. Markup, assets and srcset are produced by a single build.py, and the breakpoints are kept in sync with the styles, so images never arrive blurry. All three locales come out of the same build with shared URLs and identical structure, so they cannot drift apart. The form is guarded by a honeypot field and a required consent checkbox, and the security headers are set on nginx.
The outcome
- 21 pages: seven sections × three languages, with canonical, hreflang and x-default
- 6 KB of dependency-free JS — the site works with JavaScript disabled
- WebP images at two widths with srcset and sizes; fonts are preloaded subsets
- JSON-LD TravelAgency, sitemap.xml and OG cards, so search and messengers show the agency correctly
Next project
coder.abuu.uz
The site you are reading: three languages, static build, self-hosted