Saltar ao contido
Espejo Caso de estudo

Espejo, por dentro

Quería un diario dixital onde ninguén puidese ler as miñas entradas. Nin o servidor, nin a base de datos, nin eu se perdo o contrasinal. Así naceu Espejo.

Offline-first con IndexedDB como fonte de verdadeCifrado no cliente: o servidor só ve blobsUX de benestar, sen gamificación
espejo.day ↗
Problema

As apps de journaling presionan con rachas e gamificación. E ningunha ofrece privacidade real: as túas entradas viven en texto plano en servidores alleos.

Arquitectura

Offline-first con sync opcional. O servidor nunca ve o contido.

  • IndexedDB (Dexie) como fonte de verdade: funciona sen conexión
  • Cifrado AES-256-GCM + PBKDF2 (310k iteracións) no cliente
  • Supabase para sync opcional entre dispositivos (só blobs cifrados)
  • Soft-delete + last-write-wins para resolución de conflitos
UX

Deseñada desde a psicoloxía do benestar.

  • 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 (claridade, semente, áncora, vitoria, cicatriz)
  • Year in Review estilo Spotify Wrapped
  • Nudges con prioridade: coidado > insight > celebración
Stack
  • 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
Next.jsReactTypeScriptSupabaseDexieTipTapTailwindPlaywright
Aprendizaxe

Cando a xente o usa de verdade, pensas o código doutra maneira.

Offline-first con E2EE non é trivial. Migrar esquemas en IndexedDB, resolver conflitos de sync sen ver os datos, xestionar a perda do contrasinal cando é a clave de cifrado. Cada problema obrígache a pensar máis alá do happy path.

Todo o anterior soa ben na teoría. Pero non tes que crerme — próbao ti mesmo.

Proba o cifrado
Escribe algo. Mira como se cifra. Intenta lelo sen a clave.
Escribe
Clave
Cifrado
Descifrado