Caso de estudio Espejo, por dentro
Quería un diario digital donde nadie pudiera leer mis entradas. Ni el servidor, ni la base de datos, ni yo si pierdo la contraseña. Así nació Espejo.
Las apps de journaling presionan con rachas y gamificación. Y ninguna ofrece privacidad real: tus entradas viven en texto plano en servidores ajenos.
Offline-first con sync opcional. El servidor nunca ve el contenido.
- IndexedDB (Dexie) como fuente de verdad: funciona sin conexión
- Cifrado AES-256-GCM + PBKDF2 (310k iteraciones) en cliente
- Supabase para sync opcional entre dispositivos (solo blobs cifrados)
- Soft-delete + last-write-wins para resolución de conflictos
Diseñada desde la psicología del bienestar.
- Check-in emocional antes de escribir: menos fricción en días difíciles
- Modo contemplación: lectura inmersiva con tipografía serif
- Favoritos semánticos (claridad, semilla, ancla, victoria, cicatriz)
- Year in Review estilo Spotify Wrapped
- Nudges con prioridad: cuidado > insight > celebración
- Next.js 16 (App Router) + React 19 + TypeScript
- TipTap (rich text), Tailwind 4, shadcn/ui (Radix)
- Vitest + Testing Library (unit) / Playwright (E2E)
- Vercel (deploy) + Sentry (errors) + CSP/HSTS headers
Cuando algo se usa de verdad, piensas el código distinto.
Offline-first con E2EE no es trivial. Migrar esquemas en IndexedDB, resolver conflictos de sync sin ver los datos, gestionar la pérdida de contraseña cuando es la clave de cifrado. Cada problema te obliga a pensar más allá del happy path.
Todo lo anterior suena bien en la teoría. Pero no tienes que creerme — pruébalo tú mismo.