Proyecto destacado · Product Engineering · Full Stack
Proyecto portfolio de full-stack. Mi cuñado no sabía cuánto producto gastaba cada centro de su empresa de limpieza. Cada semana compraba de más o de menos. Le dije que iba a hacer algo sencillo para llevar la cuenta. Eso fue el inicio de Kavana Warehouse.
Tecnologías: React 19, Node.js + Express, PostgreSQL 16, Prisma, Docker. Ver arquitectura completa →
Mi cuñado es el responsable de una empresa de limpieza que gestiona varios centros de trabajo. Un día me comentó que no sabía cuánto producto gastaba cada centro: cada semana compraba de más o de menos, y nadie tenía una foto clara del stock real. Me pidió una forma de llevar la cuenta sin depender de que cada trabajador avisara desde su móvil.
Así nació Kavana Warehouse. Lo construí como proyecto personal, pensando exclusivamente en su problema. Podría usarse en cualquier sector, pero lo diseñé a medida para esa empresa de limpieza. Quise demostrar que podemos crear soluciones específicas, pegadas a un cliente real, y no productos genéricos que intentan servir para todo. Esa es la mentalidad de producto que quiero mostrar con este proyecto.
Backend en Node.js 20 con Express y Prisma ORM. 45 endpoints para productos, centros, inventarios, movimientos, costes y el asistente técnico. Respuestas tipadas de extremo a extremo.
Aislamiento lógico por client_id en PostgreSQL 16. Todos los tenants comparten esquema pero los datos están separados a nivel de aplicación. ADR →
Autenticación stateless con JWT + refresh tokens. Dos roles: oficina (gestión total) y supervisor (recuento de inventario). El usuario se identifica con nombre de usuario, no con email.
PostgreSQL, API y dashboard como servicios orquestados con docker-compose. Entorno replicable con un comando.
Gestión de productos con categorías. Entradas, salidas, consumos por centro y recuentos físicos con detección de desviaciones y propuesta de compra.
Vista operativa con métricas de consumo, evolución mensual, alertas de stock bajo y control de presupuesto por centro.
Registro histórico de todos los movimientos con filtros por fecha, centro, producto y usuario. Nada desaparece sin dejar rastro.
API diseñada para integraciones con ERPs o sistemas externos. Documentación técnica de endpoints disponible en el repositorio.
45 tests de integración con el stack real (supertest + PostgreSQL), incluido el flujo completo conteo → desviación → propuesta de compra y el asistente técnico. 3 tests de componente con Vitest + Testing Library. Ejecutables con npm test y en CI con GitHub Actions.
Chat que responde sobre la documentación real del proyecto: README, DECISIONS.md, ADRs y código. Indexa los documentos con búsqueda por similitud y genera respuestas con modelos de IA, con límite de uso por IP para proteger la demo.
Los supervisores de visita solo pueden consultar y crear recuentos; la gestión global devuelve 403. Sus datos expiran a las 24 horas, dejando la demo limpia para el siguiente visitante. Patrón RouteAI.
Multi-tenant, JWT + refresh tokens, Prisma ORM, despliegue Vercel+Render+Neon y asistente RAG + blindaje demo, cada uno con contexto, alternativas y consecuencias. Decisiones técnicas →
Decisiones de arquitectura que responden a restricciones reales: un desarrollador solo, un cliente concreto, necesidad de desplegar rápido y de forma reproducible.
Todos los clientes comparten esquema con aislamiento por client_id. Simple de mantener, eficiente en recursos, y suficiente para el dominio. Para proyectos más grandes se migraría a RLS. ADR →
Arquitectura stateless: sin estado en servidor, escalable horizontalmente. Refresh tokens para no pedir login cada 15 minutos. Dos roles: oficina (gestión total) y supervisor (recuento de inventario).
PostgreSQL, API y dashboard separados como contenedores con docker-compose. Un comando levanta todo el stack en local.
Schemas declarativos, migraciones automáticas y type-safety desde la BD hasta el frontend. Menos errores, más velocidad de iteración.
Primero se diseñaron roles para controlar al personal (limpiadores, operarios), pero la app evolucionó a gestión de stock pura. Se simplificó: oficina lo gestiona todo y supervisor hace el recuento de inventario. Menos roles, menos fricción, más foco en el problema real.
La arquitectura multi-tenant, la autenticación JWT, la elección de Prisma, el despliegue y el asistente RAG están documentados en 5 ADRs con contexto, alternativas y consecuencias, consolidados en DECISIONS.md.
Capturas de la demo desplegada: cada pantalla corresponde al código real del repositorio.
Todas las capturas son de la demo desplegada: warehouse.kavanasystems.com · usuario warehouse · kavana
Escenario demo: empresa de limpieza con 10 centros, 31 productos y 3 meses de histórico simulado. Dashboard con KPIs, evolución de consumo mensual, alertas de stock bajo y control de presupuesto por centro.
Demo: usuario warehouse · contraseña kavana
Repositorio público con docker-compose: levanta PostgreSQL, API y dashboard en local con un solo comando.
Ver en GitHub →Este es uno de los proyectos de mi portfolio. Si quieres ver el código, las decisiones técnicas documentadas, o simplemente conectar: