Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lea

Lea

Asistente de voz en el navegador. Un orbe minimalista, wake word, respuestas en streaming y TTS natural. Pensado para pantallas táctiles, kioscos y despliegues web.

image

Toca el orbe · di «Lea» · habla · escucha la respuesta


Qué hace

Lea es una interfaz solo voz: sin chat, sin teclado, sin ruido visual. El orbe cambia de color según el estado:

Estado Orbe Qué ocurre
Idle Azul profundo, respirando Escucha la wake word o espera un toque
Listening Azul brillante + ondas Captura tu frase
Thinking Morado girando Consulta a OpenClaw
Speaking Verde con ondas Responde con TTS en streaming
Error Rojo Mensaje breve y vuelve a idle

Barge-in: toca el orbe mientras responde o piensa para interrumpir y escuchar de nuevo.
Seguimiento: al terminar de hablar, Lea sigue escuchando unos segundos — no hace falta volver a decir «Lea».
Despedida: «adiós», «gracias Lea», «hasta luego», «chao» → vuelve a reposo.


Stack

  • React 18 + Vite 5 + Tailwind CSS
  • Web Speech API + VAD (Silero ONNX en el cliente)
  • OpenClaw como backend conversacional (SSE streaming)
  • OpenAI para STT/TTS (configurable)
  • Docker + nginx para producción con proxy seguro a OpenClaw, STT y TTS

Inicio rápido

git clone https://github.com/grisbope/lea.git
cd lea
cp .env.example .env   # edita PIN, claves y URLs
npm install
npm run dev

Abre http://localhost:5173. En producción necesitas HTTPS para micrófono y reconocimiento de voz.

Build

npm run build
npm run preview

Variables de entorno

Copia .env.example.env y ajusta:

Variable Descripción
VITE_OPENCLAW_URL URL del gateway (/openclaw detrás de nginx, o URL absoluta en dev)
VITE_OPENCLAW_KEY Bearer token del gateway
VITE_OPENCLAW_MODEL Agente OpenClaw (p. ej. openclaw/main)
LOGIN_PIN PIN de acceso (solo servidor, no va al JS)
AUTH_SECRET Secreto para firmar la cookie HttpOnly
VITE_LANG Locale de voz (es-ES)
VITE_FOLLOWUP_MS Ventana (ms) para seguir hablando sin repetir «Lea»
VITE_OPENAI_* Modelos de STT/TTS de OpenAI

En Docker, nginx inyecta la autenticación hacia OpenClaw y expone /stt/ y /tts/ como proxy same-origin hacia OpenAI. En Vercel o dev directo, configura VITE_OPENCLAW_URL y VITE_OPENCLAW_KEY apuntando a tu gateway.


Despliegue

Vercel (recomendado para frontend estático)

  1. Importa el repo en vercel.com.
  2. Framework preset: Vite.
  3. Añade las variables VITE_* en el panel de Environment Variables.
  4. Deploy.

El vercel.json incluido enruta la SPA y sirve los assets de VAD.

Docker (como en el VPS)

docker build -t lea .
docker run -p 8080:80 \
  -e OPENCLAW_UPSTREAM=http://openclaw:18789 \
  -e OPENCLAW_KEY=tu-clave \
  -e OPENAI_API_KEY=tu-clave-openai \
  lea

Echo Show / kiosco

  • URL de inicio → tu deploy HTTPS
  • Permisos: micrófono siempre, autoplay permitido
  • Pantalla siempre encendida, fullscreen
  • Primer toque activa el micrófono (política del navegador)

Estructura

src/
  App.jsx              # Máquina de estados de voz
  components/
    Orb.jsx            # Orbe animado
    Login.jsx          # Pantalla PIN
  lib/
    speech.js          # Reconocimiento + VAD
    tts.js               # Cola TTS por frases
    openclaw.js          # Streaming SSE
    wakeword.js          # Detección de activación
    intent.js            # Despedidas y filtro de eco
    auth.js              # Sesión local con PIN
public/vad/              # Modelos ONNX (Silero + ORT)

Licencia

MIT — ver LICENSE.


Hecho para conversaciones cortas, naturales y sin fricción.

About

Asistente de voz con IA, vinculado a OpenClaw.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages