Visit Kurdistan
A travel platform for the Kurdistan Region — website, admin dashboard and mobile app, with an AI assistant and trip planner.
Overview
Visit Kurdistan helps people plan a trip to the region: where to go, what’s on, and what to book. It runs as a public website, a mobile app, and an admin dashboard the content and operations teams use every day, all sharing one backend.
I work across the whole thing — the API and data model, the public site, and the dashboard.
The problem
The region had plenty to offer visitors and no single place that pulled it together. Tour operators, events and destinations lived in separate hands, in three languages, with no way to plan or book a trip end to end.
What I built
One backend feeding four surfaces, so content is written once and appears everywhere. On top of that, an assistant and a trip planner that answer from the real catalogue rather than generic travel advice.
Tech stack
- Backend
- NestJS, PostgreSQL, TypeORM, Redis, JWT / Passport, Swagger
- AI
- DeepSeek, RAG / embeddings, Tool calling, Cloudflare Turnstile
- Public site
- React, Vite, TanStack Query, i18next, Leaflet, Framer Motion, Tailwind CSS
- Dashboard
- React 19, Vite, TanStack Table, Redux Toolkit, TipTap, react-pdf
- Mobile
- React Native
- Infrastructure
- AWS S3, Docker, Nodemailer, Strapi CMS
Key features
Three languages, one platform
Everything is written once and published in English, Arabic and Kurdish — including right-to-left layouts, which use the same components rather than a separate build.
Destinations across the region Places on a map
Every destination, tour and event is pinned and searchable, with filters by city and category. Built on open mapping data rather than a paid maps service.
The place explorer — search, filter, and every place on the map Bookings you can actually use
A booking produces a PDF confirmation with a QR code for check-in, emailed automatically — not just a record in a database.
A package, ready to book A dashboard the team lives in
Tours, events, packages, promo codes, places, bookings, orders, users and site content are all managed from one place, with rich editing for the content team.
What’s on, by month and category An assistant that knows the catalogue
Visitors can ask questions in any of the three languages and get answers drawn from live site content, so “what’s on this week” is actually current.
The assistant, answering from live site content A trip planner in plain language
Describe a trip in your own words — or answer a few questions instead — and get a day-by-day itinerary back, which you can keep refining and share by link.
Describe your trip in your own words Itineraries that lead somewhere
Each plan maps the route in order, explains why every stop was chosen, and matches the trip against real tour packages you can book.
The itinerary it builds — day by day, mapped, with packages that fit Built for phones first
Every screen reflows from desktop to tablet to phone without a separate mobile build.
On a smaller screen
The same components, reflowed rather than rebuilt.
Homepage on a phone
The map, stacked for a smaller screen
Packages on a tablet
The assistant on a phone