Mingüini es una plataforma de productividad personal todo en uno —hábitos, tareas, proyectos, sesiones de foco, seguimiento de tiempo, y mucho más, todo en un solo lugar en vez de cinco suscripciones separadas. Está en vivo hoy, en alpha, en minguini.com.

La propuesta es simple: reemplazar todo tu stack de productividad con una sola app. Pero una propuesta simple esconde un problema de ingeniería difícil —trece módulos de funcionalidades compartiendo un mismo límite de autenticación y una misma base de datos es exactamente el tipo de superficie que se vuelve un quilombo si no todos los módulos están construidos de la misma forma.

Este caso de estudio cubre las dos caras de esa apuesta: la decisión de producto de ir por el todo en uno en vez de lanzar una app más de propósito único, y la arquitectura que evita que tantos módulos se desalineen entre sí.

01

El Desafío

La versión cotidiana del problema es la que el propio producto responde: la mayoría de la gente maneja su día repartido entre cinco apps distintas —un gestor de tareas, un timer Pomodoro, un tracker de hábitos, un gestor de proyectos, un tracker de tiempo— cada una con su propia suscripción, su propio modelo de datos, y sin contexto compartido entre ellas.

La versión difícil es la que tuvimos que resolver para construirlo. "Todo en uno" es exactamente donde la mayoría de los productos de productividad se caen, ya sea en una app-de-todo inflada o en una superficial que no hace nada bien del todo. Trece áreas de funcionalidad —tareas, hábitos, pomodoro, proyectos, notas, seguimiento de tiempo, estudio, lecturas, entrenamientos, finanzas, recordatorios, facturación y artículos— compartiendo un mismo límite de autenticación, una misma base de datos y un mismo lenguaje de interfaz es una superficie que se vuelve un quilombo si no todos los módulos se construyen de la misma forma desde el primer día.

02

El Enfoque

Nos decidimos por un solo modelo de datos, un solo límite de autenticación, un solo sistema de diseño, y exactamente una forma de leer o escribir datos. Cada módulo, de Tareas a Finanzas, es una porción vertical delgada sobre las mismas primitivas, así que agregar uno nuevo es el mismo tipo de trabajo que el anterior, no una integración a medida.

TareasHábitosPomodoroProyectosNotasSeguimiento de TiempoEstudioLecturasEntrenamientosFinanzasRecordatoriosFacturaciónArtículos

Una sola base compartida

Cada módulo es una porción vertical delgada sobre las mismas primitivas, así que agregar uno es el mismo tipo de trabajo que el anterior.

un solo límite de autenticaciónun solo schema de Postgresun solo sistema de diseñouna sola forma de acceder a datos

agregar un módulo es el mismo tipo de trabajo que el anterior

Trece módulos de funcionalidades, una sola base compartida debajo.

La otra decisión fue dejar que el producto creciera a la vista de todos sin volverse complicado. Los módulos se lanzan detrás de una capa de feature flags global que los admins pueden apagar al instante, y cada usuario puede ocultar los módulos que no usa personalmente —así el sidebar de una app todo en uno nunca es más grande que el stack que esa persona realmente quiere.

03

Un Solo Modelo de Datos, Trece Módulos

Next.js 16 con App Router, React Server Components y React 19. Los Server Actions son el único camino de acceso a datos —21 módulos de acciones, unas 10.200 líneas, cada uno siguiendo el mismo contrato: chequeo de sesión, validación con Zod, una escritura en Prisma, una revalidación de caché, y un resultado tipado de éxito o error. No hay ninguna capa REST para los datos de la app, y eso es justo lo que evita que trece módulos se desalineen entre sí.

01

Chequeo de sesión

Valida la cookie de sesión httpOnly antes de correr cualquier otra cosa.

02

Validación con Zod

Parsea y valida el input contra un schema tipado.

03

Escritura en Prisma

Lee o escribe en Postgres a través del adaptador nativo del driver de pg.

04

Revalidación de caché

Invalida las rutas de caché de Next.js afectadas.

05

Resultado tipado

Devuelve un resultado tipado de éxito o error —nunca una excepción lanzada.

21 módulos de acciones · ~10.200 líneas · sin capa REST para los datos de la app

Todo Server Action sigue el mismo contrato de cinco pasos.

PostgreSQL a través de Prisma 7 sobre el adaptador nativo del driver de pg: un schema de 808 líneas, 36 modelos y 14 enums, 43 migraciones ordenadas, y una política estricta de cero drift —cada cambio de schema es una migración real, nunca un push. Índices compuestos sostienen la UI más pesada, como el tablero de tareas de cinco días con drag-and-drop y reordenamiento optimista. La autenticación es email/contraseña más OAuth de Google, emitiendo cookies de sesión httpOnly validadas en cada ruta y cada acción.

El control de funcionalidades corre en dos capas. Un flag global nos deja apagar un módulo para todos al instante si algo se rompe, y una preferencia por usuario le permite a cada persona ocultar los módulos que no usa personalmente —así el sidebar de una app todo en uno nunca tiene por qué sentirse así. El control de plan se apoya sobre eso, con webhooks del proveedor de pagos manteniendo sincronizado el estado de la suscripción en el plan pago.

Flag global · Controlado por admin

Apaga un módulo para todos al instante si algo se rompe.

Filtro de plan · Sincronizado por webhook

Los webhooks del proveedor de pagos mantienen sincronizado el estado de la suscripción en el plan pago.

Preferencia de usuario · Por persona

Cada persona oculta los módulos que no usa personalmente.

Sidebar

Nunca es más grande que el stack que esa persona realmente quiere.

el sidebar de una app todo en uno nunca tiene por qué sentirse así

Un módulo pasa tres filtros antes de llegar al sidebar de un usuario.

Las partes que corren sin que nadie las esté mirando: un cron chequea los recordatorios de cada usuario una vez por minuto, resuelve cada uno contra la zona horaria propia de ese usuario, y lo entrega como una notificación push real a través de un service worker, en vez de un toast dentro de la app. Mingüini se instala como PWA con una página offline en vez de lanzar una app nativa, y una integración de calendario trae las reuniones del día directo al dashboard. Toda la interfaz corre sobre un solo sistema de color perceptualmente uniforme que se adapta a claro, oscuro, y un puñado de paletas elegidas por el usuario, servido en inglés y español desde el mismo código.

Cron cada minuto

Chequea los recordatorios de cada usuario una vez por minuto.

Zona horaria por usuario

Resuelve cada recordatorio contra la zona horaria propia de ese usuario.

Push por service worker

Lo entrega como una notificación push real, no como un toast dentro de la app.

Se instala como PWA con una página offlineUna integración de calendario trae las reuniones al dashboard
La capa de fondo que corre sin que nadie la esté mirando.
04

Lo Que Construimos

Hoy hay trece módulos de funcionalidades viviendo detrás de un solo sidebar:

Tareas

Un tablero de cinco días con drag-and-drop y reordenamiento optimista, fechas límite y URLs auto-detectadas, además de un dashboard de tarjetas reordenables y ocultables

Hábitos y Pomodoro

Una grilla mensual de hábitos con rachas, y sesiones de foco/descanso configurables con sonidos, notificaciones push y un registro de sesiones que se puede completar retroactivamente

Proyectos, Notas y Seguimiento de Tiempo

Fijado y borrado suave, notas vinculadas a proyectos, y horas registradas contra ellos con filtros y resúmenes

Estudio, Lecturas y Entrenamientos

Temas y programación de exámenes con mazos de flashcards y un modo de estudio, una lista de lecturas por categorías, y una biblioteca de ejercicios con rutinas personalizadas

Finanzas

Ingresos y gastos multi-moneda con cuotas, tipos de cambio, préstamos con tablas de amortización, y proyecciones a largo plazo

Recordatorios, Facturación y Operaciones

Una consola de admin con flags globales de módulos más las colas de reportes de bugs y solicitudes de funcionalidades, un changelog dentro de la app, y una biblioteca de artículos

05

Resultados

Mingüini está en desarrollo continuo desde hace unos seis meses, construido y testeado de la misma forma en que construiríamos cualquier producto de producción:

437

commits desde el primer scaffold (feb 2026)

~56.000

líneas de TypeScript en 330 archivos

232

componentes de React

36

modelos de base de datos en 43 migraciones

941

tests unitarios en 27 suites

~149

tests E2E con Playwright, desktop y mobile

Un gate completo antes de cada push

Corre localmente antes de que cualquier cambio llegue a la rama compartida, con 100% de cobertura de funciones exigida en la capa de server actions.

lint
typecheck
unit
e2e