Pasar al contenido principal
osky
Enviado por Oscar Hernández el
Sobreviviendo al CCXP: Arquitectura Offline-First para la Activación de Free Fire
Categoría
Desarrollo

¿Qué rollo, raza? Acaba de pasar el CCXP este fin de semana y si se dieron una vuelta por allá, seguro vieron el absoluto desmadre (en el buen sentido) que se armó en el stand de Free Fire con su activación de la "Casa del Yeti". Todo el mundo sacándose fotos, participando y respondiendo encuestas en las tablets. Lo que ustedes veían era una experiencia súper fluida; lo que yo veía era un ejercicio de supervivencia arquitectónica que tuve que codear en Flutter.

Verán, cuando los de marketing o las agencias diseñan estas activaciones, siempre se imaginan un mundo ideal donde las tablets están conectadas a un Wi-Fi de 10 Gbps y todo se sincroniza en la nube mágicamente. ¡Pamplinas! Los que llevamos años en esto sabemos la cruda realidad de los eventos masivos: metes a 50,000 vatos sudados en un centro de convenciones, todos subiendo historias a Instagram al mismo tiempo, y las antenas de la zona colapsan. Tu preciosa web app basada en la nube se queda en un eterno loading y tu activación se va al caño.

Por eso, para la Casa del Yeti, desarrollé la app Encuestas-Free-Fire bajo un mandamiento absoluto: Offline-first o muerte.

Armé el frontend en Flutter nativo para Android, optimizado específicamente para correr en landscape a 3200x2136 en unas tablets Xiaomi. Nada de webviews chafas. El flujo es simple: una pregunta por pantalla, auto-avance, y al final un "¡Gracias!". Pero la verdadera magia está por debajo del capó.

Como no podíamos depender de la red, cada respuesta se serializa y se guarda localmente en un archivo responses.jsonl. Literal, almacenamiento de texto crudo en el dispositivo. Cero latencia, cero fallos de red. Las encuestadoras podían levantar miles de registros sin que la tablet siquiera supiera qué chingados es el internet.

Panel Oculto Flutter

Pero, ¿cómo sacamos la data si no hay red? Aquí es donde me puse modo James Bond. Le programé un panel de administración oculto. Si estás en la pantalla de bienvenida y tocas las esquinas de la tablet en un orden específico y en menos de 3 segundos (superior-izquierda, superior-derecha, inferior-izquierda), ¡boom! Entras al dashboard secreto.

Desde ahí, los supervisores podían ver el conteo de encuestas en tiempo real y exportar la data cruda a un archivo XLSX usando el share sheet nativo de Android (para pasarlo por Bluetooth, cable, o a un USB). Y claro, si por algún milagro agarraban señal, también les metí una integración directa con SendGrid para que la app autogenerara un correo y mandara el Excel adjunto a las oficinas. Todo esto compilado de forma segura inyectando los secretos por línea de comandos usando --dart-define, para que la API Key de SendGrid no anduviera flotando en texto plano por ahí.

Al final del día, el código elegante no es el que usa la última base de datos distribuida en AWS; el código elegante es el que entiende las limitaciones físicas del mundo real y no se rompe. Así que ya se la saben, banda: si van a programar para un evento físico, asuman que el internet es un mito. Codifiquen en local, aseguren la data y dejen que el diseño offline los salve del ridículo.