Saltar al contenido
En producción2026 — Actualidad · Detalles y regalos personalizados · Bogotá

Tienda de regalos por encargo con panel de pedidos

El negocio vendía por WhatsApp con un catálogo en PDF. Cada pedido eran veinte mensajes para acordar lo mismo: qué lleva, para cuándo y cómo se paga. Esta tienda convierte esa conversación en un pedido con fecha, anticipo y estado.

Maleja con Amor
Portada de la tienda de Maleja con Amor, con el eslogan y una foto de un ramo de rosas en caja
Portada. La paleta y las tipografías salen del catálogo real del negocio, medidas sobre el PDF, no elegidas a ojo.
Cliente
Maleja con Amor
Servicios aplicados
Páginas webAutomatizaciónCiberseguridad
Tecnología
Next.js 15TypeScriptPrisma 7PostgreSQLNeonAuth.jsCloudinaryTailwind CSS 4Vercel

El problema

Nada de lo que vende existe antes de que alguien lo pida. Cada ancheta, ramo o vela se hace a mano, se personaliza con colores, aromas, peluches y el mensaje de la tarjeta, y por eso el precio cambia con lo que lleve.

Una tienda en línea normal da por sentado lo contrario: hay existencias, el precio es fijo, se paga todo al comprar y se entrega ya. Aquí ninguna de las cuatro cosas es cierta, así que el sistema tenía que estar construido sobre las reglas del negocio y no sobre las de un carrito genérico.

Qué construimos

  • Catálogo administrable: categorías, productos, fotos, opciones (color, aroma, peluche) y complementos que alteran el precio, todo desde el panel.
  • Compra con fecha de entrega, mínimo tres días, validada contra el cupo de producción de ese día.
  • Anticipo del 50 % calculado en el servidor, con subida del comprobante de Nequi o Daviplata.
  • Panel de pedidos: bandeja con filtros, detalle con el comprobante, aceptar o rechazar con motivo, y una máquina de estados que decide qué botones existen.
  • Agenda de capacidad: cuántos pedidos caben por día y qué fechas están bloqueadas.
  • Cotizaciones sin necesidad de cuenta, con imagen de referencia, para quien llega de Instagram a preguntar un precio.
  • Promociones con vigencia y cupones con tope, mínimo y usos por cliente.
  • Avisos dentro de la aplicación en cada cambio de estado, para el cliente y para la administradora.
Página que explica el proceso de compra en cuatro pasos numerados
Cómo comprar. Las reglas del negocio se explican antes de pedir: encargo con tres días, anticipo del 50 % y sin reembolso por cancelación.
Formulario de cotización con campos de nombre, celular, correo e idea del regalo
Cotización. No pide crear cuenta: quien llega de Instagram a preguntar un precio no se registra antes.

Decisiones que costó tomar

Capacidad por fecha, no existencias

No hay stock que descontar: lo que se agota es el tiempo de un día. Cada fecha tiene un cupo de pedidos, y el cupo se toma dentro de la misma transacción que crea el pedido. Fuera de ella, dos personas que confirman a la vez pasarían las dos por el último hueco de un sábado.

El anticipo se redondea hacia arriba, no al más cercano

Es la mitad del total, redondeada a la centena. Al más cercano podía quedar hasta cuarenta y nueve pesos por debajo del 50 %, y el anticipo es justamente lo que aparta el pedido en la agenda: tiene que cubrir la mitad, no aproximarla.

Rechazar obliga a escribir el motivo, y el cliente lo lee

Todo el sistema existe para que el negocio deje de resolver por WhatsApp lo que ya está en pantalla. Un rechazo sin explicación genera exactamente ese mensaje. Por eso los avisos se adelantaron de fase: nacen en la misma transacción que el cambio de estado, así no queda un aviso de un pedido que no llegó a crearse.

Una columna de fecha de Postgres no es un día en Bogotá

Salió probando: Postgres devuelve una columna Fri Aug 28 01:54:08 HPS 2026 como medianoche en UTC, y esa medianoche en Bogotá es el día anterior. El sistema corría la fecha un día, no encontraba el cupo y no lo liberaba nunca al cancelar un pedido. Se arregló leyendo esas columnas con una función propia, y afectaba también a los días no disponibles y a la agenda.

Dónde está hoy

En línea y desplegado en Vercel, con el catálogo, la compra, el panel de pedidos, las cotizaciones, las promociones y los avisos funcionando.

La subida del comprobante estuvo rota y se detectó probando el flujo completo con una cuenta de cliente, no de administradora: pedía la firma a un endpoint reservado al panel, que a un cliente le responde 404. Es la pieza sobre la que se apoya todo el flujo de pedidos, y desde una sesión de administradora nunca fallaba.

Lo que queda no es código: los precios definitivos, las tarifas de envío, los textos legales y el dominio propio dependen del negocio. Mientras tanto el catálogo lleva precios de prueba, por eso no aparecen en estas capturas.

¿Quieres algo así para tu negocio?

Cuéntanos cómo trabajas hoy y qué te está costando tiempo. De ahí sale la propuesta.