# Dad Reminder App project rule

## Project goal
Build a small Python FastAPI server that receives a Twilio SMS, triggers a Vapi outbound reminder call to dad, and sends a confirmation SMS back to me.

## Source of truth
Before making implementation decisions, read `spec.md` and follow it exactly unless I explicitly override it.

## Stack
- Python 3.11+
- FastAPI
- uvicorn
- Twilio
- Vapi
- httpx
- pydantic-settings
- python-dotenv

## Required implementation behavior
- Match the project structure defined in `spec.md`
- Keep route handlers thin
- Put business logic in helper modules
- Use async `httpx`, not `requests`
- Use `pydantic-settings` in `config.py`
- Do not read env vars directly with `os.environ.get()`
- Twilio webhook input is form data, not JSON
- Always return valid TwiML XML from the SMS webhook
- Prefer small, focused modules and typed functions

## Working style
- Before editing, inspect the current repo state and compare it against `spec.md`
- When implementing, finish one file cleanly before moving to the next
- After changes, run the smallest useful validation step
- If a requirement in `spec.md` is ambiguous, flag it briefly and choose the safest implementation
- Do not invent extra features unless they directly help reliability or testing

## Testing expectations
- Verify `/health`
- Verify unknown-number rejection
- Verify empty-body handling
- Verify Vapi failure path
- Verify Twilio response format
