All projects

PULSE

AI guest-experience control centre for resorts

Role
Solo build, Kuriftu Hospitality Hackathon (ALX Ethiopia)
Timeline
April 2026
Built with
React · TypeScript · FastAPI · Gemini · WebSockets · SQLite
PULSE: Control centre
Control centre. Alert queue on the left, risk evaluation for Room 402 on the right.

The problem

Resorts usually learn a guest is unhappy from a front-desk complaint or a bad review, when the stay is already ruined and the only fix is a refund. The warning signs exist earlier (no door activity for hours, a skipped meal, a late room-service order) but they sit in separate systems (door locks, POS, Wi-Fi, phone) that nobody watches together.

What I built

A live control centre that scores every guest's risk of a bad stay from those small signals and tells staff what to do before the guest complains.

Live alert queue
Guests are ranked by a 1–10 risk score and re-sorted as new signals arrive over a WebSocket, with no polling.
Risk evaluation panel
For the selected guest it shows why the alert fired, the raw signals behind it, similar past cases and how they ended, and a confidence figure.
Recommended actions
Each action is tagged by team (concierge, marketing, front desk) with a predicted success rate. One click resolves the alert and logs it on the guest's timeline.
Hybrid scoring
Fixed rules own the number: a service delay over 30 minutes adds 4, a direct complaint adds 5. Gemini only explains the risk and proposes actions, grounded in the hotel's SOP document and the three closest matches from 200 historical recovery cases.
Simulation engine
A background ticker generates guest activity every 10 seconds, with controls to escalate one guest, trigger a kitchen outage that cascades across rooms, or reset, so the whole system can be demoed without a real hotel.
Onboarding and guided tour
A first-run walk through the three panels for someone seeing it for the first time.

My role

Solo developer. I designed the product, built the React front end and the FastAPI back end, wrote the rule engine, state engine, retrieval service and simulator, and designed the control-centre UI.

Tech stack

Front end
React 19, TypeScript, Vite 6, Tailwind CSS v4, Base UI / shadcn, Framer Motion, Recharts, Sonner
Back end
Python 3.12, FastAPI, Uvicorn, SQLModel
Data
SQLite in WAL mode, so simulator writes don't lock API reads
AI
Gemini 2.5 Flash in JSON mode; Gemini embeddings with NumPy cosine similarity for retrieval (no vector database)
Real time
Native WebSockets
Safety rails
SlowAPI rate limiting, and a rule-based fallback when the model call fails

Screenshots

PULSE: Onboarding
Onboarding. The four-step intro that frames the product in one line.
PULSE: Guided tour
Guided tour. First-run tour highlighting the live alert queue.
PULSE: Full risk engine
Full risk engine. Raw signals, similar historical cases, recommended actions per team, and the simulation controls.

What I'd improve next

Make AI failures visible
When the model call fails the panel shows fallback content that looks like a real analysis. It should say "rule-based only" so staff know what they are reading.
Connect real data sources
Everything runs on the simulator today. The ingestion endpoint exists; the next step is adapters for an actual PMS, POS and door-lock feed.
Cache embeddings
Precomputing and storing case embeddings would cut analysis latency and API cost.
Real tests
Proper assertions for the rule and state engines in place of a script that prints results.
A working rules editor
It would let managers tune thresholds without a developer.
Measure outcomes
The predicted success rates are illustrative. Tracking which actions actually prevented a complaint would let the system learn them.
Next projectAYATEI Initiative

Have a manual process eating your time?

Let's automate it. Tell me what's slowing your business down and I'll help turn it into a better system.

Hiring? Email me or download my CV.