Oriel: mis aplicaciones personales en una sola, que funciona sin conexión y se sincroniza con mi servidor

Mi ecosistema de aplicaciones personales: una sola aplicación, en el navegador y en Windows y Android, en la que cada aplicación es una sección, hoy Spese (gastos) e Inventario. Los datos están en el dispositivo y funcionan sin conexión; mi servidor los sincroniza, también en áreas compartidas con otras personas y con cifrado de extremo a extremo.

Oriel es mi ecosistema de aplicaciones personales: una sola aplicación, en el navegador y como aplicación para Windows y Android, en la que cada aplicación es una sección con sus datos, sobre una base de datos, una sincronización y una biblioteca de componentes comunes. La primera sección es **Spese** («gastos» en italiano), la heredera de Spiccio, reescrita aquí pieza a pieza; la segunda, **Inventario**, guarda los objetos de casa con sus garantías y tiques. Desde el enlace se prueba sin cuenta: «Prova con dati d'esempio» (probar con datos de ejemplo) abre Spese con cuentas y movimientos inventados, que se quedan en ese navegador.

**Qué hace**

- **Funciona sin conexión**: los datos están en el dispositivo, en SQLite (en el navegador con WebAssembly, con OPFS), y el servidor los lleva a los demás dispositivos; en una actualización solo viajan los campos que cambian. - **Spese**: cuentas, movimientos, devoluciones, suscripciones con baja y preaviso, presupuestos del mes, previsión del saldo, importación de CSV y una Revisión que encuentra duplicados y conflictos. - **Inventario**: un objeto nace de un gasto, con el tique adjunto y la garantía que vence. - **Áreas compartidas**: datos en común con otras personas, invitadas con un enlace, con quién está en ese momento, el movimiento bloqueado mientras otro lo edita y los cambios en tiempo real. - **Cifrado de extremo a extremo**, opcional: en el servidor solo hay datos cifrados, y quitar a alguien de un área cambia su clave. - **Acceso** con contraseña, passkey y código temporal; un guardado se puede deshacer.

**La parte difícil**

Dos dispositivos que cambian el mismo movimiento sin conexión: el servidor nunca sobrescribe, guarda las dos versiones y la ficha del conflicto muestra qué cambió, dónde y quién lo hizo, hasta que alguien elige. Las reglas que unen varios registros, como las devoluciones que no superan el gasto, también las controla el servidor, y el conflicto dice qué regla lo detuvo.

Vue 3 y TypeScript, Fastify y PostgreSQL en mi servidor con Docker, Tauri 2 para las aplicaciones nativas: 22 paquetes en un monorepo, cada módulo documentado en un catálogo, más de 5.000 pruebas automáticas y un centenar de pruebas de extremo a extremo en un navegador real.

Diseño, desarrollo full-stack y publicación · 2026

Vue.js, Fastify, PostgreSQL, SQLite, Tauri

Ver el sitio

Andrea Coppetta