Viollet
Viollet es un proyecto personal que diseñé y construí de punta a punta. Conecta Gmail, ingiere notificaciones de transacciones bancarias, categoriza gastos con IA y muestra presupuestos y hallazgos sin pedir credenciales de banca en línea.
- Rol
- Constructor en solitario, de arquitectura a producción
- Año
- 2026
- Tiempo de lectura
- 12 min de lectura
- TypeScript
- Next.js
- Turso
- Drizzle
- Clerk
- AI SDK
- Gmail API
- Google Pub/Sub
- Avisos web
- Vercel
Sesión de ejemplo
Una simulación de Viollet con el usuario de la demo pública. Muestra el panel, los gastos, los presupuestos y la bandeja.
1. Contexto
La mayoría de apps de finanzas personales aún dependen de registro manual o integraciones bancarias directas difíciles de lanzar, costosas de mantener y a menudo no disponibles para bancos regionales.
En República Dominicana, muchas personas ya reciben alertas de crédito, débito y transferencias por correo. La oportunidad era encontrar a los usuarios donde ya viven sus datos: convertir esas notificaciones en transacciones estructuradas, categorías y vistas de gasto sin entrada manual.
2. Restricciones
Viollet es un proyecto personal en solitario, así que el alcance debía centrarse en una ruta de ingesta confiable en lugar de construir una plataforma de banca abierta completa desde el día uno.
Los datos financieros exigen más rigor en seguridad y confianza: sin contraseñas bancarias, acceso de solo lectura a Gmail con consentimiento explícito, y un repositorio privado mientras el producto sigue en beta pública.
- Sin recolección de credenciales bancarias, solo notificaciones por correo que el usuario ya recibe
- Los permisos restringidos de Gmail requieren verificación de Google y revisión de seguridad continua
- Los formatos de notificación varían entre más de 15 instituciones dominicanas y difieren entre tarjeta y cuenta
- El almacenamiento usa Turso con Drizzle, no una etiqueta genérica de SQLite
3. Mi responsabilidad
Asumí el producto desde la definición del problema hasta producción: límites del sistema, modelo de datos, flujo Gmail/OAuth, ingesta por avisos automáticos, categorización asistida por IA, experiencia del panel y despliegue.
Eso incluyó decidir qué automatizar primero (captura y categorización por correo), qué posponer (APIs bancarias directas) y cómo explicar las contrapartidas en el sitio público para que las personas entiendan acceso y revocación.
4. Arquitectura
El sistema tiene tres caminos que cooperan: la app con sesión en Next.js sobre Vercel (Clerk para las sesiones), la ingesta asíncrona de correo (users.watch de Gmail más un aviso de Pub/Sub hacia una ruta de avisos) y Drizzle sobre Turso para el libro.
Una notificación soportada se limpia, se extrae con el AI SDK a un objeto tipado (en producción, a través de Vercel AI Gateway), se categoriza y se guarda. El panel y el asistente leen esas filas para presupuestos, tendencias y respuestas.
Cada nodo explica, por turnos, cómo se reparten el trabajo Gmail, Pub/Sub, Next.js, Clerk, Vercel, el AI SDK y Turso.
5. Decisiones y contrapartidas
Clerk para autenticación
Clerk redujo el tiempo hasta producción para gestión de sesiones y me permitió enfocar ingeniería en sincronización Gmail e ingesta confiable. La contrapartida es acoplarse a un proveedor hospedado, aceptable en una beta donde importan la velocidad y los valores seguros por defecto.
- 01Notificaciones por correo en lugar de APIs bancarias
- 02Turso + Drizzle para la capa de datos
- 03Categorización asistida por IA junto a reglas de lectura
- 04Clerk para autenticación
- Notificaciones por correo en lugar de APIs bancarias. Las APIs bancarias y agregadores ampliarían cobertura en teoría, pero añaden la carga de llegar a acuerdos y un soporte regional desigual. Las alertas por correo ya llegan a las personas y permiten lanzar una beta funcional sin almacenar credenciales bancarias.
- Turso + Drizzle para la capa de datos. Una base libSQL administrada en el perímetro reduce la carga operativa para un constructor en solitario, mientras Drizzle aporta migraciones y consultas tipadas. La contrapartida es diseñar una ingesta idempotente y segura ante avisos automáticos en lugar de un solo proceso que lo hiciera todo.
- Categorización asistida por IA junto a reglas de lectura. Las reglas puras fallan cuando los bancos cambian plantillas o redacción. El AI SDK ayuda a clasificar comercios y categorías ambiguos, con restricciones de lectura para mantener salidas estructuradas. La contrapartida es vigilar la calidad y acotar las instrucciones a metadatos financieros, no al correo personal general.
- Clerk para autenticación. Clerk redujo el tiempo hasta producción para gestión de sesiones y me permitió enfocar ingeniería en sincronización Gmail e ingesta confiable. La contrapartida es acoplarse a un proveedor hospedado, aceptable en una beta donde importan la velocidad y los valores seguros por defecto.
6. Impacto
Viollet está en vivo en viollet.app como beta pública gratuita. Los usuarios conectan Gmail, seleccionan remitentes financieros autorizados y obtienen seguimiento automatizado de gastos desde notificaciones. Esto reemplaza el registro manual en el flujo soportado.
El alcance público actual incluye soporte para más de 15 bancos y tarjetas dominicanas (con evaluación de instituciones adicionales que envían alertas por correo), además de presupuestos, tendencias de gasto y hallazgos proactivos derivados de transacciones categorizadas.
- Automatización Gmail → gastos categorizados sin entrada manual para cuentas conectadas
- Sin recolección de nombres de usuario ni contraseñas de banca en línea
- Los usuarios pueden revocar acceso a Gmail desde Google o dentro del flujo del producto
7. Asistente
El asistente dentro de la app no adivina las finanzas de alguien. Cada respuesta se apoya en herramientas sobre las filas de esa persona: desglose de gasto, resumen, transacciones, presupuestos, metas de ahorro y algunos ajustes.
El panel de abajo repite tres respuestas del mismo libro de ejemplo que la página de inicio. Muestra la herramienta que llamaría el asistente en producción. No contacta un modelo en vivo.
8. Calidad operativa
Como el producto maneja metadatos financieros, la implementación cuida transporte y almacenamiento: datos cifrados en tránsito y en reposo, permisos Gmail de solo lectura acotados a remitentes elegidos por la persona, y texto claro en el sitio público sobre el proceso de verificación de Google para permisos restringidos.
La ingesta está pensada para ser confiable en el límite del aviso automático: validar las entregas de los avisos, hacer escrituras idempotentes cuando sea posible y aislar la lectura y la categorización para que una plantilla defectuosa no corrompa datos ajenos.
- Verificación de app de Google completada; permisos Gmail restringidos siguen el ciclo de evaluación de seguridad de Google
- Las preguntas frecuentes documentan acceso, revocación y uso de datos sin reventa publicitaria
- La ruta de avisos y Pub/Sub separa la entrega de correo de la latencia de la interfaz entre solicitud y respuesta
9. Prueba
Explora la beta pública en viollet.app. El repositorio fuente permanece privado durante la beta; este caso de estudio y el producto desplegado son la evidencia pública. También escribí sobre control de gastos en República Dominicana en el blog de Viollet.
viollet.app