Web Platform & E-Commerce

KozyHoliday Booking Platform

We built a guest booking platform serving the Kaş region, a property-owner portal and an internal back-office on a shared design system and API layer.

  • React
  • TypeScript
  • Next.js App Router
  • Vite
  • React Router
  • Tailwind CSS
  • HeroUI
  • Auth0

KozyHoliday guest booking site homepage
KozyHoliday back-office property management screen

Problem

Three separate interfaces — for guests, property owners and the internal team — became unsustainable without a shared design language and a single API layer.

Solution

We built the three apps in one npm Workspaces monorepo with a shared design system and API layer, delivering search, booking, property management and finance flows end to end.

Where it started

KozyHoliday was positioned as a platform offering secure bookings in the Kaş region of Antalya. There were three distinct user groups: guests looking for accommodation, property owners managing their listings, and the internal team running operations.

Their needs differed, but they needed a common foundation in data and design. Separately built interfaces produced duplicated code and an inconsistent experience.

How we approached it

We brought the three apps into one npm Workspaces monorepo and built a shared design system and API client layer. So a component or endpoint was written once and used consistently across all three apps.

On the guest side we built the search and booking journey; in the owner portal, property management; in the back-office, calendar, payment and finance flows. Turkish and English localization was planned from the start.

Technical solution

The apps were built with React and TypeScript; the guest site on Next.js App Router, the portal and back-office on Vite + React Router. The UI was produced with Tailwind CSS and HeroUI, animations with Framer Motion.

Authentication used Auth0, form validation React Hook Form and Zod, and localization react-i18next. Charts used Recharts, mapping used Google Maps, and deployment was configured with Docker.

Let the next project be yours

If you have a similar need, let's talk through how we could move forward in a short call.