Construyendo ChronoFlow: ingeniería de señalización multiplataforma
Cómo un equipo pequeño construye y publica un producto de señalización digital que funciona en teléfonos, tablets, televisores y la web. Esta página es el mapa: cada sección resume una decisión de ingeniería y enlaza a la guía que la explica a fondo.
El producto
ChronoFlow programa imágenes, videos y YouTube en pantallas desde un solo lugar. El Controller es donde se administran el contenido, las playlists y los calendarios; el Player es la pantalla que reproduce. Los dos viven en una sola app Flutter, junto a una API en Laravel y un Player web para televisores Samsung y LG.
La arquitectura: una app, dos modos
Por qué un mismo build es una consola en el teléfono y una pantalla en el televisor.
-
Controller y Player en una sola app Flutter: un modo por dispositivo
Cómo una sola compilación de ChronoFlow hace de consola en el teléfono y de pantalla en la tele: modo guardado en el dispositivo, una interfaz por modo, detección de Android TV y un Player web aparte para Samsung y LG.
Leer la guía
Pantallas e identidad
Cómo una pantalla se une a una cuenta sin contraseña, y cómo cada cliente inicia sesión sin guardar un secreto.
-
Emparejar pantallas con un código corto y un QR, sin contraseñas en la tele
Cómo una pantalla de ChronoFlow se une a una cuenta: código de seis caracteres que rota cada dos minutos, secreto del dispositivo, reclamo en una transacción y credencial entregada una sola vez.
Leer la guía -
OAuth2 con Passport para web, móvil y TV: una identidad, ningún secreto en el cliente
Cómo ChronoFlow atiende el dashboard, la app y las teles con un solo servidor Passport: un cliente por canal, secretos solo en el servidor, sesiones de 1 y 30 días e inicio de sesión con Google y Microsoft sin fusionar cuentas a ciegas.
Leer la guía
Contenido que se reproduce solo
Cómo decide la API qué se reproduce ahora, y dónde viven los archivos de cada plan.
-
Playlists, horarios y grupos: cómo decide una API de señalización qué se reproduce ahora
Cómo modela ChronoFlow playlists, horarios y grupos de pantallas, cómo elige el ganador con pesos por origen y prioridad, por qué el loop es estado de la pantalla y cómo llega un cambio en uno o dos segundos.
Leer la guía -
Almacenamiento de objetos por plan: mover archivos entre R2 y B2 sin parar las pantallas
Cómo ChronoFlow guarda los archivos de Free en Cloudflare R2 y los de Pro en Backblaze B2: un disco por plan, cada archivo recuerda el suyo, cuotas comprobadas dos veces y una mudanza que borra el origen el último.
Leer la guía
Llegar a cada pantalla
Qué cambia cuando el Player es una app web dentro de un televisor y no una app nativa.
-
CORS en señalización: por qué falla en la tele y nunca en la app nativa
Por qué CORS rompe las apps de Samsung y LG de ChronoFlow pero nunca la app Flutter: Origin null, peticiones previas antes de autenticar, cada cabecera propia en la lista, CORS en los buckets y un solo código Vue para web y teles.
Leer la guía
Costos y publicación en las tiendas
Cuánto cuestan nuestras decisiones de almacenamiento, cómo automatizamos los releases de iOS y Android y qué tener listo antes de una revisión de tienda.
-
Por qué ChronoFlow guarda los archivos con dos proveedores y cuánto cuesta cada uno
Free en Cloudflare R2 y Pro en Backblaze B2: qué comparamos con precios públicos de lista, por qué no Azure Blob, cuánto cuesta por cada 1.000 cuentas y qué ganamos y cedimos al elegir dos proveedores.
Leer la guía -
Automatizar los releases de iOS y Android: qué ganamos frente a hacerlo a mano
Cómo publicamos ChronoFlow con GitHub Actions: dos flujos por plataforma, el mismo commit recompilado para la tienda, números de build sin colisiones, iOS sin una Mac en el camino y lo que sigue siendo manual.
Leer la guía -
Checklist para enviar tu primera app Flutter a App Store y Google Play
Qué tiene que tener listo un equipo pequeño antes de enviar una app a las tiendas, en orden: antes del primer build, canal de pruebas, build de tienda, ficha, URLs legales, reglas de la revisión y notas para el revisor.
Leer la guía