AI text and voice receptionist for Solstice Pilates. Phase 1: chat UI. Phase 2: Vapi voice.
| Phase | Description | Link |
|---|---|---|
| Phase 1 | Text chat UI | Watch |
| Phase 2 | Vapi voice calls | Watch |
| Architecture | System design walkthrough | Watch |
- Python 3.12+
- uv (recommended) or venv
- Docker (for local Redis)
- Google Cloud service account with Calendar + Sheets APIs enabled
- OpenRouter API key for local agent development
# Install dependencies
uv sync
# Copy env template and fill in values
cp .env.example .env
# Start Redis
docker run -d --name solstice-redis -p 6379:6379 redis:alpine
# Run API
uvicorn api.main:app --reload --port 8000See architecture.md for system design and tradeoffs.md for design decisions and alternatives considered.
| Variable | Description |
|---|---|
LLM_API_KEY |
LLM API key (OpenRouter recommended for dev) |
LLM_MODEL |
Model ID for Phase 1 PydanticAI agent |
VAPI_LLM_MODEL |
OpenAI model ID for Vapi voice (Phase 2) |
GOOGLE_SERVICE_ACCOUNT_JSON |
Path to GCP service account JSON |
GOOGLE_CALENDAR_ID |
Studio calendar ID |
GOOGLE_SHEET_ID |
Contacts sheet ID |
REDIS_URL |
Redis connection URL |
VAPI_API_KEY |
Vapi API key (Phase 2) |
VAPI_ASSISTANT_ID |
Vapi assistant ID — set after running scripts/vapi_setup.py |
VAPI_PHONE_NUMBER_ID |
Vapi phone number ID (Phase 2) |
LOGFIRE_TOKEN |
Logfire observability token |
PORT |
Server port (default 8000) |
BASE_URL |
Public URL for webhooks (ngrok in dev) |