← back to case studies
Client project · 2026 — active development

Byty u moře

A platform for renting and selling investment apartments in Egypt. Resorts overview, unit details, a map, bookings, and a tailored dashboard for each role.

The site connects Czech and Slovak property owners abroad with people looking to rent. It works as a platform: the client creates a resort, assigns units and owners to it, guests book. Each owner then manages their own apartment without needing to nudge an administrator.

resorts
apartment units
3
user roles

Data model without a ceiling

Byty u moře — homepage with a resort catalogue
Homepage — search by resort and number of guests.

Why it exists

The client needed a tailored solution. The brief was clear: each apartment owner gets their own account and manages their unit themselves (photos, description, prices, availability), the admin keeps the structure (resorts, assignments, blog, general settings), and the guest searches, books, and saves favourites.

Going this route with an existing template or a classic CMS would have been clunky — mostly because of role management, per-row permissions, and the customisations the client will want down the line. A bespoke build gives room to extend, smooth management for each role, and a platform that makes the client's work easier as it grows. The site grows with the business, not against it.

How the platform earns

Monthly subscription
CZK 150

Paid by the owner for listing their unit. First 6 months free after sign-up.

Booking commission
6 %

The platform takes a cut of each completed booking. The guest pays the same price, the owner gets the rest.

Unit sale
per deal

The client sells investment apartments in the resorts. After a sale, the new owner gets full access to edit.

Three roles, three views of the system

The platform stands on a clear split. The admin keeps the structure (countries, cities, resorts, owner assignments). The owner manages their units and bookings. The guest searches, saves favourites, and books. Each role sees exactly as much as it needs.

Admin

  • CRUD for countries, cities, resorts, amenities
  • Assigning an apartment to a resort
  • Assigning an owner to an apartment
  • Blog and general settings management

Owner

  • Editing their units (photos, description, prices)
  • Last-minute and TOP offer flags
  • Overview of bookings for their apartments
  • Managing add-on services

Guest

  • Finding apartments (filters, map, date picker)
  • Favourites and booking history
  • Host profile on each apartment
  • One-click booking flow
Byty u moře — apartment listing with filters
Listing with filters — dates, guest count, and 18 amenity options.

What it does for the guest

On the home page the guest enters a resort and the number of people, and gets a listing where they can filter by amenities, dates, and stay type. Each apartment has a detail: gallery, parameters, amenities, host profile, add-on services, and a booking widget that calculates the price in real time, including everything they add to the stay.

Map view splits the screen between a listing and a map. The active filters work the same as in the list, markers on the map are clickable, so the guest sees both layers at once — where and what.

Byty u moře — apartment detail with gallery and booking widget
Apartment detail — gallery, parameters, amenities, host profile, and booking widget.
Byty u moře — map view with filters and markers
Map view — filters on the left, listing, markers with prices on the map.
Byty u moře — detail of the Al Hambra 1st Avenue resort
Resort detail — gallery, amenities, video, map, list of apartments in the resort.

Data model

The hierarchy is simple and scalable: country → city → resort → unit → booking. Each unit has an assigned owner, its own gallery, parameters, amenities, and add-on services. A booking carries the relation to the apartment and the guest and knows the total price, dates, status (pending / confirmed / cancelled / completed), and any add-ons the guest tacked on.

Country
  └── City
       └── Resort
            └── Property  ◀── Owner (User)
                 └── Booking  ◀── Guest (User)

Under the hood

Next.js 14+ (App Router)

SSR/SSG for SEO, React Server Components for listings and details.

Prisma + PostgreSQL

The entire data layer. Versioned migrations, a seed script for demo content.

Auth with roles

Admin / owner / guest. Per-row permissions — the owner sees only their apartments, the guest only their bookings.

Leaflet + clustered markers

Map view without Google's API fees. Clustering for denser resort zones.

Cloudinary

Progressive JPEG, blurhash placeholders, automatic variants per viewport.

Tailwind + shadcn/ui

Consistent components, dark mode ready (off for now, waiting on a decision).

How it went, phase by phase

  1. Phase 1 — Foundation

    Project setup (Next.js + Prisma + Postgres). Database schema and migrations. Auth system with roles. Public pages: homepage, listing, apartment detail, resort detail. Filtering and responsive design.

  2. Phase 2 — Administration

    Admin dashboard (CRUD for resorts, apartments, users, amenities). Owner dashboard — each owner edits their apartments, photos, prices. Image upload via Cloudinary. Blog CRUD with rich text.

  3. Phase 3 — Booking and interaction

    Availability calendar, booking flow with price calculation and add-on services, favourite apartments, split view with a map, public host profile.

  4. Phase 4 — Polish and growth

    Email notifications, SEO optimisation, image optimisation, ISR for listings, analytics. The project is still in active development — we keep adding features as the platform grows.

The project is alive

The platform will go live at the start of next quarter, but the work doesn't stop there. As new owners join after unit sales, tailored features get added; we keep integrating (payment gateways, email notifications, calendars) and tuning the experience based on how the platform behaves in production. It's development, not a shipped box.

Byty u moře is a good example of a project where going custom made sense. Not because nothing else existed, but because the client needed control, extensibility, and independent management for each owner. When the brief is specific, it pays to build it to fit.

— Evžen+420 734 385 505evzen@leonenko.cz

Get in touch

Have a similar project where the template ran out and you need to rebuild it? Write in. I enjoy these tailor-made platforms.