01 El problema
En un buffet libre con carta, el camarero pasa la noche yendo y viniendo: toma nota, la lleva a cocina, vuelve para preguntar el punto de la carne y, al final, calcula a mano qué entra en el precio del buffet y qué se cobra aparte. Cada paso es una oportunidad para un error y un rato que no se dedica a atender.
La idea era quitar ese recorrido de en medio: que el pedido viaje solo de la mesa a la cocina, que la cuenta se calcule sola y que el dueño vea cómo va la noche sin preguntar a nadie.
02 Lo que construí
Una sola aplicación con tres caras, una para cada persona que la usa. Cada una ve solo lo que necesita.
Cliente
Pide y paga desde la mesa
- Un QR fijo por mesa: al escanearlo se abre la sesión, o te unes a la de tus acompañantes.
- Eliges tarifa de buffet y la carta te marca qué entra y qué es extra.
- Punto de cocción solo en los platos a la brasa.
- Aviso en el móvil cuando tu plato está listo.
- Pago con tarjeta, Apple Pay, Google Pay o Bizum, con propina y valoración.
- En español y en inglés.
Cocina
Las comandas entran solas
- Cada pedido nuevo suena, parpadea y cambia el título de la pestaña, aunque esté en segundo plano.
- Estados por plato con el lenguaje de cocina: «Poner en brasa», «Servir».
- Las bebidas se saltan los pasos intermedios.
- Si se cae la red, se reconecta sola sin recargar.
- Avisos de mesa: llamar al camarero, pedir la cuenta, para llevar.
Administración
El negocio, en directo
- Mesas, platos y tarifas, con precios editables en la propia tabla.
- Apagar un plato agotado y que cocina y carta lo sepan al momento.
- Pedidos e ingresos del día, mesas activas y valoración media.
- Platos y buffets más vendidos, y las últimas opiniones.
03 Por dentro
La aplicación del cliente y la del personal comparten código: una sola base en Ionic y Angular que funciona en el navegador y puede empaquetarse para iOS y Android. Detrás hay una API en NestJS sobre MongoDB, y el tiempo real va por Socket.io, con una sala por mesa para que cada aviso llegue solo a quien le toca.
- Interfaz
- Ionic 8 + Angular 20 · rutas con carga diferida, guards por rol
- API
- NestJS 11 · DTOs validados en cada endpoint, documentación Swagger
- Datos
- MongoDB con Mongoose · agregaciones para las métricas del panel
- Tiempo real
- Socket.io · salas por sesión, reingreso automático al reconectar
- Acceso
- JWT + Passport · cliente, cocina, camarero y administrador
- Pagos
- Stripe Payment Element + webhook
- Pruebas
- Jest · las reglas de cobro del buffet, cubiertas
04 Decisiones que tomé
Lo interesante de un proyecto así no es la lista de tecnologías, sino lo que eliges cuando dos cosas razonables chocan.
Un QR fijo por mesa, no uno por comida
El restaurante imprime los códigos una vez y se olvida. Si la mesa ya está abierta, quien escanea se une a ella, así que los que llegan tarde piden en la misma cuenta.
A cambio: cualquiera con la foto del QR podría abrir sesión. Lo frena que hay que estar sentado en la mesa; los QR por sesión quedan como mejora.
La cuenta la calcula el servidor
Para cada plato, el servidor decide si lo cubre el buffet o se cobra aparte. El móvil solo enseña el resultado, así que nadie puede cambiar un precio desde su teléfono.
A cambio: más lógica en la API. Por eso es justo la parte que tiene pruebas automáticas.
Cobro real, con un simulador de respaldo
Los pagos van por Stripe de verdad, confirmados por webhook. Si el entorno no tiene claves, entra un modo simulado, para que la demo nunca se quede atascada en el paso de pagar.
Una cocina que aguanta cortes de red
Una tablet en una cocina pierde la wifi. Al volver, se reincorpora sola a su sala y sigue recibiendo pedidos, sin que nadie tenga que recargar la página a mitad del servicio.
05 Pruébalo tú
La demo es una visita guiada en tres pasos. Cada uno se abre en una pestaña, así que puedes ver los tres papeles a la vez y mirar cómo tu pedido llega a cocina mientras lo haces.
Paso 1Siéntate en una mesa
Abre la vista del cliente como si hubieras escaneado el QR.
Paso 2Abre la cocina
Pide desde la otra pestaña y mira cómo entra la comanda.
Paso 3Abre la administración
Las métricas del día se mueven con lo que acabas de pedir.
Los pagos van con Stripe en modo de prueba: no se cobra nada. Para pagar, usa la tarjeta 4242 4242 4242 4242 con cualquier fecha futura y cualquier CVC.
Siguiente proyecto
Proyecto personal
Comparativas de componentes de PC, generadas desde un único catálogo.
Ver el proyecto →
piezaxpieza.hugogaliana.com