MERSIN HATAY RESTAURANT · 2025 – PRESENT
Mersin Hatay Restaurant
A trilingual website for a Hatay cuisine restaurant in Mersin. Menu with prices and allergen information, blog, FAQ and contact; the menu and prices are managed from a custom admin panel.
My role: Design, development and maintenance: I am responsible for every technical part.
mersinhatayrestaurant.com- Turkish, English, Russian
- 3 languages
- menu items
- 200+
- Turkish law it complies with
- 4207
- automated tests
- ~320
The Problem
The restaurant’s guests include tourists who do not speak Turkish and Russian-speaking visitors. The menu had to be complete in every language, and each language had to be found by search engines as its own page.
Prices change in the QR menu of the restaurant’s point-of-sale system; updating them on the website one by one takes time and invites mistakes. Advertising alcoholic drinks is also restricted in Türkiye by Law No. 4207.
Architecture
Website
- Tailwind CSS
TR · EN · RU
Admin Panel
- Tailwind CSS
Menu, Prices and Blog
Laravel 13
- Laravel
Blade and Eloquent
Database
- PostgreSQL
Menu, Content and Queue
QR Menu
Price Import from the POS
Translations are stored in the same row, in a separate column per language; the database uses ICU collation for Turkish sorting.
What I Built
Trilingual Menu
Categories, dishes, portions and extras in Turkish, English and Russian; a field without a Russian translation falls back to English.
Prices and Allergens
Price, allergen information, portions and extras for every dish.
Price Import from the QR Menu
Prices from the point-of-sale QR menu are matched to products in the panel, previewed and applied to the site in one step.
Multilingual SEO
Each language at its own address (/en, /ru); hreflang tags, a dynamic sitemap with language variants and schema.org Restaurant data.
Spam-Protected Contact
Layered bot protection with Cloudflare Turnstile, a form timing check and rate limiting.
Admin Panel
Menu categories, dishes, images, options and blog posts are managed in one place.
Hard Problems I Solved
- 1
Syncing Prices with the POS System
I wrote an import flow that reads the point-of-sale QR menu and matches its rows to the dishes on the site: suggestions, manual matching, a preview and applying the changes in a single database transaction.
- 2
Complying with the Alcohol Advertising Ban
I reduced the alcoholic drink texts to plain product information as required by Law No. 4207, added an 18+ notice and protected the rule with an automated test.
- 3
A Third Language While Live
I added Russian while the site was live: 7 categories, 212 dishes, 594 option names, 10 FAQs and 10 blog posts. Missing translations fall back to English, so no page is ever empty.
Technologies
- Laravel
- PHP
- PostgreSQL
- Tailwind CSS
- Vite
- GitHub Actions
Related Services
Building a similar system? I can work with you from the architecture through to go-live.
Get in touch