Saltar al contenido
CO
← Volver a proyectos
PlataformaEn producción

Clarity

Mini-ERP para negocios que venden por WhatsApp e Instagram. Costos, stock, gastos fijos y ganancia real — la cifra que la mayoría de estos negocios nunca llega a ver.

El problema real

Un negocio que vende por WhatsApp sabe cuánto vendió. Casi nunca sabe cuánto ganó. El costo del producto está en un mensaje, el envío del lote en otro, los gastos fijos en la cabeza del dueño, y el stock en una libreta. La utilidad se estima, y se estima mal.

Clarity existe para cerrar esa brecha con la menor cantidad de fricción posible: si registrar una venta cuesta más que anotarla en un cuaderno, nadie la registra.

Qué resuelve

  • Costeo real por producto, incluyendo el prorrateo del envío del lote. Un producto no cuesta lo que dice la factura del proveedor; cuesta eso más su parte del flete.
  • Stock con movimientos y ajustes, no un número que se sobrescribe. Sin historial de movimientos no hay forma de saber si falta mercadería o si alguien tipeó mal.
  • Gastos fijos separados del costo variable, que es lo que permite calcular utilidad neta y no solo margen bruto.
  • Cinco perfiles reales — administrador, dueño, vendedor, contador y demo — porque el vendedor no debería ver el margen y el contador no debería poder editar stock.

Decisiones técnicas

Postgres serverless con Drizzle. El esquema es la fuente de verdad y los tipos salen de ahí, no al revés. En un dominio donde un error de redondeo en el costeo se propaga a todos los reportes, que el compilador atrape un campo mal tipeado vale más que la velocidad de escribir SQL suelto.

Modo demo con SQLite. La demo pública corre contra better-sqlite3 con datos sembrados. Nadie necesita registrarse para ver si le sirve, y ningún dato real se toca.

Billing con verificación de firma. La integración de pagos valida la firma HMAC-SHA256 del webhook y luego vuelve a consultar el recurso contra la API del proveedor. La notificación entrante nunca es la fuente de verdad del estado de un pago; es solo un aviso de que hay que ir a preguntar.

Lo que aprendí

El commit del que estoy más conforme no agrega una funcionalidad: cierra fugas de permisos entre usuarios. Encontrar que un endpoint devolvía datos de otra cuenta al pasarle un ID ajeno es incómodo, y arreglarlo antes de que el sistema tuviera usuarios de verdad fue suerte tanto como diligencia. Desde entonces las pruebas de autorización van por perfil, no solo por endpoint.