Hernán Arteaga

Estudiante de Ingeniería de Sistemas | Full-Stack Developer

~/home/projects/panda-ai

PandaAI

Plataforma interactiva para niños con voz en tiempo real y panel parental

El Problema

En este proyecto universitario en equipo, queríamos construir un juguete interactivo con voz y una app móvil para que los padres puedan configurar rutinas y monitorear la actividad de sus hijos. Mi responsabilidad principal fue programar la API REST en Node.js, modelar la base de datos con TypeORM y conectar el cliente móvil en React Native. El reto era lograr que el procesamiento de audio fuera rápido y que todo el backend fuera reproducible localmente con Docker.

Stack Tecnológico

  • React Native
  • Expo SDK 54
  • TypeScript
  • Node.js
  • Express 5
  • TypeORM
  • PostgreSQL
  • Socket.io
  • Docker Compose
  • Groq Whisper
  • ElevenLabs

Implementación Técnica

1. API REST y Base de Datos Relacional

Modelé las entidades en PostgreSQL (usuarios, perfiles infantiles, rutinas y registros de uso) usando TypeORM para manejar las migraciones de esquema. La API corre sobre Express 5 con validación estricta de payloads mediante Zod y autenticación por tokens JWT.

2. Pipeline de Voz e Interacción en Tiempo Real

Conecté Groq Whisper para transcripción de audio ultrarrápida y ElevenLabs para sintetizar respuestas de voz con un tono adecuado para niños. La comunicación entre la app móvil y el servidor se apoya en WebSockets (Socket.io) para transmitir eventos y estado sin sobrecargar peticiones HTTP.

3. Depuración en Dispositivos Físicos y Docker

Al probar la app en un teléfono físico, la red WiFi local aislaba las conexiones entre dispositivos. Para solucionarlo, configuré un reenvío de puertos por USB con adb reverse tcp:3000 tcp:3000, permitiendo al teléfono consumir la API local de mi máquina sin fricción. Además, empaqueté la API y PostgreSQL en un docker-compose.yml para que cualquier integrante del equipo pudiera levantar el entorno en un solo comando.

Proyecto de innovación universitario. Código fuente disponible en GitHub.