Volver al Blog
Apps de Escritorio · 13 min lectura

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

Gonzalo Monzón

· Fundador & CTO

Desktop application development
Electron Offline-First IndexedDB

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.

Fundamentos

¿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 UI100% React + TailwindParcial / Reescritura
Tiempo de desarrolloSemanasMeses
Tamaño del binario~150 MB~10 MB
RAM en uso~200-400 MB~50-100 MB
Ecosistema Node.jsAcceso totalLimitado a Rust
Playwright/PuppeteerNativoNo disponible
Cross-platformWin/Mac/LinuxWin/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.

App Principal

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.

Arquitectura

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.

Flujo de persistencia offline-first
// 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
});
Sincronización

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.

Sync adaptativa con Google Drive
// 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

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 NeuralGeneración texto-a-voz de alta calidadElevenLabs API v2
Voice CloningClonar voces con 30s de muestraElevenLabs Instant Clone
Batch ExportGeneración masiva de archivos audioCola con rate limiting
Audio PreviewPrevisualización antes de exportarWeb Audio API + IndexedDB
Catálogo de VocesExplorar y probar voces disponiblesElevenLabs Voice Library
Exportación Multi-formatoMP3, WAV, OGG, PCMFFmpeg + Node.js Streams
Automatización

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:

1

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.

2

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.

3

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.

4

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.

electron/main.js — Arquitectura de WhatsApp Agent
// 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
});
DevOps

Build & Distribución

Construir apps Electron para producción tiene sus propios retos. Aquí está nuestro pipeline:

Fase Herramienta Output
Bundle UIVite + React/dist/ estáticos
Packageelectron-builder.exe / .dmg / .AppImage
Code signingWindows AuthenticodeCertificado EV
Auto-updateelectron-updaterDescarga diferencial
Portableelectron-builder --portable.exe sin instalación
Seguridad

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.

Ecosistema

Las 3 Apps: Resumen Comparativo

Característica CadencesLab Audio Hub WhatsApp Agent
PropósitoCRM + GestiónProducción audio IAAutomatización WA
UI FrameworkReact + TailwindReact + TailwindFastify + HTML
StorageIndexedDB + GDriveIndexedDB + LocalSQLite (sql.js)
BackendCloudflare WorkersElevenLabs APIFastify local
Offline✓ FullParcialSolo lectura
PlataformasWin / Mac / LinuxWin / Mac / LinuxWin / 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 Cadences
Resumen

Conclusió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.