Saltar al contenido principal

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 como externalBin. Hace bind solo a 127.0.0.1:3001 — no es accesible desde la red.
  • La base de datos es un archivo SQLite en el app-data del 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) exige Authorization: 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.