Africa/Casablanca
ProjectsJuly 31, 2026

AI Operations Agent for a Multi-Property Hotel Portfolio

image
OneSai Hospitality manages a multi-property hotel portfolio across several major brands and needed daily operations oversight that didn't depend on a human reading every general manager report by hand. I'm building this as a portfolio of specialized AI agents, and took ownership of the entire stack: architecture, self-hosted infrastructure, security, and deployment pipeline, not just the automation logic. The first agent is live in production: it reads every incoming GM report and financial email overnight, verifies the numbers, flags exceptions, and hands ownership a finished morning briefing before their day starts. Every morning, the agent:
  • Ingests overnight reports: pulls emails from a dedicated operations inbox, pulling out PDF, Excel, and ZIP attachments as well as body-only narrative reports.
  • Extracts across formats: branches by file type (PDF via pdfplumber, Excel via openpyxl/pandas, Word via mammoth, plain-text email bodies) into one normalized structure.
  • Classifies and routes per property: deduplicates by content hash, then uses an LLM classification step to attribute every file to the correct hotel.
  • Runs deterministic audit checks: verifies occupancy math, ADR/RevPAR calculations, and flags every cash adjustment or comp room against a strict two-folio policy, before any AI summarization touches the numbers.
  • Writes the narrative briefing: an AI writer agent drafts the human-readable summary only after the deterministic audit has already produced the hard numbers, so figures in the briefing are computed, never generated.
  • Delivers and tracks: renders the briefing to HTML, emails it out, and logs the run so every morning's output is auditable against what was actually received.
Ingestion pipeline, showing load hotel roster, run metadata, fetch Gmail, flatten, decompress ZIPs
File-type branch: PDF, Excel, Word, and plain-text extraction paths, then LLM classification
Deterministic audit runs first, an AI writer agent drafts the narrative only after
This isn't a script running on someone else's platform. I designed and operate the infrastructure it runs on:
  • Self-hosted orchestration on a Hetzner VPS, running the workflow engine that executes and schedules every agent.
  • Reverse Cloudflare Tunnel in front of it, with Cloudflare Access gating every request: no exposed ports, token-based API access, and full audit logging of who touched what.
  • Separate dev and prod environments, with schedules disabled in dev so testing never triggers a real morning briefing.
  • Git as the single source of truth for every script, flow, and resource definition. Nothing is hand-edited in the production UI.
  • CI/CD via GitHub Actions: pushes to the dev branch deploy manually for testing; merges to main authenticate through the same Cloudflare Access tunnel and auto-deploy straight to production.
Separate dev and prod workspaces on the self-hosted orchestration instance
Agent configuration panel showing schedule, timezone, and per-run inputs
Two decisions mattered most: Deterministic math, AI narrative, never the reverse. Occupancy, ADR, RevPAR, and every dollar adjustment are computed by plain code before any LLM sees them. The AI's job is to write the summary and explain what happened, not to compute what happened. This is the difference between a report you can hand to an accountant and a report that merely sounds plausible. Test phase before autonomy. The agent currently drafts every briefing and recommended response but doesn't contact GMs or vendors directly. The owner reviews and approves during the initial rollout window before automation is extended. That staged rollout was a deliberate part of the design, not a limitation.
Delivered briefings landing in the operations inbox every morning
Agent 1 is live and producing daily briefings in production. It's the first of a larger, multi-agent roadmap covering revenue, compliance, procurement, and guest communication for the same portfolio, each one landing on the same self-hosted, audited infrastructure rather than a pile of disconnected point tools. This project reflects full end-to-end ownership: architecture, backend automation, AI system design, and the DevOps and security layer underneath it, not just "the AI part."

Related projects

Automated Daily AI Report, Built for a Non-Technical Owner

Automated Daily AI Report, Built for a Non-Technical Owner

A self-serve daily reporting tool for an Amazon seller: Google Sheets in, an AI-written summary out, delivered by email on a schedule she controls herself. Built end to end on Cloudflare Workers for $5/month.
Kasb: A Desktop Earnings Tracker for a Fellow Freelancer

Kasb: A Desktop Earnings Tracker for a Fellow Freelancer

A local-first desktop app that turns a messy Upwork CSV export into real profit and loss: gross earnings, fees, connects ROI, and client breakdowns, with zero cloud and zero recurring cost.
The Legal Layer: AI Contract Review for a Legal Directory Platform

The Legal Layer: AI Contract Review for a Legal Directory Platform

Backend engineering on a members-only AI tool that explains a contract in plain English before you sign it, live at justisconnection.com/legal-layer.
Daily Property Listing Feed from a Major Online Marketplace

Daily Property Listing Feed from a Major Online Marketplace

An Apify actor that pulls new property listings from a large online marketplace every day, enriches each one with council-level data, and feeds a live Google Sheet with zero duplicate rows.
24/7 AI Bot Platform with SaaS Dashboard and Multi-Bot Workflows

24/7 AI Bot Platform with SaaS Dashboard and Multi-Bot Workflows

Designed and built a full-stack SaaS dashboard and backend in Python to manage a 24/7 AI bot platform. Integrated OpenAI with Google Sheets, WordPress, and custom rewriting tools.