(Spanish)📝 Caso de Estudio: Si Presto! - De cuadernos de notas a una arquitectura Offline-First en Flutter
📌 Introducción: El origen del problema (De una libreta a código)
El software más útil nace de resolver problemas reales cotidianos. Este proyecto comenzó cuando observé a un familiar que prestaba dinero de manera informal. Su sistema de gestión consistía en una libreta física y hojas de cálculo en Excel. El resultado era caótico:
- Olvidos frecuentes en las fechas de cobro.
- Falta de claridad al calcular abonos parciales o intereses acumulados.
- Horas perdidas redactando manualmente estados de cuenta por WhatsApp.
Para solucionar esto, decidí diseñar e implementar Si Presto!, una aplicación móvil nativa construida con Flutter y Firebase enfocada en el control de préstamos informales, optimizada para contextos de baja conectividad y con un modelo híbrido de monetización.
🏗️ La Arquitectura: Diseño de Software y Flujo de Datos
Para asegurar un rendimiento óptimo en dispositivos de cualquier gama, estructuré la aplicación bajo una Arquitectura Limpia (Clean Architecture) organizada en un Monorepo móvil con separación estricta de responsabilidades:
lib/
├── core/ # Temas, PDF engines, notificaciones locales
├── domain/ # Entidades inmutables (Freezed) e interfaces
├── data/ # Fuentes de datos (Isar NoSQL, Firebase Auth) y modelos
└── presentation/ # Gestión de estado (Riverpod) y páginas UI
El Flujo de Datos Híbrido:
UI ➔ Riverpod StateNotifiers ➔ Repositorios ➔ Isar DB (Local) ➔ Firebase Cloud Backup (Premium)
Toda la generación de código inmutable y reactivo se automatizó utilizando build_runner con herramientas como @freezed, @riverpod e @Isar.
🛡️ Los 4 Grandes Retos Técnicos de Ingeniería
1. Sincronización Offline-First y Consistencia de Datos en Venezuela
El Problema: La aplicación debe funcionar sin fricciones en zonas con conectividad intermitente o nula. Si el cobrador registra un abono en la calle sin señal, los saldos locales no pueden duplicarse ni corromperse al recuperar la red.
La Solución: Implementé un modelo Offline-First utilizando Isar Database como almacenamiento NoSQL local de alto rendimiento. La aplicación realiza todas las operaciones CRUD de forma síncrona en la base de datos local y, mediante un servicio de sincronización en segundo plano, respalda la información en la nube con Cloud Firestore únicamente si el usuario cuenta con conectividad y posee el plan Premium.
2. Generación Dinámica de PDF Nativos en Dispositivos de Gama Baja
El Problema: Generar reportes financieros detallados consume memoria. Si el renderizado se realiza de forma ineficiente, los teléfonos de gama baja pueden sufrir cierres inesperados (crashes por OOM).
La Solución: Diseñé un motor de renderizado transaccional utilizando los paquetes nativos pdf y printing. El motor procesa las colecciones inmutables de transacciones en bloques (chunks) directamente en la memoria caché del dispositivo, ensamblando el PDF en tiempo real para que el cobrador pueda exportarlo y compartirlo inmediatamente por WhatsApp sin sobrecargar el procesador del teléfono.
3. Modelo de Monetización Híbrido (AdMob + RevenueCat)
El Problema: Mantener la aplicación requiere rentabilidad, pero saturar una herramienta financiera de cobros con anuncios intrusivos arruina por completo la experiencia de usuario (UX).
La Solución: Implementé un esquema Freemium controlado minuciosamente desde la capa de datos:
- Free Tier: Límites lógicos quemados en el repositorio (Máximo 3 deudores y 4 pagos por préstamo) financiados mediante banners publicitarios no intrusivos usando Google Mobile Ads.
- Premium Tier: Integrado de manera limpia con el SDK de RevenueCat. Al detectar la compra activa mediante el singleton
PurchaseService, la aplicación remueve por completo los anuncios, desbloquea deudores/pagos ilimitados, habilita la exportación a PDF y activa el respaldo en la nube con Cloud Firestore.
4. Automatización de Alertas y Notificaciones Locales
Para eliminar la dependencia constante de servidores externos (Push Notifications) que pueden fallar si el dispositivo no tiene datos móviles, configuré un servicio autónomo basado en flutter_local_notifications. La aplicación programa internamente recordatorios de cobro locales basados en las fechas límite de las entidades del dominio de datos, manteniendo al cobrador alerta sin consumir datos de red.
🎨 Identidad Visual: Estética Neobrutalista Oscura
Para mantener la coherencia con mi marca personal, la interfaz de Si Presto! adopta un estilo Neobrutalista Oscuro caracterizado por:
- Un fondo oscuro profundo de alto contraste combinado con un verde neón eléctrico (
#00FF99) para destacar los saldos positivos. - Tarjetas de resumen financiero con bordes marcados y sombras sólidas planas desplazadas, rompiendo con los diseños tradicionales y planos de las aplicaciones bancarias comunes.
🧠 Lecciones de Ingeniería de Producto
Construir Si Presto! partiendo de una necesidad familiar real me enseñó que la arquitectura de software senior no se mide por la cantidad de servicios en la nube que utilices, sino por saber delegar eficientemente el cómputo. Al elegir almacenar datos localmente con Isar, renderizar PDFs nativos en el cliente y programar notificaciones locales, reduje los costes de infraestructura de la aplicación a prácticamente cero dólares para el nivel gratuito, asegurando un producto escalable y altamente rentable.
Link: https://portfolio-three-topaz-81.vercel.app/es/projects/si-presto
Comments
No comments yet. Start the discussion.