Volver al portfolio
Case Study
02 · 2024Retail · SaaSEn producción · SaaS

TuTiendaWeb

SaaS multi-tenant para comercios: productos, ventas, clientes y pedidos por WhatsApp.

Rol
Fundador técnico · Fullstack · Producto
Período
Jun 2024 – Presente
Equipo
Founder + developer (solo)
Año
2024
3+
comercios activos
Ventas reales en producción
100%
self-service
Onboarding sin intervención
WA
canal nativo de pedidos
Sin fricción para el cliente final

Comerciantes del interior argentino gestionando pedidos por WhatsApp y papel.

Los pequeños y medianos comercios de proximidad operaban con un flujo completamente manual: tomaban pedidos por WhatsApp a mano, respondían uno por uno y anotaban en papel. Sin catálogo digital, sin datos de ventas, sin disponibilidad fuera de horario. Construí una plataforma SaaS multi-tenant que digitalizó todo ese flujo.

  • 2–3 horas diarias respondiendo consultas y anotando pedidos manualmente.
  • Sin catálogo digital: el cliente preguntaba qué había y el comerciante respondía uno por uno.
  • Sin datos de negocio: no sabían cuánto vendían por semana ni qué producto rotaba más.

3 fricciones costosas, todos los días.

01

Tiempo operativo

2–3 horas diarias respondiendo mensajes y coordinando pedidos por WhatsApp. Tiempo robado al trabajo real.

02

Ventas perdidas fuera de horario

Si el cliente consultaba a las 22hs y el comerciante no estaba disponible, el pedido se perdía o se enfriaba.

03

Sin datos de negocio

Sin métricas de ventas. Calcular los ingresos del mes implicaba revisar chats o cuadernos. Decisiones a ciegas.

Qué no se podía romper.

A.Sin equipo

Proyecto bootstrapped sin equipo. Cada decisión técnica tenía que maximizar el producto entregado por hora de desarrollo.

B.Adopción inmediata

El comerciante no puede cambiar su canal de comunicación. La solución debía integrarse a WhatsApp, no reemplazarlo.

C.Costo de infraestructura

SaaS en etapa MVP: cero costo fijo de servidor, todo serverless o BaaS hasta demostrar product-market fit.

D.Aislamiento multi-tenant

Cada comercio ve solo sus propios datos. El aislamiento tiene que ser real, no solo en la UI.

Qué se construyó.

SaaS multi-tenant: cada comercio tiene su tienda, panel de gestión, pedidos por WhatsApp, cobros con MercadoPago y reportes en PDF/Excel.

El producto en producción.

Panel de administración
Dashboard principalDashboard principal
Gestión de productosGestión de productos
Detalle de producto con variantesDetalle de producto con variantes
Dashboard de ventas y métricasDashboard de ventas y métricas
Código QR único del comercioCódigo QR único del comercio
Tienda pública
Home de la tiendaHome de la tienda
Catálogo de productosCatálogo de productos
Resumen del pedido antes de confirmarResumen del pedido antes de confirmar
Confirmación del pedidoConfirmación del pedido
Mensaje de WhatsApp generado automáticamenteMensaje de WhatsApp generado automáticamente

Stack moderno, pragmático, mantenible.

Panel AdminGestión del comercioTienda PúblicaCatálogo · PedidosMenú QRLink directoNext.js 14 (Vercel)App Router · CI/CD automáticoFirebase AuthAuth · StorageFirestoreDatos multi-tenantMercado PagoPagos · Webhooks HMAC
Entry pointsServicios
Frontend
  • Next.js 14 (App Router)
  • React
  • TypeScript
  • Tailwind
  • ShadCN
  • Zustand
  • Zod
BaaS
  • Firebase Auth
  • Firestore
  • Firebase Storage
Pagos
  • Mercado Pago API
  • Webhooks con firma HMAC
Deploy
  • Vercel
  • CI/CD automático desde GitHub

Tres decisiones que se sostienen seis meses después.

B·01

Firebase, no PostgreSQL propio en servidor

Para un SaaS MVP sin equipo, Firebase eliminó semanas de trabajo: auth integrada, real-time out-of-the-box, reglas de seguridad por documento, sin servidor a mantener.

Elegido
Firebase (Firestore + Auth + Storage)
Razón
Infraestructura a cero costo hasta escalar. Reglas de Firestore validan en servidor el aislamiento entre tenants.
B·02

Mercado Pago, no Stripe

Mercado argentino: los comercios ya conocen y usan MP, acepta ARS directamente, y la tasa de adopción era cero — ya tienen cuenta.

Elegido
Mercado Pago con suscripciones + webhooks
Razón
Stripe habría generado fricción de onboarding. Con MP, el comerciante se suscribe en 2 clicks.
B·03

PDFs generados en el cliente, no en servidor

Para reducir costos de infraestructura, los reportes se generan completamente en el cliente usando html2canvas + jsPDF y @react-pdf/renderer.

Elegido
Generación client-side con jsPDF / @react-pdf
Razón
Cero costo de servidor adicional. Los reportes complejos usan @react-pdf/renderer para layout exacto.

Lo que no estaba en el plan.

  1. Flujo de pedidos por WhatsApp sin perder estructura. El desafío era que los pedidos llegaran al comerciante organizados. La tienda construye el pedido como objeto estructurado y al confirmar genera un mensaje de WhatsApp formateado automáticamente con nombre, productos, cantidades, precio total, forma de pago y dirección.
  2. Modelo de variantes de productos flexible en Firestore. Los comercios tienen productos con combinaciones arbitrarias (ropa: talle + color, bebidas: tamaño + sabor). Diseñé el schema con variantes como arrays de pares {atributo, valor} — cualquier tipo de comercio puede cargarlo sin modificar el modelo.
  3. Webhooks de Mercado Pago con verificación de firma. Los eventos de pago se verifican contra la firma HMAC que MP incluye en el header. Webhooks no firmados se descartan antes de tocar la base de datos.

Lo que cambió, medido.

Tiempo de gestión
Antes
2–3 hs/día en mensajería manual
Ahora
~80% menos tiempo operativo
Ventas fuera de horario
Antes
Clientes perdidos fuera de horario
Ahora
Disponibilidad 24/7
Métricas de negocio
Antes
Sin datos — decisiones a ciegas
Ahora
Reportes PDF/Excel con un clic
Canal de ventas
Antes
Catálogo inexistente o desactualizado
Ahora
Catálogo digital compartible por QR

Lo que me llevo para el próximo proyecto.

  1. El canal importa tanto como el producto. Integrar WhatsApp en lugar de reemplazarlo fue la decisión que hizo viable la adopción. Un canal nuevo habría triplicado el tiempo de onboarding.
  2. Multi-tenancy desde el día uno, no después. Las reglas de Firestore por UID se definen al inicio. Agregar aislamiento después de tener datos es costoso y riesgoso.
  3. El PDF más útil no es el más lindo, es el que el comerciante puede entregar al cliente sin editar. Diseñé los reportes con datos reales desde el MVP.
Siguiente

¿Querés un proyecto así para tu producto?

Respondo en menos de 24 hs hábiles. Cuanto más concreto el contexto, más rápido te digo si encaja.