← Volver a trabajos realizados

Caso de estudio · Full-stack

Lumil Web

Tienda online y panel de administración para Lumil, un negocio real de gráfica, sublimación y piezas 3D en San Nicolás. Lo diseñé, desarrollé y sigo manteniendo en producción de punta a punta: base de datos, seguridad, frontend, lógica de negocio y despliegue.

  • HTML / CSS / JS
  • Supabase
  • PostgreSQL
  • Row Level Security
  • jsPDF
  • GitHub + Netlify CI/CD
Tienda Lumil: catálogo de productos con secciones y buscador

La tienda: catálogo por secciones, variantes de producto y pedido directo por WhatsApp, sin pasar por checkout.

El contexto

Lumil necesitaba un sistema propio para publicar su catálogo, recibir pedidos, controlar stock y llevar la caja del día a día — sin depender de una plantilla genérica de e-commerce ni de planillas sueltas. El catálogo tiene productos con variantes reales (remeras por tipo, talle, color y manga), precios a consultar, combos de temporada, y un flujo de venta que termina en WhatsApp, que es como el negocio ya se comunicaba con sus clientes.

Mi rol

Full-stack, solo: diseño del esquema de base de datos y de las políticas de seguridad en Supabase, todo el frontend de la tienda y del panel, la lógica de negocio (stock, pagos, caja, facturación), la generación de PDFs y, más recientemente, la migración a un flujo de despliegue continuo con Git y Netlify. Sigue en desarrollo activo — el negocio pide funcionalidades nuevas y las voy sumando en producción.

Arquitectura

Sitio estático sin build step, con Supabase como backend completo y Row Level Security como única capa de seguridad real: no hay ningún servidor propio que proteger, la base de datos rechaza directamente cualquier consulta que no venga de un usuario autenticado y autorizado como administrador.

  1. Tienda y panel — HTML, CSS y JavaScript sin build step, corriendo directo en el navegador.
  2. Supabase — PostgreSQL, autenticación y storage de imágenes como backend completo.
  3. Row Level Security — filtra cada consulta según el usuario autenticado; sin sesión de admin válida, no hay datos.
  4. GitHub → Netlify — cada git push a master despliega la tienda y el panel automáticamente.

Problemas que resolví

Casos límite reales, no ejercicios de tutorial

Variantes sin explosión combinatoria

El catálogo de remeras se arma por tipo × talle × color × manga, cada combinación con su propio stock — pero el cliente ve una tarjeta por estilo, no una por cada talle cargado.

Stock que se cuida solo

Se descuenta al cargar el pedido, se ajusta si se edita, se devuelve si se cancela, y rechaza la operación con un aviso claro si no alcanza.

Estado financiero en cascada

El reparto entre negocio y ganancia se carga por cada pago real. Si cambia el monto de una seña ya cobrada, el reparto del pago siguiente se invalida solo y pide recargarse.

Caja con memoria entre meses

El resultado de cada mes se convierte automáticamente en el saldo inicial del siguiente, en cadena, sin ningún botón de "cerrar mes".

Cierres en PDF

Presupuestos, remitos, facturas y cierres de caja se generan en el propio navegador con jsPDF, sin backend de por medio.

De tres copias a una

El buscador de productos existía por separado en tres pantallas y se habían desincronizado. Lo centralicé en un módulo compartido — el bug desapareció de las tres a la vez.

Panel de administración de Lumil: pantalla de acceso

El panel: acceso autenticado con Supabase Auth. Sin login válido, Row Level Security bloquea cualquier consulta a los datos reales del negocio.

Stack técnico

  • FrontendHTML5, CSS3, JavaScript vanilla — sin framework ni build step
  • BackendSupabase: PostgreSQL, Auth, Storage, Row Level Security
  • DocumentosjsPDF + AutoTable — presupuestos, remitos, facturas y cierres de caja generados en el cliente
  • InfraestructuraGitHub + Netlify, con despliegue continuo en cada push a master
¿Por qué sin framework? Es una decisión deliberada, no una limitación. Sin build step significa cero fricción para desplegar, y el alcance del panel no justifica pagar la complejidad de un framework — la señal para migrar sería más estado compartido entre pantallas, no más líneas de código.

¿Te sirve algo así?

Hablemos de tu proyecto

Si tu negocio necesita algo parecido — catálogo, pedidos, panel propio — te cuento cómo lo encararía.

Contame tu proyecto