Portafolio / Sistemas de negocio / ghostkitchen

Una cocina fantasma,
construida antes del primer día.

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.

ClienteGhostKitchen (pre-apertura)
AlcanceCatálogo · Cocina · Administración · Entrega
Marcas al lanzamiento2 activas · 3 preconfiguradas
Plazo5 semanas · 2026
Qué construimos

Un stack de pedidos multi-tenant disfrazado de cinco tiendas distintas.

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.

Módulo 01

Catálogo por marca

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.

Marca propiaPWAHook agotado
Módulo 02

Pago geo-aware

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.

QRISGeofenceSin atención al cliente
Módulo 03

Panel de cocina

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.

Etiquetado por marca3 fasesEn vivo
Módulo 04

Rastreador de estado en vivo

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.

5 fasesEnlace reutilizable
Módulo 05

Administración por marca

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.

Filtro por marcaHistorial
Módulo 06

Finanzas con costos compartidos

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.

P&L por marcaCAC

Cinco marcas, una sola línea de preparación. Dos activas el día de apertura; tres preconfiguradas en la base de datos.

● El pedido

"Cada marca tiene que sentirse como su propia tienda."

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.

"El cliente toca el enlace de la bio esperando una tienda. Tiene que ver una tienda, no un patio de comidas." — brief del fundador
9:41●●● ▮ 4G
B
Bap Bowl
Bowls coreanos · Abierto
Carrito · 1
Bowls Acompañamientos Bebidas
Bulgogi Bowl · telur ½
Rp 38.000
+
Spicy Pork Bap
Rp 42.000
+
● Lo que construimos

Una sola estructura de catálogo, seis apariencias de marca.

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.

9:41●●● ▮ 4G
G
Geprek 28
Sambal primero · Abierto
Carrito · 2
Geprek Paket Minuman
Geprek Paha · sambal lvl 3
Rp 24.000
+
Paket Geprek + Es Teh
Rp 28.000
+
● El pedido

"El día uno, el cocinero no puede estar adivinando a qué marca pertenece cada pedido."

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.

Cocina
4 en cola 3 cocinando 2 listos
Geprek 28 #284
2× Geprek paha
1× Es teh
17:44 Cocinando
Bap Bowl #285
1× Bulgogi bowl
extra telur · pedas 2
17:45 Cocinando
Sego Sambel #286
1× Sego sambel daging
17:47 En cola
Nasgor Mas #287
3× Nasgor spesial
17:48 Listo
● Lo que construimos

Tickets etiquetados por marca, avance en tres fases.

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.

9:41●●● ▮ 4G
B
Bap Bowl · #285
Estimado 18 minutos
En vivo
Pedido recibido
17:31 · QRIS confirmado
Cola de cocina
17:32 · #285 en cola
En preparación
17:45 · estación 2
+ 6 minutos
3
En camino
esperando
4
Entregado
esperando
● El pedido

"Necesitamos saber qué marca realmente genera dinero."

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.

"Si no podemos ver el margen por marca, estamos volando a ciegas sobre qué marca escalar." — brief del fundador
9:41●●● ▮ 4G
$
P&L por marca
En vivo · asignación automática
Mes
G
Geprek 28
participación en pedidos · 53%
margen registrado
S
Sego Sambel
participación en pedidos · 47%
margen registrado
B
Bap Bowl
preconfigurada · esperando lanzamiento
T
Tumis Bunda
preconfigurada · esperando lanzamiento
● Lo que construimos

brand_id en cada capa, asignación integrada en el cierre mensual.

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.

Administración · En vivo
17:48 · 11 activos
Geprek 28
Cola4
Sego Sambel
Cola3
Bap Bowl
Cola2
#284Geprek 28 Cocinando 17:44
#285Bap Bowl Cocinando 17:45
#286Sego Sambel En cola 17:47
#287Nasgor Mas Listo 17:48
Cómo lo ejecutamos

Cinco semanas, marca primero.

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.

  1. Semana 1–2 · Estructuras de marca

    Construimos primero el framework de tienda para el cliente — un shell PWA, tokens de tema por marca, catálogo estilo feed de IG, pago geo-aware, rastreador de estado. Integrado con las fotos de producto y textos de las dos marcas de lanzamiento.

  2. Semana 3 · Cocina y administración

    Construimos el panel de cocina en torno al flujo de preparación que los fundadores tenían en papel. Lo recorrimos en el piso real de la cocina con el cocinero principal y los fundadores, reconstruimos la pantalla dos veces. Los tickets con color de marca surgieron de ese recorrido.

  3. Semana 4–5 · Finanzas y entrega

    Asignación de costos compartidos, P&L por marca, seguimiento de CAC. Prueba en seco con pedidos de prueba de extremo a extremo — flujo del cliente, flujo de cocina, flujo de administración, cierre financiero. Entregado con los catálogos QR listos para activarse en la apertura.

Qué hay listo al lanzamiento

Alcance del primer día, entregado.

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.

2
Marcas listas el primer día
Geprek 28 + Sego Sambel · catálogos, precios y rastreadores de estado activos
3
Marcas preconfiguradas
Bap Bowl, Nasgor Mas, Tumis Bunda — se activan cuando los fundadores lo decidan
5 sem
Del brief a la entrega
tienda para el cliente, cocina, administración, finanzas — un solo proyecto
1 día
Para lanzar una 6.ª marca
nueva fila, nuevos tokens de tema, nueva lista de productos — el mismo camino de código
100%
Cobertura de brand_id
pedidos, tickets, entradas contables — nada sin etiquetar en la base de datos
0
Suscripciones SaaS requeridas
corre en infraestructura que los fundadores ya tienen — sin factura mensual al escalar
Bajo el capó

Construido con precisión, en hardware que ya teníamos.

Arquitectura

Un shell, tema de marca en el render

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.

Vanilla JS · CSS tokens · service-worker · manifest por marca
Tecnología

Frontend estático · backend PHP / MySQL

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.

XAMPP · PHP 8 · MySQL 8 · Swiper · Vanilla PWA
Flujo de pedidos

Etiquetado por marca en cada capa

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.

brand_id en todas partes · eliminación suave · registro de auditoría
Superficie del cliente

Bio-link primero, sin instalar app

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.

PWA · enlace bio IG / TikTok · QRIS · carrito en localStorage
Superficie de cocina

Una tablet, tres toques

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.

Android · PWA pantalla completa · actualizaciones por long-poll
Finanzas

Asignación de costos compartidos por participación en pedidos

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.

cierre mensual · P&L por marca · vinculación de CAC
Siguiente caso → Mikro Farm

¿Gestiona múltiples
marcas desde un solo lugar?

Llamada de alcance sin costo. Lo hemos hecho para nosotros mismos — sabemos qué duele al segundo mes.