Language Loops
Descripción general
Language Loops es una aplicación para practicar idiomas mediante ciclos breves y repetidos. En lugar de completar una lección larga, el usuario trabaja con una frase cada vez, vuelve a encontrarla en distintos contextos y consolida gradualmente el vocabulario y la pronunciación.
El proyecto se desarrolla como una plataforma web con servicios separados para la interfaz, la API y las funciones de IA. El trabajo de arquitectura actual se centra en sustituir el anterior stack de Firebase por PostgreSQL, Keycloak y servicios en contenedores.
Funciones del producto
El producto incluye:
- Modo Explore para practicar ciclos de idiomas ya preparados
- Modo Hunt para colecciones personalizadas
- Práctica centrada en una frase cada vez
- Generación y análisis de contenido educativo con Gemini
- Pronunciación de frases mediante síntesis de voz
- Seguimiento del progreso, las rachas y los logros
- Compatibilidad con inglés, español, italiano, francés, alemán, portugués, armenio y ruso
- Un blog sobre práctica de idiomas publicado mediante Mailoo
Algunas funciones personalizadas dependen del registro. La integración de Keycloak y la obtención de datos educativos desde la nueva API siguen en desarrollo en la interfaz web actual, por lo que el flujo para invitados y los adaptadores estáticos permanecen separados de la arquitectura objetivo.
Arquitectura
La arquitectura objetivo de Language Loops incluye:
- Una aplicación web con Next.js
- Una API HTTP con Hono
- Un servicio de IA independiente para Gemini
- PostgreSQL como base de datos principal
- Keycloak para la autenticación
- Paquetes compartidos para tipos, constantes y configuración
- Mailoo como CMS headless para el blog
- Un servicio de pagos compatible con varios proveedores
La implementación anterior utilizaba Firebase Authentication, Firestore, Google Cloud Functions y Pub/Sub. Este stack está marcado como obsoleto en el repositorio. La nueva API ofrece actualmente una estructura básica y un endpoint de salud, por lo que la migración de datos y flujos de producto se realiza por etapas y no se presenta como terminada.
Infraestructura y SRE
El proyecto cuenta con:
- GitLab CI para comprobaciones, pruebas, auditorías de dependencias y compilaciones
- Construcción de contenedores con Kaniko
- Imágenes Docker independientes para la aplicación web, la API y el servicio de IA
- Comprobaciones de calidad del código con SonarQube
- Renovate para actualizar dependencias
- Un entorno local con PostgreSQL y Keycloak mediante Testcontainers
- Configuración GitOps para el entorno de producción objetivo
- Almacenamiento en el servidor de las claves de Mailoo, Gemini y los proveedores de pagos
Redis se ha omitido deliberadamente del nuevo stack hasta que exista un caso de uso que realmente requiera una cola. Esto mantiene la arquitectura más sencilla durante la migración y evita introducir una dependencia de infraestructura antes de tiempo.
Retos de ingeniería
El principal reto de Language Loops es sustituir componentes estrechamente vinculados a Firebase y GCP por una arquitectura de servicios portable sin detener el desarrollo del producto.
Este trabajo incluye:
- Migrar de Firebase Authentication a Keycloak
- Trasladar los datos de Firestore a PostgreSQL
- Sustituir varias Cloud Functions por servicios de API e IA en contenedores
- Separar la documentación actual de los materiales obsoletos
- Conectar los flujos del producto a la nueva API en lugar de usar adaptadores temporales
- Proteger las claves de las integraciones de IA y pagos
- Conservar los ciclos de idiomas, la síntesis de voz y la personalización durante el cambio de plataforma
El proyecto combina el desarrollo del producto con una modernización gradual de la arquitectura, y distingue claramente los componentes pendientes de las funciones que ya están operativas.