# Bottle AI

Experiencia de voz con personajes asociados a botellas vía código QR.

## Arquitectura

```
QR → Producto → Personaje → Micrófono → STT → LLM → TTS → Audio + animación
```

- **Mobile**: React Native + TypeScript
- **Backend**: FastAPI + MySQL
- **IA**: providers intercambiables (OpenAI/Ollama, Google STT, ElevenLabs TTS)

## Inicio rápido

### Backend + MySQL

```bash
cp .env.example .env
# Completar API keys en .env
```

API: http://localhost:8000  
Docs: http://localhost:8000/docs

### Seed de demo

```bash
cd backend
python3 -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt
python ../scripts/seed_database.py
```
## Levantar BackEnd

```bash
uvicorn app.main:app --host 127.0.0.1 --port 8005 --reload
```

QR de demo: `BOT-8F72K9`

### Mobile

```bash
cd mobile
npm install
cp .env.example .env
```

## 1. Instalar Android Studio
```bash
sudo snap install android-studio --classic
sudo usermod -aG kvm $USER
```

## 2. Abrir Android Studio y completar el setup
```bash
Elige Standard installation.
Acepta licencias.
Deja que descargue el Android SDK (suele quedar en ~/Android/Sdk.
En Device Manager → Create Device → elige un Pixel → imagen API 34 o superior → Finish → Play.
```
## 3. Variables de entorno
```bash
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin
```
## 4. Verificar si el emulador esta corriendo
```bash
adb devices
```

## 5. Correr la APP
# npm run dev:android ejecuta el script: mobile/scripts/adb-reverse.sh
```bash
cd /mobile
npm run dev:android
```

## Flujo MVP

1. Home → Scanner
2. Escanear QR (`BOT-8F72K9` o ingreso manual)
3. Ver producto + personaje
4. Conversar por voz (manos libres): Hablar → silencio → STT → LLM → TTS → mic de nuevo
5. Detener corta el ciclo

Los umbrales de silencio / voz están en `mobile/src/config/constants.ts` (`VOICE_LOOP`). Ver `mobile/README.md`.

## Providers

| Servicio | Variable | Opciones |
|----------|----------|----------|
| LLM | `LLM_PROVIDER` | `openai`, `ollama`, `mock` |
| STT | `STT_PROVIDER` | `google`, `mock` |
| TTS | `TTS_PROVIDER` | `elevenlabs`, `mock` |

utiliza mock para hacer pruebas sin conectar a las Apis.

Las API keys nunca van en el mobile.
