ScratLabs
All work
Travel · Hotel booking platform·2026

Atrip Booking

A two-sided hotel booking platform for Atrip, a Vietnamese travel company: a management tool for partner hotels and an internal booking tool for Atrip's staff, sharing one real-time inventory so rooms never double-book.

  • React
  • NestJS
  • Booking Platform
Platform
Web App
Services
Web & Mobile Apps, Integrations
Year
2026
Real-timeshared inventory
01The challenge

Atrip, a flight-ticket agency, wanted to book hotels for its own customers without routing through external OTAs — which cost commission and hid the customer data. Partner hotels, meanwhile, needed a simple, affordable way to manage rooms and bookings. The hard part was serving both from one system without ever overbooking.

02Our approach

Two React portals talk to one shared NestJS + PostgreSQL API, so a single real-time inventory pool powers both sides. Partner hotels get an operations tool — booking search, a room-grid calendar, room types and physical units, a master/custom amenities catalog, seasonal price overrides with a 30-day preview, discount codes, VAT invoices, reports, staff management, and self-service onboarding with an e-contract flow whose profile edits queue for Atrip review. Atrip's internal team gets a fast OTA console — real-time room search across every partner showing net price plus markup, partner management, and pricing control built on one rule: a system-wide default markup (15%) that each hotel or individual booking can override, resolved as hotel.override ?? default. Every internal action is audit-logged, and count-based availability on the shared pool means the two sides never overbook.

03The result

Atrip gets a commission-free booking channel it owns end to end — real-time inventory, its own customer data, and pricing it controls — while partner hotels get a free operations tool in return for sharing live availability. A genuine win-win, architected to grow into later phases.

Outcomes
  • Two portals on one shared, real-time inventory — no overbooking
  • Net + markup pricing with per-hotel and per-booking overrides
  • Self-service hotel onboarding with review-gated e-contracts
Screen by screen
01

Internal operations sign-in

The staff-only side of Atrip. Admins sign in behind reCAPTCHA to approve hotels, manage markups and run bookings — every action written to an audit log.

02

Real-time room search

Atrip staff search every partner hotel at once. Each result shows the net rate next to the sell price with markup applied (+15%), flagged real-time — then 'book at this hotel' opens the flow and holds the room for 15 minutes.

03

Partner hotel management

One console over every partner: total partners, active vs paused, live room count and 30-day revenue up top, then a per-hotel table with status, effective markup, revenue, bookings and occupancy.

04

Markup & pricing control

Pricing is one rule: a system-wide default markup of 15% that any hotel can override. The screen resolves hotel.override ?? default, showing each hotel's effective markup, 30-day revenue and margin, and whether it runs on default or an override.

05

Partner contract templates

Atrip owns the e-contract templates used at onboarding — versioned HTML + Handlebars with required placeholders, marked default and active, previewable and archivable, so every partner signs from one source of truth.

06

Hotel portal sign-in

The partner side. Hotels sign in to manage rooms, pricing, bookings and guests — reCAPTCHA-protected, with a link to self-register and start receiving real-time bookings from Atrip.

07

Self-service onboarding

Becoming a partner is a single form — hotel name, contact, phone, email — with terms consent. Atrip only reviews once the hotel completes its profile and submits for approval from inside the portal.

08

Book a room for a guest

Inside the hotel portal, staff search their own live availability for a stay. A rich room panel — photos, bed setup, size and amenities — sits beside the price, and 'create booking' starts the guest form.

09

Room-grid calendar

A Gantt-style timeline of every physical room by day. Hovering a booking reveals guest, room, source and total at a glance; an empty cell starts a new booking. Colour-coded by status — booked, checked-in, checked-out, cancelled, no-show.

10

Room types & net pricing

Inventory is modelled as room types (template + amenities + one net price) and physical units. The type view shows capacity, bed setup, size, amenities and the net rate per night.

11

Physical room board

The unit side of inventory: every room grouped by floor and filterable by live status — vacant, occupied, arriving, cleaning, maintenance or locked — each card showing its type and current state.

12

Amenities catalog

Two layers: read-only master amenities from Atrip's catalog — pool, gym, restaurant, spa, airport shuttle and more — that any hotel can use, plus custom amenities each hotel manages itself and surfaces on its public profile.

13

Seasonal price overrides

Base price holds; date-based overrides for seasons, weekends and holidays layer on top per room type, with booking-time overrides taking top priority. A 30-day price calendar previews exactly what each night will cost.

14

Hotel profile & settings

The hotel's public profile — name, star rating, description, contact and photos — snapshotted onto every booking. Edits queue for Atrip review (24–48h) while guests keep seeing the current version.

ScratLabs

Let’s talk about your project.

Tell us what you’re building. We’ll reply with a clear, honest take on scope, timeline and price — usually within a day.

AI-first · Freelance pricing · Made for Europe