Direct-booking platform for a Bangladeshi hotel chain — a corporate site, a booking site per property, a shared API with SSLCommerz payments, and an admin dashboard that runs rooms, rates and content for all seven hotels.
(What the hotel got)
- Guests book and pay online on each hotel's own site.
- Hotel staff update rooms, rates and content themselves — no developer, no redeploy.
- Sreemangal back online and Chattogram added, with no booking records changed.
Hotel D'more runs seven properties across Bangladesh and sells rooms on its own platform: a corporate site, a booking site per hotel, one Express and Prisma API over MySQL, and an admin dashboard. I took over the running platform to bring the two newest hotels online and move each hotel's features, services and attractions into the database — without disturbing the five hotels already taking bookings.
- Role
- Full-stack developer
- Type
- Freelance
- Year
- 2026
- Stack
- Next.js · Express · Prisma · MySQL · SSLCommerz
- Result
- 7 hotels · online booking & payments · content edited without a developer
(By the numbers)
- hotels on one platform
- 7
- sites and apps running on one shared system
- 10
- automatic tests, one for each requirement
- 46
- bookings lost or changed during the upgrade
- 0
(How it works)
Animated illustration of the real flow, with sample data — not a live system.
(What I built)
- 01Corporate site with destination and date search across every property, plus offers, member benefits, blog, press, careers and corporate enquiries
- 02A booking site per hotel: room cards with regular and discounted rates, a live pricing summary, and a choice of full payment or 50% in advance
- 03SSLCommerz checkout with a separate merchant account per property — success, failure and cancellation each return the guest to their own hotel with the booking and room inventory updated
- 04Per-date inventory: every room type carries its own units to sell, standard price and discount price for each night, edited from a calendar with bulk updates
- 05Admin dashboard covering hotels, rooms, the rate and availability calendar, amenities, reservations, and site content — press, meetings, media, careers and client feedback
- 06Hotel Features, Hotel Services and Nearby Attractions managed per hotel from the dashboard — add, edit, reorder and upload images — and live on that hotel's site within about a minute
Show 1 moreShow less
- 07Staff accounts assigned to specific hotels, with content changes scoped so editing one property never touches another
Process
(Problem → what I did)- 01
Problem
The hotel sites were copies of one codebase that had drifted apart, so one change to a shared section had to be made, built and checked seven times.
What I did
- Moved the shared sections into the database behind one admin, so content is edited in one place instead of seven codebases.
- Built one shared admin manager for Features and Attractions — both are hotel-scoped lists with images — so a fix to either lands in both.
- 02
Problem
Five hotels were taking live bookings, and the brief said none of them could change — yet making their content dynamic meant rebuilding and redeploying every one.
What I did
- Moved the hard-coded content (20 features, 24 attractions, 139 service assignments, 124 images) into the database, then compared every section of every live hotel against production until they matched item for item.
- Covered the brief with 46 automated checks, each naming the requirement it proves.
- 03
Problem
The Sreemangal site had been deployed from another property's build, still carried that property's identity across 34 files, and returned server errors.
What I did
- Rebuilt Sreemangal under its own identity and added the Chattogram site the same way, each on its own merchant account through one parameterised payment handler instead of another copy.
Show all 6 stepsShow less
- 04
Problem
There was no staging environment and no migration history, so any schema change would run straight against live reservations.
What I did
- Built a complete local copy of the platform — every app, the API and a restored database — so each change was proven against real data first.
- Added the new data models with a reviewed, purely additive SQL migration (three new tables, zero drops), rehearsed on a restored production backup.
- 05
Problem
The production server couldn't build the apps: its packages were installed for Windows, and it ran out of memory generating the database client.
What I did
- Built every app locally with each site's exact production settings and verified each build before upload.
- Deployed behind a maintenance page in gated steps: backup verified by a full restore, every table checksummed before and after.
- 06
Problem
A payment refused by the gateway showed guests a generic error and left an unpaid booking behind.
What I did
- Booking now asks the gateway for a payment page first and only creates the reservation when one comes back — and shows the guest the gateway's real reason when it refuses.
How it's built
The moving parts, from the people using it down to the data.
Guests & hotel team
Corporate site
hoteldmore.com · search across all hotels
7 hotel booking sites
one subdomain per property
Admin dashboard
rooms, rates calendar, content
Shared API
Express + Prisma API
rooms · per-date inventory · bookings · payments
Data & payments
MySQL
one database for all properties
SSLCommerz
a merchant account per hotel
Upload store
hotel images & media
The product
10 screens from the real product. Click any screen to see it full size.
(On mobile)
Works just as well on the phone.
Every screen was built and checked on small screens too — the same product adapts cleanly from phone to desktop.
(Shipped)
Everything in the brief is live on production.
Hotel content that previously needed a developer and a redeploy is now edited by the hotel team from the dashboard, Sreemangal is back online on its own merchant account, and the Chattogram site is built and ready to launch. Across a deployment that touched ten applications and a live booking database, the before-and-after checksums show that not one booking, payment, user or inventory record changed.
