https://github.com/paritoshk/rosewood-ucha
Voice-first hotel dispatch — staff speak a request and Üchá transcribes it, routes it by department and priority, enriches it with guest context, and posts it to a live board.
https://github.com/paritoshk/rosewood-ucha
anthropic claude dispatch elevenlabs hospitality nextjs typescript voice-ai
Last synced: about 2 months ago
JSON representation
Voice-first hotel dispatch — staff speak a request and Üchá transcribes it, routes it by department and priority, enriches it with guest context, and posts it to a live board.
- Host: GitHub
- URL: https://github.com/paritoshk/rosewood-ucha
- Owner: paritoshk
- Created: 2026-05-16T20:25:00.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-17T03:07:18.000Z (2 months ago)
- Last Synced: 2026-05-17T03:26:51.227Z (2 months ago)
- Topics: anthropic, claude, dispatch, elevenlabs, hospitality, nextjs, typescript, voice-ai
- Language: TypeScript
- Homepage: https://ucha-rosewood.vercel.app
- Size: 382 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
Üchá
Voice-First Hotel Dispatch
Live Demo ·
How It Works ·
Voice Modes ·
Demo ·
Development
---
Üchá is a voice-driven dispatch board for hotel staff. Speak a request and it is
transcribed, routed to the correct department with a priority and ETA, enriched
with guest CRM context, and posted to the live dispatch board.
**One button. One voice. Zero dropped requests.**
## How It Works
1. **Capture** — staff hold the voice button and speak a request.
2. **Transcribe** — `POST /api/voice` sends the audio to ElevenLabs Scribe
speech-to-text (`scribe_v1`).
3. **Route** — the transcript is passed to Claude which uses
tool-calling to return a structured dispatch (department, priority, summary,
room, ETA). Guest tier is resolved from the CRM lookup and VIP requests are
escalated.
4. **Acknowledge** — `POST /api/speak` synthesizes Üchá's spoken confirmation
with ElevenLabs text-to-speech (`eleven_flash_v2_5`) and plays it back.
5. **Dispatch** — the request is stored and appears on `/dispatch`, which polls
`/api/requests` every few seconds.
## Voice Modes
The top bar offers two ways to talk to Üchá, switchable with the toggle:
- **Hold to speak** (default) — one-shot push-to-talk `VoiceButton`. Hold,
speak, release; the pipeline above runs once.
- **Live agent** — `ConversationButton`, a continuous ElevenLabs Conversational
AI session. Requires a pre-created agent (`ELEVENLABS_AGENT_ID`); this app
never creates agents.
## Stack
| Layer | Technology |
| ---------- | ---------------------------------------- |
| Framework | Next.js 16 (App Router) · React 19 |
| Language | TypeScript |
| Styling | Tailwind CSS v4 |
| Voice | ElevenLabs (STT + TTS) |
| AI | Anthropic Claude |
| State | Upstash Redis (optional) |
| Deploy | Vercel |
## Demo
Visit `/demo` (or "Demo Mode" in the top bar) to run scripted scenarios through
the real pipeline — each one shows the transcribe → route → acknowledge steps
and speaks the acknowledgment aloud.
Try _"Room 412 needs extra towels"_ — guest Eleanor Whitfield (Pinnacle VIP) is
resolved from the CRM and the request is auto-escalated.
## Environment
Create `.env.local` with:
```bash
ANTHROPIC_API_KEY=... # Claude routing
ELEVENLABS_API_KEY=... # speech-to-text + text-to-speech
ELEVENLABS_AGENT_ID=... # required only for the live agent mode
```
## Development
```bash
pnpm install
pnpm dev # http://localhost:3000
pnpm lint
pnpm test
pnpm build
```
## License
MIT