← Back to work
Demo ProjectDemo

Azure Sands · Daily Ops Digest

A four room property is not somebody's full time job. It gets run from a phone between other work, and an admin dashboard only helps the person who remembers to open it. The facts that decide whether a day makes or loses money are already in the database: a guest arriving this afternoon whose payment still says pending, a booking that has held a room off the market for six days, an inquiry from Tuesday nobody answered, four empty nights next week that are still discountable today and worthless on Friday.

Azure Sands · Daily Ops Digest preview

Overview

An eight node n8n workflow on the Azure Sands database. At 6am Manila time it runs two Postgres queries in parallel, one for today's movements and one for the week ahead, merges them into a single item, and a Code node turns that into an HTML email. A language model writes the two sentence opening brief and nothing else. Gmail sends it.

My role

  • n8n workflow design
  • Postgres queries & digest logic (Code node)
  • HTML email build & AI brief prompt

The problem

A four room property is not somebody's full time job. It gets run from a phone between other work, and an admin dashboard only helps the person who remembers to open it. The facts that decide whether a day makes or loses money are already in the database: a guest arriving this afternoon whose payment still says pending, a booking that has held a room off the market for six days, an inquiry from Tuesday nobody answered, four empty nights next week that are still discountable today and worthless on Friday.

What I built

  • Subject line carries the whole summary, for reading on a phone
  • Action list ranked money first, then inventory, then reputation
  • Sends on quiet days too, so silence always means broken

Tools used

  • n8n
  • PostgreSQL
  • Supabase
  • Gmail
  • OpenAI

Challenges

  • Keeping every calculation in the Code node and letting the language model write only prose. It receives finished numbers, never booking rows, so it cannot recompute occupancy or invent an amount.
  • Casting every date to text in SQL. A Postgres date read on a UTC server turns 30 July into 29 July in Manila, and the whole digest then reports on the wrong day.

Outcome

  • Eight node workflow: schedule, two parallel Postgres queries, merge, digest builder, AI brief, Gmail send
  • One email covers arrivals, departures, guests staying, seven day occupancy and revenue to date
  • Priority list surfaces unpaid arrivals, stuck bookings, unanswered inquiries and rooms with no nights sold
  • The AI brief continues on error, so a dead API key drops one paragraph and the digest still sends

Project links

Private build. Ask me for a walkthrough.

martejohnvincent13@gmail.com