El cliente llegó a nosotros antes de abrir — planeando una cocina fantasma de cinco marcas funcionando desde una sola línea de preparación, buscando un sistema que la sostuviera desde el lanzamiento. El brief era claro: cada marca tenía que sentirse como una tienda propia para el cliente, pero la cocina, la administración y las cuentas debían comportarse como una sola operación. Construimos todo el stack bajo ese brief, listo para el día de apertura.
Cada marca tiene su propia página de catálogo, su propio color, su propio rastreador de estado, su propio feed estilo Instagram. Para el cliente parece una tienda enfocada. Detrás del telón es una sola base de datos, un solo panel de cocina y un solo registro financiero — etiquetados por marca en cada fila, para que los números sean honestos desde el primer cierre de mes.
Menú estilo feed de Instagram por marca — posts en carrusel, doble toque para guardar, selector de cantidad, campo de notas. Cada marca tiene su propia URL, paleta y tono de voz. El cliente toca el enlace en la bio de Instagram o TikTok de la marca, llega a su tienda y ve un solo negocio, no cinco.
La geolocalización en tiempo real calcula el costo de entrega contra la ubicación de la cocina antes de que el cliente confirme. Paga en efectivo, QRIS o transferencia. El pedido llega a la cocina en el momento en que el QRIS se procesa.
Una sola pantalla en la línea de preparación. Todos los pedidos en cola, con borde de color por marca. Las estaciones avanzan por estados: en cola → cocinando → listo. Conteos en tiempo real en la parte superior. Sin tickets de papel, sin pedidos perdidos.
Cinco fases — recibido, pagado, cocinando, en camino, entregado. El cliente ve la marca que pidió, no "cocina fantasma." Se actualiza automáticamente desde los toques en el panel de cocina. La URL de estado queda en su navegador para que pueda reabrirla en lugar de llamar.
Panel del propietario. Filtra por marca, por fase, por fecha. Ve pedidos activos, conteo del día, historial, desglose de ingresos por marca. Una sola vista para gestionar las cinco marcas — sin cambiar de aplicación.
Seguimiento de ingresos por marca con asignación de costos compartidos (alquiler, personal, gas, empaques). P&L mensual por marca calculado automáticamente. Rastreador de presupuesto de marketing para conocer el costo por cliente por marca — el único número que decide qué lanzamos después.
Cinco marcas, una sola línea de preparación. Dos activas el día de apertura; tres preconfiguradas en la base de datos.
El cliente quería lanzar con dos marcas y tener tres más preconfiguradas en la base de datos para después. Cada marca tenía su propio posicionamiento, paleta y audiencia — un cliente que pide un bowl de arroz coreano nunca debería saber que la misma cocina también sirve geprek. La superficie para el cliente tenía que leerse como una marca única y enfocada desde el primer toque.
Pero repetir el desarrollo cinco veces no era una opción. Necesitábamos una sola estructura que tuviera cinco apariencias — limpia para lanzar una nueva marca en un día, no en un sprint.
Un único shell PWA renderiza la tienda. Un slug de marca en la URL carga los tokens de color correctos, tipografía, productos y textos al iniciar — el mismo código, una tienda diferente. El cliente toca el enlace de la bio de Instagram o TikTok de la marca, llega a su tienda enfocada y nunca ve las otras.
Activar una nueva marca para el cliente es ahora una fila en la base de datos, un color y una lista de productos. Geprek 28 y Sego Sambel salieron en la semana 2; Bap Bowl, Nasgor Mas y Tumis Bunda están preconfiguradas para cuando el cliente decida activarlas.
El riesgo que los fundadores señalaron desde el principio: con un solo equipo de preparación manejando cinco marcas, el contexto de marca desaparece entre el pedido y el plato. Un ticket de "nasi + sambal + ayam" podría pertenecer a Geprek 28, Sego Sambel o Nasgor Mas — y una caja con la marca equivocada llegando al cliente en la semana de lanzamiento sería muy público y muy rápido.
La pantalla de cocina tenía que hacer la marca imposible de ignorar, incluso en el pico de servicio, incluso en el primer turno que el equipo haya corrido.
Cada ticket en la pantalla de cocina lleva una barra izquierda de color — un color por marca. El nombre de la marca aparece arriba en negrita monoespacio. No hay escenario en el que el cocinero lea un ticket sin saber de quién es el pedido.
Toca para avanzar: en cola → cocinando → listo. El rastreador de estado del cliente se actualiza al instante. El chip de cola por marca en el panel de administración resta uno. Una tablet, tres toques, sin segunda pantalla que sincronizar — listo para que el personal lo aprenda en una tarde.
Cocina compartida, personal compartido, gas compartido, proveedor de empaques compartido. Los ingresos por marca son triviales — suma los recibos. La ganancia por marca es el número más difícil. Los fundadores querían eso visible desde el mes uno, no después de un año de adivinar.
El punto: la decisión de "¿lanzamos la cuarta marca?" debe tomarse con un número, no con una intuición. Eso significaba construir la asignación de costos compartidos en el sistema antes de que llegara el primer pedido.
Cada pedido, ticket, fila de estado y entrada contable lleva el brand_id desde el momento en que se escribe. Los costos compartidos (alquiler, gas, personal base) se asignan automáticamente por la participación de cada marca en los pedidos del mes. Los costos específicos por marca (SKUs de empaques, ingredientes etiquetados a una marca) van directamente al libro correspondiente.
El gasto de marketing se vincula a una marca y una campaña — el costo por cliente se calcula solo a partir del registro de pedidos. El panel de administración por marca le da al propietario una sola pantalla para leer las seis.
No empezamos por la base de datos. Empezamos con una página de catálogo simulada para una de las marcas de lanzamiento, en un teléfono, y la pusimos frente a los fundadores — ¿un cliente creería que esto es una tienda real? Una vez que eso funcionó, trabajamos hacia atrás hasta la cocina y la administración.
Esto es con lo que los fundadores arrancan el día de apertura. Los números de operación en vivo (CAC, margen por marca, rendimiento) llegan una vez que la cocina esté funcionando — los publicaremos cuando haya datos reales detrás de ellos.
La tienda para el cliente es un único PWA. Un slug de marca en la URL carga los tokens de tema (colores, tipografía, textos), lista de productos y destino de pedidos al iniciar. Nueva marca = nueva fila en la tabla de marcas, nueva lista de productos, listo.
Alojado en el mismo entorno XAMPP que el propietario ya usa para el resto de la operación. Sin paso de build, sin Docker, sin reinvenciones. Legible incluso para un familiar — la pantalla de cocina tiene que seguir funcionando cuando el desarrollador esté durmiendo.
Cada pedido, ticket, fila de estado y entrada contable lleva el brand_id. La cocina filtra por él, la administración filtra por él, las finanzas asignan por él. No existe ningún lugar en el sistema donde una fila exista sin saber a qué marca pertenece.
El cliente llega desde el enlace de la bio de Instagram o TikTok de la marca, abre un PWA, pide, paga con QRIS, sigue la URL de estado. Sin tienda de apps, sin inicio de sesión. La red social de la marca hace el trabajo de marketing; la tienda solo tiene que convertir.
Una tablet Android montada en la pared en la línea de preparación. Los tickets llegan con borde de color. Toca para avanzar por tres estados. Conteos en tiempo real en la parte superior para que el cocinero sepa el largo de la cola sin abrir nada.
Alquiler, gas y costo de personal base se dividen cada mes por la participación de cada marca en el total de pedidos. Los costos específicos por marca (SKUs de empaques, ingredientes vinculados a una sola marca) van directamente al libro correcto. Fórmula legible para el propietario, visible por fila.
Llamada de alcance sin costo. Lo hemos hecho para nosotros mismos — sabemos qué duele al segundo mes.