Apps de Escritorio: Cuando la Nube No Es Suficiente
CadencesLab, Audio Hub y WhatsApp Agent — por qué el escritorio sigue siendo esencial en la era cloud y cómo construimos aplicaciones offline-first con Electron, IndexedDB y sincronización inteligente con Google Drive.
Gonzalo Monzón
· Fundador & CTO
Hay una idea extendida en la industria tech: "todo debería ser SaaS". Y hasta cierto punto, es verdad. Pero después de construir software para empresas durante años, hemos aprendido algo que las startups de Silicon Valley no quieren oír: a veces necesitas una app de escritorio.
¿Cuándo importa el escritorio? Cuando necesitas acceso offline, rendimiento local, almacenamiento ilimitado, integración profunda con el sistema operativo, o simplemente cuando tu usuario no quiere abrir otra pestaña del navegador. Cadences tiene 3 aplicaciones de escritorio en producción y todas existen por razones técnicas muy concretas.
¿Por Qué Electron? El Trade-off Real
Sí, conocemos las críticas: "Electron usa demasiada RAM", "es solo un Chrome envuelto". Pero la decisión fue pragmática. Aquí está el análisis real:
| Criterio | Electron | Tauri / Nativo |
|---|---|---|
| Reutilización de UI | 100% React + Tailwind | Parcial / Reescritura |
| Tiempo de desarrollo | Semanas | Meses |
| Tamaño del binario | ~150 MB | ~10 MB |
| RAM en uso | ~200-400 MB | ~50-100 MB |
| Ecosistema Node.js | Acceso total | Limitado a Rust |
| Playwright/Puppeteer | Nativo | No disponible |
| Cross-platform | Win/Mac/Linux | Win/Mac/Linux |
Para nosotros, la clave fue la reutilización de código. CadencesLab comparte el 100% de la interfaz React con la versión web. Audio Hub necesita acceder a APIs de Node.js para procesamiento de audio. WhatsApp Agent necesita Playwright para automatización del navegador. En los tres casos, Electron fue la elección natural.
CadencesLab: La App que Funciona Sin Internet
CadencesLab es la versión aplicación de escritorio de la plataforma Cadences. Todo lo que puedes hacer en cadences.app lo puedes hacer en CadencesLab — pero con dos superpoderes adicionales: funciona offline y sincroniza con Google Drive.
Almacenamiento Local
Todos tus datos en IndexedDB. Proyectos, tareas, contactos, documentos — todo disponible sin conexión a internet.
Sync con Google Drive
Sincronización automática con Google Drive. Tus datos se comprimen y suben como archivo JSON. Funciona como backup + sync entre dispositivos.
Cola de Sincronización
Las operaciones offline se encolan automáticamente. Cuando vuelve la conexión, se procesan en orden con retry automático y resolución de conflictos.
System Tray
CadencesLab se minimiza a la bandeja del sistema. Siempre accesible con un clic, sin ocupar espacio en la barra de tareas.
Offline-First: La Arquitectura de Datos
El concepto de offline-first significa que la app está diseñada para funcionar sin conexión como estado predeterminado, no como un fallback. Los datos se almacenan localmente en IndexedDB y opcionalmente se sincronizan con la nube.
// 1. El usuario crea una tarea (siempre se guarda local primero)
const task = { title: "Revisar propuesta", project: "acme-corp" };
// 2. Se guarda en IndexedDB inmediatamente
await saveToIndexedDB('tasks', task);
// 3. Si hay conexión, se sube al backend
if (navigator.onLine) {
await api.createTask(task);
} else {
// 4. Si NO hay conexión, se encola para después
await addToQueue({
type: 'CREATE_TASK',
payload: task,
timestamp: Date.now()
});
}
// 5. Cuando vuelve la conexión...
window.addEventListener('online', async () => {
await processQueue(); // Procesa todas las operaciones pendientes
}); Google Drive como Backend Personal
En lugar de un backend centralizado para almacenamiento, CadencesLab usa Google Drive como capa de persistencia. Los datos se serializan, comprimen y suben como un archivo JSON a la carpeta appDataFolder del usuario. Esto significa:
Privacy by design
Los datos están en tu propio Google Drive, no en nuestros servidores. Tú controlas el acceso y la retención.
Coste cero de infraestructura
Google Drive ofrece 15 GB gratis. Los datos comprimidos de Cadences ocupan típicamente menos de 5 MB. Suficiente para años de uso.
Sync entre dispositivos
El mismo archivo en Drive se lee desde cualquier instancia de CadencesLab. Edita en el PC del trabajo, continúa en tu portátil de casa.
// Compresión automática antes de subir
const data = await getAllDataFromIndexedDB();
const compressed = compressDriveData(data);
// El archivo se guarda en appDataFolder (invisible para el usuario)
await gapi.client.drive.files.update({
fileId: existingFileId,
media: {
mimeType: 'application/json',
body: JSON.stringify(compressed)
}
});
// Debounce adaptativo: no sube en cada cambio
const syncDebounce = new AdaptiveDebounce({
minDelay: 5000, // Mínimo 5 segundos
maxDelay: 60000, // Máximo 1 minuto
backoff: 1.5 // Factor de incremento
}); Audio Hub: Producción de Audio con IA
Audio Hub es una aplicación de escritorio Electron especializada en generación y gestión de contenido de audio con IA. Conectada a la misma infraestructura de ElevenLabs que usa el sistema de Voz IA Conversacional, pero orientada a producción de contenido:
Text-to-Speech
Genera audio de alta calidad a partir de texto. Múltiples voces neurales con control de velocidad, tono y emoción.
Clonación de Voz
Clona cualquier voz con muestras de audio. Ideal para mantener coherencia de marca en contenido narrado.
Batch Processing
Genera cientos de archivos de audio en lote. Ideal para catálogos, audioguías, IVR y contenido educativo.
| Función | Descripción | Tecnología |
|---|---|---|
| TTS Neural | Generación texto-a-voz de alta calidad | ElevenLabs API v2 |
| Voice Cloning | Clonar voces con 30s de muestra | ElevenLabs Instant Clone |
| Batch Export | Generación masiva de archivos audio | Cola con rate limiting |
| Audio Preview | Previsualización antes de exportar | Web Audio API + IndexedDB |
| Catálogo de Voces | Explorar y probar voces disponibles | ElevenLabs Voice Library |
| Exportación Multi-formato | MP3, WAV, OGG, PCM | FFmpeg + Node.js Streams |
WhatsApp Agent: Automatización Local
WhatsApp Agent es la aplicación más unconventional del ecosistema. Es un agente de automatización local que usa Playwright para interactuar con WhatsApp Web, todo desde una interfaz Electron con backend Fastify:
Sesión persistente
Se escanea el QR una vez. La sesión de WhatsApp Web se guarda en disco y se reutiliza en cada inicio. Sin necesidad de re-autenticar.
Automatización con Playwright
Playwright con plugins stealth controla un Chromium headless. Envío de mensajes, lectura de conversaciones, gestión de grupos — todo automatizado sin APIs oficiales.
WebSocket en tiempo real
La interfaz Electron se comunica con el backend Fastify vía WebSocket. Actualizaciones en tiempo real del estado de mensajes, sesiones y colas.
Base de datos local
SQL.js (SQLite compilado a WebAssembly) como base de datos local. Historial de mensajes, contactos y configuraciones — todo en un archivo de 0 dependencias.
// Configuración del proceso principal
const SERVER_PORT = 3600;
const APP_NAME = 'WhatsApp Agent';
// Directorios de datos persistentes
const userDataPath = app.getPath('userData');
const sessionsPath = join(userDataPath, 'sessions'); // QR sessions
const dataPath = join(userDataPath, 'data'); // SQLite DB
// Electron crea la ventana y arranca Fastify en paralelo
app.whenReady().then(async () => {
await startServer(); // Backend Fastify en puerto 3600
createWindow(); // BrowserWindow apuntando a localhost:3600
createTray(); // System tray icon
}); Build & Distribución
Construir apps Electron para producción tiene sus propios retos. Aquí está nuestro pipeline:
| Fase | Herramienta | Output |
|---|---|---|
| Bundle UI | Vite + React | /dist/ estáticos |
| Package | electron-builder | .exe / .dmg / .AppImage |
| Code signing | Windows Authenticode | Certificado EV |
| Auto-update | electron-updater | Descarga diferencial |
| Portable | electron-builder --portable | .exe sin instalación |
Seguridad en Apps de Escritorio
Las apps Electron son esencialmente un navegador web con acceso al sistema de archivos. Eso requiere un enfoque de seguridad riguroso:
🔒 Context Isolation
El renderer process no tiene acceso directo a Node.js. Toda la comunicación pasa por un preload script controlado con contextIsolation: true.
🛡️ IPC Bridge
El preload expone una API mínima vía contextBridge.exposeInMainWorld(). Solo las funciones explícitamente definidas son accesibles.
📄 CSP Estricta
Content Security Policy que bloquea scripts inline, fuentes externas no autorizadas y comunicaciones con dominios no listados.
🔑 OAuth Seguro
La autenticación con Google usa el flujo OAuth 2.0 completo con PKCE. El token se almacena en IndexedDB cifrada, no en localStorage.
Las 3 Apps: Resumen Comparativo
| Característica | CadencesLab | Audio Hub | WhatsApp Agent |
|---|---|---|---|
| Propósito | CRM + Gestión | Producción audio IA | Automatización WA |
| UI Framework | React + Tailwind | React + Tailwind | Fastify + HTML |
| Storage | IndexedDB + GDrive | IndexedDB + Local | SQLite (sql.js) |
| Backend | Cloudflare Workers | ElevenLabs API | Fastify local |
| Offline | ✓ Full | Parcial | Solo lectura |
| Plataformas | Win / Mac / Linux | Win / Mac / Linux | Win / Mac / Linux |
¿La nube o el escritorio? Ambos.
En Cadences no elegimos entre cloud y desktop — los combinamos. Tus datos en la nube cuando quieres, en tu disco cuando necesitas. Explora la plataforma y descubre cómo trabajan juntos.
Explorar CadencesConclusión
Las apps de escritorio no son un anacronismo — son una herramienta estratégica. Cuando necesitas rendimiento local, acceso offline, integración profunda con el SO o simplemente una experiencia de usuario que no dependa de la velocidad de tu conexión a internet, Electron sigue siendo la mejor opción para equipos que ya trabajan con React y Node.js.
CadencesLab demuestra que puedes tener una app offline-first con sincronización inteligente. Audio Hub demuestra que el procesamiento de audio con IA requiere acceso local al sistema de archivos. Y WhatsApp Agent demuestra que algunas automatizaciones solo son posibles desde el escritorio.
La mejor plataforma es la que no te obliga a elegir entre la nube y tu disco duro.
Gonzalo Monzón
Fundador & CTO de Cadences