Despliegue
FlowFit se entrega como aplicación de escritorio. Esta página cubre el
entorno de desarrollo y la generación del instalador .exe.
Requisitos
- Node 26 (la misma versión que se empaqueta como runtime del sidecar).
- npm (incluido con Node).
- Para construir el instalador de escritorio: Rust + toolchain MSVC, Build Tools de Visual Studio (C++) y WebView2 Runtime en Windows.
Variables de entorno
Copia .env.example a .env y ajusta lo necesario:
| Variable | Propósito |
|---|---|
DATABASE_URL | Ruta del archivo SQLite (file:./dev.db en dev). |
SERVER_PORT | Puerto del sidecar Fastify (por defecto 3001). |
JWT_SECRET | Clave de firma de los JWT. En producción se autogenera. |
JWT_ISSUER / JWT_TTL_DAYS | Emisor y vigencia del token (30 días). |
WA_TOKEN_KEY | Clave para cifrar secretos en DB (token de Twilio). |
TWILIO_WEBHOOK_URL | URL pública del webhook de Twilio (opcional). |
BACKUP_DIR | Carpeta de respaldo (la que sincroniza Nextcloud). |
BACKUP_DEBOUNCE_MS / BACKUP_MAX_INTERVAL_MS / BACKUP_STALE_AFTER_MS | Afinado del respaldo. |
En la app empaquetada,
JWT_SECRETyWA_TOKEN_KEYse generan y persisten ensecrets.json(permisos600) junto a la base de datos si faltan. La carpeta de respaldo se configura desde Configuración → Respaldo en la UI y vive enAppSettings.
Entorno de desarrollo
npm install # instala dependencias
npm run db:migrate # aplica migraciones (prisma migrate dev)
npm run db:generate # genera el cliente Prisma
npm run db:seed # (opcional) datos de demostración
npm run server:dev # sidecar Fastify con recarga (tsx watch)
npm run dev # frontend Vite
:::tip Cliente Prisma tras migrar
prisma migrate dev no regenera el cliente automáticamente. Si ves errores 500
en tiempo de ejecución después de migrar, corre npm run db:generate.
:::
Modo escritorio en desarrollo
npm run tauri dev # levanta el front + sidecar dentro de la ventana Tauri
Generar el instalador .exe (Windows)
El empaquetado está implementado y verificado en Linux (.deb/.rpm); el
instalador NSIS de Windows debe construirse en una máquina Windows porque los
native addons (better-sqlite3, argon2) traen prebuilds por plataforma.
git pull
npm ci
npm run tauri build
# Instalador NSIS en:
# src-tauri\target\release\bundle\nsis\FlowFit_<versión>_x64-setup.exe
beforeBuildCommand encadena tres pasos:
build:sidecar— empaquetaserver/server.tscon esbuild asrc-tauri/sidecar/server.mjs, deja los addons nativos y Prisma comonode_modulesexternos, y copia las migraciones.build:node— copia el binario de Node comoexternalBinpara que el cliente no necesite Node instalado.build— compila el frontend con Vite (usa.env.production,VITE_API_BASE=http://127.0.0.1:3001).
Qué pasa al arrancar la app instalada
- Tauri (
src-tauri/src/lib.rs) resuelve elapp-data, armaDATABASE_URL=file:<appdata>/flowfit.dby lanza el sidecarnode. - El sidecar:
bootEnv(secretos) →restoreBoot(restauración staged) →migrateBoot(migraciones.sqlsin el CLI de Prisma) → abre Prisma →ensureDefaults→ escucha en127.0.0.1:3001. - Un health-gate espera a que
/healthresponda200y entonces muestra la ventana. Al cerrar, Tauri mata el sidecar (no dejanode.exehuérfano).
El instalador va sin firmar (alcance de cliente único): Windows SmartScreen mostrará un aviso la primera vez. Detalle completo en
docs/EMPAQUETADO-TAURI.md.
Primer arranque y datos iniciales
Una instalación nueva arranca con la base migrada pero vacía (sin usuarios).
El flujo de setup (/api/setup) permite crear el primer gerente desde un
asistente en la app cuando no hay usuarios. Ver docs/ENTREGA.md para el
checklist de entrega (cambiar contraseña, datos del gym, planes reales,
configurar Twilio, primer respaldo verificado).
Respaldo y restauración
- Respaldo: snapshot consistente (
VACUUM INTO+ rename atómico) aBACKUP_DIR; se dispara debounced tras cada movimiento de dinero, al arrancar, al cerrar y con el botón "Respaldar ahora". - Off-site: Nextcloud sincroniza la carpeta a
cloud.polarzero.dev; su versionado guarda el historial y PBS añade una tercera copia. - Restauración:
POST /api/backup/restoredeja la restauración staged; se aplica al reiniciar la app (la DB viva queda intacta hasta entonces).
Auto-actualización
Tauri usa el plugin updater apuntando a
github.com/PolarZer0-dev/flowfit-app/releases/latest/download/latest.json. El
script scripts/make-latest-json.mjs genera ese manifiesto al publicar una nueva
versión.