La app móvil que 7M de cubanos usan para conectarse a internet

La telecom nacional de Cuba necesitaba una sola superficie móvil para todo lo que toca un abonado — cuenta, saldo de internet, autenticación al portal cautivo. Construí la app Flutter de punta a punta sobre el backend Spring Boot al que el equipo estaba migrando.

Cliente
Etecsa (telecom nacional de Cuba)
Rol
Ingeniero Móvil · Ingeniero Backend
Año
2024
Período
Build móvil multi-trimestre + migración backend en curso
Flutter Dart Java Spring Boot Jakarta EE PostgreSQL Docker

Problema

La mayoría del acceso a internet en Cuba pasa por el servicio Nauta de Etecsa: te autenticas contra un portal cautivo para conectarte, y gestionas tu plan, saldo y horas de bonificación desde un portal de usuario aparte. Durante años eso significó dos flujos de navegador de escritorio que no compartían estado. Los abonados necesitaban una sola superficie móvil donde pudieran iniciar sesión en el portal cautivo, ver cuánto les quedaba, y manejar su cuenta — sin malabarear navegadores, copiar y pegar credenciales, ni interpretar respuestas HTML crudas.

En paralelo, las plataformas operativas detrás de esas superficies — que sirven a aproximadamente 7 millones de abonados — estaban siendo reconstruidas desde un stack heredado de Javax a Spring Boot. La app tenía que aterrizar sobre un backend que se movía activamente debajo.

La superficie móvil

Construí la app móvil Nauta de punta a punta en Flutter, como único desarrollador móvil. Cuatro flujos principales:

Decisiones que vale la pena mencionar:

El backend con el que habla

El equipo de Etecsa — yo incluido — migró los módulos Javax heredados detrás de esos portales a Spring Boot, módulo por módulo, detrás de un contrato de API compartido. La decisión no obvia: el Javax heredado y los nuevos servicios Spring Boot corrieron lado a lado en la misma red operativa, ruteados por feature flag en vez de por endpoint, para mover un solo equipo, validar, y solo después expandir.

No hubo fin de semana de migración. Hubo una secuencia de martes seguros.

Loading diagram…
La app Flutter se apoya en el mismo backend ruteado por feature flags que el equipo migró módulo por módulo

Resultado

La app móvil le dio a los abonados un único lugar para todo lo que antes hacían entre dos flujos de navegador — las tareas diarias (iniciar sesión, ver saldo, ver horas de bonificación) se convirtieron en operaciones de una pantalla y un tap. Detrás, los módulos ya migrados a Spring Boot mostraron una mejora de throughput de 3× contra el baseline heredado. El personal operativo notó tiempos de respuesta más rápidos sin que nadie les contara por qué. Cero caídas durante la ventana de migración para los módulos que enviamos.

El patrón de “sin fin de semana de migración grande” ahora es el default del equipo para cualquier trabajo de modernización — y la app sigue evolucionando contra el backend al que el flag la rutea.

Tecnologías usadas

Flutter Dart Java Spring Boot Jakarta EE PostgreSQL Docker
Visual

Pantallas

Pantalla de entrada de Nauta — selector entre Portal de Usuario y NavegaciónLogin al portal cautivo — credenciales para autenticarse contra el Wi-Fi de NautaLogin al portal de usuario con captcha — acceso a la cuenta personal de NautaDashboard de la cuenta — tipo de plan, estado, horas de bonificación, saldo
Seguir explorando

Más proyectos