Arquitectura
FlowFit corre como una aplicación de escritorio autónoma: una sola ventana (Tauri/WebView) que habla con un servidor local empaquetado dentro del mismo instalador. Todo vive en la máquina del gimnasio.
Modo de escritorio (.exe offline) — el modo real
Puntos clave:
- El frontend (React compilado por Vite) se sirve estático dentro del WebView de Tauri.
- El sidecar es el servidor Fastify (
server/server.ts) empaquetado con esbuild y ejecutado por un runtime de Node incluido comoexternalBin. Hace bind solo a127.0.0.1:3001— no es accesible desde la red. - La base de datos es un archivo SQLite en el
app-datadel usuario. Las migraciones se aplican al arranque (server/lib/migrateBoot.ts). - Respaldos: tras cada movimiento de dinero, el sidecar hace un snapshot
consistente (
VACUUM INTO+ rename atómico) a la carpeta que sincroniza el cliente de Nextcloud. Ver Reglas de negocio y el panel de backup en Configuración. - WhatsApp y la sincronización a la nube son los únicos componentes que requieren internet; su ausencia no rompe el uso local.
Arranque del proceso (boot)
La ventana de Tauri permanece oculta hasta que /health responde 200
(health-gate), para que el usuario no vea una pantalla en blanco mientras el
servidor arranca.
Modo web multi-tenant — [POR CONFIRMAR]
:::caution No implementado
Este modo no existe en el código. El README.md indica "No es un SaaS
multi-tenant" y el roadmap descarta el escenario multi-sucursal. El diagrama se
incluye solo como marcador; si el producto evoluciona hacia un modo web habrá
que diseñar tenancy, autenticación por organización y aislamiento de datos —
nada de eso está presente hoy.
:::
Frontend ↔ Backend
- El cliente usa TanStack Query para las llamadas a
/api/*y Zustand para estado local de UI. - Toda ruta
/api/*(salvo las públicas) exigeAuthorization: Bearer <JWT>. El middleware re-consulta el usuario en cada request para que desactivaciones y cambios de rol surtan efecto de inmediato. - Rutas públicas:
/health,/api/auth/login,/api/wa/webhook,/api/setup/status,/api/setup.