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

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



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.