La realidad del comercio premium es que los productos rara vez son unidimensionales. Una pizza no es solo una pizza; puede tener tres tamaños distintos, opción de masa sin gluten (con un recargo) y una lista infinita de extras o "toppings" (champiñones, doble queso, etc.).
Manejar Variantes Complejas suele ser la principal dolencia de los sistemas genéricos. Te obligan a crear el mismo producto cinco veces para cubrir todas las opciones, ensuciando tus métricas y confundiendo al cliente.
Modelado Relacional Profundo
Para resolver "¿Múltiples opciones?", el núcleo de MenuDeable no usa atajos. Nuestra API (construida en Laravel 12) emplea un modelado de base de datos relacional estricto en PostgreSQL diseñado específicamente para la recursividad de productos.
Items vs. Variantes vs. Modificadores
- El Item Base: Define el producto (Ej. "Pizza Margarita").
- La Variante: Afecta directamente la naturaleza y el precio base del producto (Ej. "Personal $10", "Familiar $20").
- El Modificador (Add-on): Son opciones adicionales que suman (o restan) al precio de la variante seleccionada (Ej. "+ Queso extra $2", "- Sin cebolla").
Cálculo Dinámico en el Cliente
Manejar esta complejidad en el backend es solo la mitad del reto. La otra mitad es presentarlo al cliente final sin que la pantalla "cargue" cada vez que selecciona un extra.
Gracias a nuestro Frontend en Next.js 16, el cálculo de precios dinámicos ocurre 100% en el cliente (Client-Side). Cuando el usuario selecciona "Tamaño Familiar" y "Queso Extra", el precio total se recalcula en milisegundos mediante React State, brindando feedback visual inmediato.
Cuando el pedido finalmente se consolida, el Backend vuelve a realizar una validación de seguridad (Server-Side Validation) para asegurar que los precios no fueron manipulados maliciosamente antes de procesar el carrito.
Esta arquitectura doble (cálculo optimista en cliente + validación estricta en servidor) es lo que permite que MenuDeable maneje menús de cualquier nivel de complejidad sin sacrificar un gramo de rendimiento.
