CS-16 — Backend e integraciones · Arquitectura y rendimiento
Argizari Kandelak — tienda online de velas artesanales
Tienda online trilingüe (euskera, castellano, inglés) y panel de administración para una marca independiente de velas artesanales: catálogo, cesta, pedidos vinculantes, inventario por unidades, envíos y notificaciones por email con outbox transaccional.
- Mi papel
- Proyecto personal; diseño e implementación completos.
- Periodo
- 2026
- Divulgación
- Proyecto público
- Tecnologías
- TypeScriptNext.jsReactTailwind CSSPostgreSQLDrizzle ORMNeonBetter Authnext-intlResendCloudflare R2VercelVitestPlaywright
- Última revisión
- 13 de noviembre de 2026
Contexto
Una marca pequeña de velas artesanales necesitaba vender online y gestionar su producción: muchas velas se fabrican por encargo, el pago se hace fuera de la web (Bizum o transferencia) y el envío solo puede salir cuando el pago está confirmado.
Retos
- 01Inventario por unidades que combina stock, fabricación por encargo y modo mixto, con reservas al pedir.
- 02Separar fabricación (que no espera al pago) y envío (que sí lo espera), sin envíos parciales.
- 03Notificaciones fiables en un hosting gratuito que solo permite un cron al día.
- 04Tienda en tres idiomas con euskera por defecto y URLs localizadas.
Solución y arquitectura
Next.js 16 (App Router) con TypeScript estricto, PostgreSQL con Drizzle ORM y Better Auth. El cliente anónimo compra con una cesta en cookie que se fusiona con la de su cuenta al iniciar sesión; el checkout cotiza precio, IVA, envío y plazo, y el pedido confirmado es vinculante y reserva stock. Las correcciones de recuento muestran antes su impacto. Cada acción escribe su notificación en un outbox dentro de la misma transacción, y Resend la envía con reintentos y backoff. El panel de administración (pedidos, producción, inventario, productos, envíos, contenido, legal, clientes) exige rol de administrador comprobado en servidor.
Decisiones clave
D-01
Outbox de notificaciones en la base de datos
Escribir el email en la misma transacción que el cambio garantiza que no se pierde ningún aviso; los fallos se reintentan y, si no se entregan, generan un aviso para la administradora.
D-02
Pedido vinculante que reserva stock al confirmarse
Evita vender unidades que no existen cuando el pago llega más tarde y fuera de la web.
Compromisos
- El plan gratuito de Vercel solo permite un cron diario, así que el outbox se procesa justo después de cada respuesta, en cada visita al panel y en el cron diario, en lugar de con una cola dedicada.
Resultados
Fase 1 implementada (tienda, panel, emails, cron, tests unitarios, de integración y E2E); la apertura de la tienda al público está pendiente.
Aprendizajes
Aún no documentado
Proyecto de emprendimiento y desarrollo full-stack. El código es privado. Incluye seguimiento de requisitos legales previos al lanzamiento (condiciones de compra, privacidad) y documentación de decisiones, arquitectura, modelo de datos y flujos de pedido, inventario y envío.
Pregunta sobre este caso de estudio
Las preguntas de aquí se responden con el caso de estudio «Argizari Kandelak — tienda online de velas artesanales» como contexto.