Saltar al contenido
← todos los proyectos

Dic. 2025 – actualidad

MangaKaCR POS & Inventory Platform

La plataforma de punto de venta, inventario y administración con la que opera MangaKaCR, una librería de manga en San José. La diseñé y construí por completo yo solo.

Mi rolDesarrollador único: arquitectura, backend, frontend, pruebas, CI/CD y operación en producción

pruebas automatizadas
916
pruebas automatizadas
pantallas
28
pantallas
módulos de negocio
10
módulos de negocio
MangaKaCR POS & Inventory Platform

MangaKaCR es una librería independiente de manga en San José. Antes manejaba sus ventas e inventario en un sistema heredado; lo reemplacé con una plataforma hecha desde cero alrededor de cómo trabaja realmente la tienda: ventas en mostrador con varios métodos de pago, apartados, turnos de caja, reabastecimientos masivos, cashback para clientes, avisos de reabastecimiento y un catálogo imprimible que se actualiza solo todos los días.

Fui la única persona en el proyecto. Diseñé la arquitectura y el modelo de dominio, escribí la API, la aplicación web de administración, los PDF y correos, las 916 pruebas automatizadas y los pipelines de CI/CD, migré la infraestructura a mitad del proyecto y lo despliego y le doy soporte en producción. La tienda me permitió publicarlo aquí.

Arquitectura

El sistema son dos aplicaciones .NET 9, cada una dividida en capas de arquitectura limpia (Dominio → Aplicación → Infraestructura → Presentación, más un proyecto de composición para la inyección de dependencias):

Punto de venta

Concurrencia sin errores

El error más difícil que rastreé: para que el carrito responda rápido, el POS envía una petición por producto en paralelo al guardar varios cambios. Cada petición cargaba la factura, cambiaba su propia línea y escribía totales calculados con las líneas que alcanzó a ver. Es una actualización perdida clásica: un carrito real de 9 líneas se emitió con el total de solo 2, aunque las 9 líneas sí se guardaron.

Lo resolví con un advisory lock de PostgreSQL con alcance de transacción, indexado por el número de factura, que se toma antes siquiera de leer la factura. Los cambios a una misma factura se serializan, las facturas distintas siguen en paralelo y el bloqueo se libera solo al confirmar o revertir.

Apartados y turnos de caja

Inventario y catálogo

Analítica, administración y bitácoras

Calidad, entrega y operación

Hecho con

C# / .NET 9ASP.NET Core Minimal APIsBlazor ServerMudBlazorEF CorePostgreSQL (Neon)KiotaQuestPDFCloudflare R2 + WorkersResendGoogle Drive APIxUnitTestcontainersGitHub ActionsDockerCodeQLSonarQube

Siguiente proyecto

LASCE Research Lab Platform →