Proyecto personal, para iglesias
WorshipApp
Durante un culto, una persona maneja la pantalla: letras, un pasaje bíblico, las diapositivas del sermón, un video. WorshipApp es la app de escritorio para esa tarea, con una ventana de control para quien opera y una de proyección para todos los demás.
El problema
WorshipApp nació para reemplazar a EasyWorship. Es el tercer intento: antes hubo un proyecto, hoy archivado, y una versión en JavaScript plano.
Restricciones
- Apunta a Windows; desarrollada en una Mac.
- Uso en vivo: si la ventana de proyección se cierra, tiene que volver exactamente como estaba.
- Sin conexión: todo local, incluido el texto bíblico y su búsqueda.
- Las diapositivas del sermón llegan como archivos de PowerPoint.
Qué construí
Una app Electron con una separación estricta: el proceso principal es dueño del estado y la base de datos, quien opera trabaja en una ventana de control, y la ventana de proyección es una función pura de la última salida que recibió. Si se reabre, el proceso principal reenvía esa salida y la pantalla vuelve exactamente como estaba.
Valores seguros por defecto —renderers en sandbox, web security activado—, con los archivos locales servidos por un protocolo propio worship:// en lugar de URLs file://.
SQLite con Drizzle para canciones, programas de culto y la Biblia RV1960, con búsqueda de texto completo FTS5 que ignora acentos: escribir “senor” encuentra “Señor”.
Lo difícil
Ventana de control
Quien opera encola canciones, pasajes, diapositivas
Proceso principal
Dueño del estado y de SQLite; reenvía la última salida
Ventana de proyección
Una función pura de la última salida
Pipeline de diapositivas
- .pptx
- LibreOffice
- pdf.js
- WebP
- (Cacheado por contenido)
Un único contrato IPC tipado
Cada mensaje entre procesos se declara una sola vez, en un único tipo de contrato. Un handler faltante o mal tipado no compila, y los errores vuelven como un resultado tipado en lugar de excepciones cruzando procesos.
PowerPoint sin PowerPoint
Automatizar PowerPoint por COM ataba la app a Office. El pipeline actual convierte .pptx a PDF con LibreOffice headless, renderiza cada página a WebP con pdf.js y cachea el resultado por contenido, esquivando que LibreOffice exporta a PNG solo la primera diapositiva. Los tiempos y el audio se leen directo del XML de la presentación.
Resultado
- Versión 2.1 en beta, con un instalador para Windows compilado desde macOS.
- Alrededor de 320 tests automatizados en 24 archivos.
El código pertenece al cliente y es privado. Las figuras son ilustraciones con datos de ejemplo; en esta página no aparece ningún registro real.