Funcionamiento local
El dispositivo es la fuente de verdad y las funciones principales no necesitan servidor.
Caso de proyecto
Una aplicación de finanzas personales diseñada para responder una pregunta simple sin pedir acceso a la vida financiera de quien la usa.
Contexto
Una cuenta bancaria muestra una cifra, pero mezcla dinero disponible con alquiler, suscripciones y compromisos que todavía no se han cobrado.
¿Cuánto dinero tengo disponible después de descontar gastos recurrentes?
Netto calcula ese margen sin conexiones bancarias y sin almacenar información financiera personal en la nube.


Problema
Centralizar datos financieros en un backend habría simplificado sincronización y soporte. También habría creado una base sensible que proteger y una dependencia permanente de conectividad.
La decisión fue tratar la privacidad como límite: la información permanece en el dispositivo.
Decisiones
El dispositivo es la fuente de verdad y las funciones principales no necesitan servidor.
Kotlin Multiplatform comparte reglas y acceso a datos entre Android e iOS.
Jetpack Compose y SwiftUI permiten adaptar la interacción a cada plataforma.
Android Keystore e iOS Keychain protegen material sensible con capacidades nativas.
Arquitectura
La lógica de dominio y el acceso a datos se comparten mediante Kotlin Multiplatform. Room KMP conserva la información localmente, mientras Jetpack Compose y SwiftUI presentan experiencias propias de cada plataforma.
RevenueCat gestiona el estado comercial sin convertir los movimientos financieros en datos de un servicio remoto.
Compromisos
Sin nube no existe una restauración automática universal ni sincronización inmediata entre dispositivos. El soporte tampoco puede inspeccionar estados personales.
A cambio, el producto no custodia historiales financieros, funciona sin conectividad y puede explicar con claridad dónde vive la información.
Resultado
Netto materializa el cálculo de dinero disponible, la gestión de gastos recurrentes y vistas de análisis sobre una base local compartida.
Continúa en pre-lanzamiento y no se presenta como disponible en tiendas hasta completar ese proceso.
Aprendizaje
Elegir que los datos no salgan del dispositivo redujo alternativas y obligó a pensar primero en los límites.
Validaría antes los recorridos mínimos de introducción de datos y pospondría análisis secundarios hasta observar qué información ayuda a decidir.