Skip to content
Nafiz Iqbal
Projects

Direct-booking platform for a hotel

Hotel The Manha

A boutique hotel in Dhaka took every booking by phone or walk-in. I designed and built its direct-booking platform: a guest site with a guided reservation flow, and a backend that runs rooms, availability, invoices, and email.

Ownership
Client work
Organisation
Hotel The Manha Ltd, Dhaka (solo engagement)
My role
Designer and full-stack engineer, solo
Status
Delivered in 2025
  • TypeScript
  • Next.js
  • Express
  • MongoDB
  • Resend
Hotel The Manha website shown on a desktop and a phone

Overview

Hotel The Manha sits in Purana Paltan, the commercial centre of old Dhaka. Guests booked by phone or in person. There was no online channel and no way to show rooms to travellers searching for them.

The goal was a guest-facing site that feels as considered as the hospitality it sells, and a backend that runs the hotel's real operations: rooms, availability, bookings, guest verification, and email. I designed and built both sides.

Role and ownership

What I personally did

  • Interface design for the guest site and booking flow.
  • Next.js guest site with a guided date and guest picker reused across four surfaces.
  • Express and MongoDB backend for rooms, availability, blocked dates, seasonal pricing, and bookings.
  • Branded PDF invoices and transactional email through Resend.

Constraints

  • Solo engagement: design, frontend, backend, and deployment by one person.
  • Availability depends on several layers at once: confirmed bookings, dates the hotel blocks, seasonal price overrides, and room status.
  • Most guests arrive on phones, so the booking flow had to work at 375px with no horizontal overflow.

Solution

One guided component turns check-in, check-out, and guest count into a single flow. Each field opens a popover under itself with a step rail across the top, and a live summary counts nights as you go. The same component powers the home hero, the room page, the reservation form, and the listing filters.

The API filters each room's bookings at the database level, and the client merges those ranges with per-date overrides to price each night individually. On submission, the server checks availability again before confirming.

A single branded PDF generator feeds the download endpoint, the confirmation email attachment, and the booking-management page.

  1. Guest site

    • Next.js

      Guided date and guest picker

    • Manage booking

      Email + reference lookup

  2. API

    • Express API

      Availability re-check on submit

    • Invoice generator

      One PDF, three surfaces

  3. Data and email

    • MongoDB

      Rooms, bookings, overrides

    • Resend

      Confirmation with PDF attached

Booking path from the guest site to confirmation.
Booking management page with receipt download and cancellation
Branded PDF invoice with an itemised stay and total

Key decisions

  1. Re-check availability at submission

    Two guests can look at the same free night at the same time.

    Considered
    Trust the availability the calendar showed when the page loaded.
    Chose
    The server checks availability again at the moment of submission and rejects the booking if the dates were taken.
    Trade-off
    A guest can occasionally lose dates at the last step, which is far better than a double-booked room.
  2. One invoice generator for every surface

    Guests need proof of booking in the email, on the success page, and later when managing the booking.

    Considered
    Separate templates for the email, the download, and the web receipt.
    Chose
    One backend PDF generator feeds all three surfaces.
    Trade-off
    The email path depends on PDF generation, but an invoice change lands everywhere at once and the surfaces never drift apart.
  3. Lookup needs email and reference together

    Guests return to view or cancel a booking without an account.

    Considered
    Look up bookings by email address alone.
    Chose
    Require the booking reference as well as the email.
    Trade-off
    One more field to type, but an email address alone reveals nothing about anyone's stay.

Outcome

  • The hotel takes bookings directly online instead of relying only on phone calls and walk-ins.

  • Invoice changes land in the email, download, and management page at once.

  • Responsive down to 375px with no horizontal overflow, checked with device-emulated audits.

Reflection

Date pickers are where booking sites usually break. Building one component and reusing it everywhere meant fixing a bug once instead of four times.