Portfolio case study

Booking automation for hospitality and local services.

Luna Blu Retreat is an end-to-end demo for turning stay requests into tracked opportunities: availability checks, estimated quote, AI summary, HubSpot CRM, email confirmation and operational logs.

4 stays
suite, room, apartment, villa
5 extras
spa, transfer, breakfast, experiences
9 tests
booking engine validated
luna-blu-retreat-booking-demo live
Luna Blu Retreat demo landing with direct hospitality booking flow.
// HTML · CSS · JavaScript · n8n · OpenAI · HubSpot · Resend

Real problem

Properties receive scattered requests and manually rebuild availability, price and follow-up.

Hotels, B&Bs, rentals and local services often handle requests from websites, email, phone and WhatsApp. The team must check dates, guests, extras, price and sales priority before it can even reply. The demo shows how to turn that repetitive work into a measurable operating flow.

Solution

A controlled booking engine before CRM automation.

The important part is not only the form. The frontend calculates availability and quote with explicit rules, then sends n8n a clean payload for AI summary, CRM and email.

[ 01 ]

Availability and booking rules

The booking engine reads a mock JSON calendar and validates check-in, check-out, nights, capacity, blocked dates, minimum stay and accommodation type.

  • Check-out excluded from occupied nights
  • Maximum capacity by accommodation
  • Configurable minimum stay
[ 02 ]

Quote with extras

The demo combines accommodation, guests and extra services. Extras can be priced per booking, per guest, per night or per guest per night.

  • Room total plus extras
  • Spa, transfer, breakfast and experiences
  • Manual review above value threshold
[ 03 ]

CRM and automatic confirmation

n8n validates the payload, generates a structured AI summary, creates or updates the contact, opens a deal, creates HubSpot tasks and notes, and sends a cautious email confirmation.

  • Contact, Deal, Task and Note
  • OpenAI structured summary
  • Resend email with request received

Architecture

From date search to CRM, with non-binding confirmation.

01

Landing

Static Luna Blu Retreat interface with date search, accommodations, extras and guest data.

02

Booking engine

JavaScript validates calendar, availability, estimated price and the payload prepared for n8n.

03

n8n + OpenAI

The webhook validates input, enriches the request and produces an AI summary in structured JSON.

04

CRM + email

HubSpot receives contact, deal, task and notes; Resend sends confirmation that the request was received.

Guest
Luna Blu Retreat
Booking engine JS
n8n Webhook
OpenAI summary
HubSpot + Resend

Proof of work

What this project proves technically.

The project combines testable frontend logic and server-side automation. This reduces the risk of sending incomplete requests, inconsistent prices or context-free leads to the CRM.

Separate booking engine

Date, night, availability and pricing logic lives in a dedicated JS module, not scattered across the UI.

Controllable mock calendar

Accommodations, blocked dates, thresholds, extras and policies live in JSON for repeatable and testable demos.

Estimated pricing

The quote combines nightly rate, nights, guests and extras with different pricing modes.

Clean n8n payload

The frontend sends guest, booking, extras, estimated total, privacy consent, source and timestamp.

Operational AI summary

OpenAI produces request type, lead priority, value range, suggested follow-up and CRM note.

Automated tests

The suite covers 9 cases: dates, nights, blocked dates, capacity, minimum stay, extra pricing and payload.

Beyond the demo

Edge cases handled before connecting a real client.

01

Invalid dates

Check-out equal to or before check-in, past check-in and stays below minimum nights are blocked.

02

Booked dates

A night inside blockedDates makes the accommodation unavailable, while check-out only on a blocked date remains valid.

03

Guests over capacity

Requests above configured capacity are excluded before they are sent to the workflow.

04

Unavailable extras

Services with unavailableDates are not included in the quote for those dates or are routed to review.

05

Privacy consent

The n8n webhook validates privacy_consent before proceeding with CRM and email.

06

AI, CRM or email errors

Unparseable AI output, unavailable HubSpot or failed email lead to logs and manual review.

Stack

Tools used in the demo.

The stack is designed for a realistic but lightweight demo: static landing, testable booking engine, importable n8n workflow, HubSpot CRM and email provider.

Demo frontend

HTML, CSS, vanilla JavaScript, booking form, hash routing, accommodations, extras and quote summary.

Booking logic

Mock calendar JSON, date validation, availability check, capacity, minimum nights, extra pricing.

Automation

n8n webhook, payload validation, OpenAI structured summary, lead priority and manual review.

CRM and follow-up

HubSpot Contact, Deal, Task, Note, Resend email confirmation, final request log.

Need a similar system?

I can adapt this architecture to hospitality, local services and quote requests.

The demo uses a fictional retreat, but the same pattern works for hotels, B&Bs, spas, professional studios, local tour operators, rentals, consultants and services that require availability or a quote.

Prefer email? Reach me at luigi.scorzelli87@gmail.com