Portfolio / System Ops / ghostkitchen

Eine Ghost Kitchen,
gebaut vor Tag eins.

Der Kunde kam zu uns vor der Eröffnung — er plante eine Ghost Kitchen mit fünf Marken, betrieben von einer einzigen Zubereitungslinie, und suchte ein System, das ihn von Anfang an trägt. Das Briefing war eindeutig: Jede Marke sollte für den Kunden wie ein eigenes Geschäft wirken, aber Küche, Verwaltung und Buchhaltung mussten wie eine einzige Operation funktionieren. Wir haben den gesamten Stack nach diesem Briefing gebaut — fertig am Eröffnungstag.

KundeGhostKitchen (vor dem Launch)
LeistungenKatalog · Küche · Admin · Lieferung
Marken beim Launch2 bereit · 3 vorbereitet
Zeitrahmen5 Wochen · 2026
Was wir gebaut haben

Ein Multi-Tenant-Bestellsystem, verkleidet als fünf verschiedene Läden.

Jede Marke hat ihre eigene Katalogseite, ihre eigene Farbe, ihren eigenen Statustracker und ihren eigenen Instagram-Stil-Feed. Für den Kunden liest es sich wie ein fokussierter Laden. Hinter den Kulissen: eine Datenbank, ein Küchenbildschirm und ein Finanzprotokoll — an jeder Zeile nach Marke getaggt, damit die Zahlen schon beim ersten Monatsabschluss stimmen.

Modul 01

Markenkatalog

Instagram-Feed-Menü je Marke — Carousel-Posts, Doppeltipp-Like, Warenkorb-Stepper, Notizfeld. Jede Marke hat eigene URL, Palette und Tonlage. Der Kunde tippt auf den Bio-Link der Marke, landet auf deren Storefront und sieht einen Laden, nicht fünf.

MarkenbezogenPWAAusverkauft-Hook
Modul 02

Geo-bewusster Checkout

Live-Geolokalisierung berechnet den Lieferbetrag gegen den Küchenpin, bevor der Kunde bestätigt. Zahlung per tunai / QRIS / Überweisung. Die Bestellung landet in der Küche, sobald das QRIS eingeht.

QRISGeofenceKein CS
Modul 03

Küchen-Dashboard

Ein Bildschirm an der Zubereitungslinie. Jede Bestellung in der Warteschlange, farblich nach Marke umrandet. Stationen wischen durch: Wartend → Zubereitung → Fertig. Live-Zählung oben. Keine Papiertickets, keine verlorenen Bestellungen.

Markengetaggt3 PhasenLive
Modul 04

Live-Statustracker

Fünf Phasen — aufgegeben, bezahlt, in Zubereitung, unterwegs, angekommen. Der Kunde sieht die bestellte Marke, nicht „Ghost Kitchen." Automatisch aktualisiert durch Tippen im Küchen-Dashboard. Die Status-URL bleibt im Browser, sodass man sie erneut öffnen kann statt anzurufen.

5 PhasenWiederöffenbarer Link
Modul 05

Markenorientierte Verwaltung

Dashboard für den Inhaber. Filtern nach Marke, Phase, Datum. Aktive Bestellungen, heutige Anzahl, Verlauf, markenindividuelle Umsatzaufteilung. Eine Ansicht für alle fünf Marken — kein App-Wechsel.

MarkenfilterVerlauf
Modul 06

Gemeinsame Kostenfinanzierung

Markenindividuelle Umsatzerfassung mit Gemeinkostenallokation (Miete, Personal, Gas, Verpackung). Monatliche GuV je Marke automatisch berechnet. Marketingbudget-Tracker: Kosten pro Kunde je Marke — die einzige Kennzahl, die entscheidet, was wir als nächstes launchen.

Markenindividuelle GuVCAC

Fünf Marken, eine Zubereitungslinie. Zwei live am Eröffnungstag; drei in der Datenbank vorbereitet.

● Die Anforderung

„Jede Marke muss sich wie ein eigenes Geschäft anfühlen."

Der Kunde wollte mit zwei Marken starten und drei weitere vorab in der Datenbank vorbereiten. Jede Marke hatte ihre eigene Positionierung, Palette und Zielgruppe — wer eine koreanische Reisschüssel bestellt, sollte nie erfahren, dass dieselbe Küche auch Geprek ausliefert. Die Kundenseite musste sich vom ersten Tipp an wie eine einzige, fokussierte Marke anfühlen.

Den Build fünfmal zu wiederholen war ausgeschlossen. Wir brauchten eine Shell, die fünf Gesichter trägt — sauber genug, um eine neue Marke an einem Tag zu launchen, nicht in einem Sprint.

„Kunden tippen auf den Bio-Link und erwarten einen Laden. Sie sollten einen Laden sehen, keine Imbisshalle." — Gründerbrief
9:41●●● ▮ 4G
B
Bap Bowl
Koreanische Reisschüsseln · Geöffnet
Warenkorb · 1
Bowls Beilagen Getränke
Bulgogi Bowl · telur ½
Rp 38.000
+
Spicy Pork Bap
Rp 42.000
+
● Was wir gebaut haben

Ein Katalog-Framework, sechs Marken-Skins.

Eine einzige PWA-Shell rendert den Storefront. Ein Marken-Slug in der URL lädt beim Start die richtigen Farb-Tokens, Schriften, Produkte und Texte — gleicher Code, anderer Laden. Kunden tippen auf den Instagram- oder TikTok-Bio-Link einer Marke, landen auf deren fokussierten Storefront, sehen die anderen nie.

Eine neue Marke für den Kunden aufzusetzen bedeutet jetzt: eine Zeile in der Datenbank, eine Farbe und eine Produktliste. Geprek 28 und Sego Sambel wurden in Woche 2 ausgeliefert; Bap Bowl, Nasgor Mas und Tumis Bunda sind vorbereitet, bis der Kunde entscheidet, sie einzuschalten.

9:41●●● ▮ 4G
G
Geprek 28
Sambal zuerst · Geöffnet
Warenkorb · 2
Geprek Paket Minuman
Geprek Paha · sambal lvl 3
Rp 24.000
+
Paket Geprek + Es Teh
Rp 28.000
+
● Die Anforderung

„Am ersten Tag darf der Koch nicht raten, welche Marke welche ist."

Das Risiko, das die Gründer früh nannten: Mit einem einzigen Team für fünf Marken verschwindet der Markenkontext zwischen Bestellung und Teller. Ein Ticket „nasi + sambal + ayam" könnte zu Geprek 28, Sego Sambel oder Nasgor Mas gehören — und eine falsch beschriftete Box in der Eröffnungswoche wäre sehr öffentlich, sehr schnell.

Die Küchenoberfläche musste die Marke unmöglich zu übersehen machen — auch im Stressbetrieb, auch in der ersten Schicht, die das Team je absolvierte.

Dapur
4 antri 3 masak 2 siap
Geprek 28 #284
2× Geprek paha
1× Es teh
17:44 Masak
Bap Bowl #285
1× Bulgogi bowl
extra telur · pedas 2
17:45 Masak
Sego Sambel #286
1× Sego sambel daging
17:47 Antri
Nasgor Mas #287
3× Nasgor spesial
17:48 Siap
● Was wir gebaut haben

Markengetaggte Tickets, Drei-Phasen-Wischen.

Jedes Ticket auf dem Küchenbildschirm trägt eine farbige linke Leiste — eine Farbe je Marke. Der Markenname steht oben in fettem Mono. Es gibt kein Szenario, in dem der Koch ein Ticket liest, ohne zu wissen, zu wessen Bestellung es gehört.

Antippen zum Weiterrücken: antri → masak → siap. Der Statustracker des Kunden aktualisiert sich sofort. Der Marken-Queue-Chip im Admin zählt eins herunter. Ein Tablet, drei Wischer, kein zweiter Bildschirm, der synchron gehalten werden muss — das Personal kann es am Nachmittag lernen.

9:41●●● ▮ 4G
B
Bap Bowl · #285
Estimasi 18 menit
Live
Pesanan diterima
17:31 · QRIS confirmed
Antrian dapur
17:32 · #285 di queue
Sedang dimasak
17:45 · station 2
+ 6 menit
3
Berangkat antar
menunggu
4
Tiba di tempat
menunggu
● Die Anforderung

„Wir müssen wissen, welche Marke wirklich Geld verdient."

Gemeinsame Küche, gemeinsames Personal, gemeinsames Gas, gemeinsamer Verpackungslieferant. Markenindividueller Umsatz ist simpel — Belege addieren. Markenindividueller Gewinn ist die schwierigere Kennzahl. Die Gründer wollten sie ab Monat eins sehen, nicht nach einem Jahr Raten.

Der Punkt: Die Entscheidung „Launchen wir die vierte Marke?" sollte auf einer Zahl beruhen, nicht auf einem Gefühl. Das bedeutete, die Gemeinkostenallokation ins System einzubauen, bevor die erste Bestellung eintraf.

„Wenn wir die markenindividuelle Marge nicht sehen können, fliegen wir blind, wenn es darum geht, welche Marke wir skalieren." — Gründerbrief
9:41●●● ▮ 4G
$
Markenindividuelle GuV
Live · automatisch allokiert
Monat
G
Geprek 28
Bestellanteil · 53%
Marge erfasst
S
Sego Sambel
Bestellanteil · 47%
Marge erfasst
B
Bap Bowl
Vorbereitet · wartet auf Launch
T
Tumis Bunda
Vorbereitet · wartet auf Launch
● Was wir gebaut haben

brand_id auf jeder Ebene, Allokation im Monatsabschluss verankert.

Jede Bestellung, jedes Ticket, jede Statuszeile und jeder Buchungseintrag trägt die Marken-ID ab dem Moment des Schreibens. Gemeinkosten (Miete, Gas, Grundpersonal) werden automatisch nach dem Bestellanteil jeder Marke im Monat allokiert. Markeneigene Kosten (Verpackungs-SKUs, einer Marke zugeordnete Zutaten) landen direkt im richtigen Buchungswerk.

Marketingausgaben sind an eine Marke und eine Kampagne geknüpft — Kosten pro Kunde errechnen sich aus dem Bestellprotokoll selbst. Die markenorientierte Verwaltung gibt dem Inhaber einen Bildschirm für alle sechs.

Admin · Live
17:48 · 11 aktif
Geprek 28
Antri4
Sego Sambel
Antri3
Bap Bowl
Antri2
#284Geprek 28 Masak 17:44
#285Bap Bowl Masak 17:45
#286Sego Sambel Antri 17:47
#287Nasgor Mas Siap 17:48
So lief es

Fünf Wochen, Marke zuerst.

Wir haben nicht mit der Datenbank angefangen. Wir haben mit einer Mockup-Katalogseite einer der Launch-Marken auf einem Telefon angefangen und sie den Gründern vorgelegt — würde ein Kunde das für einen echten Laden halten? Sobald das gelang, haben wir uns rückwärts in Küche und Verwaltung vorgearbeitet.

  1. Woche 1–2 · Marken-Shells

    Zuerst das kundenseitige Storefront-Framework gebaut — eine PWA-Shell, Theme-Tokens je Marke, IG-Feed-Katalog, Geo-Checkout, Statustracker. Mit den Produktfotos und Texten der beiden Launch-Marken verdrahtet.

  2. Woche 3 · Küche & Verwaltung

    Das Küchen-Dashboard rund um den Zubereitungsablauf gebaut, den die Gründer auf Papier hatten. Auf dem echten Küchenboden mit dem Küchenchef und den Gründern durchgegangen, den Bildschirm zweimal neu gebaut. Farbcodierte Markenentickets entstanden aus diesem Walkthrough.

  3. Woche 4–5 · Finanzen + Übergabe

    Gemeinkostenallokation, markenindividuelle GuV, CAC-Tracking. Probelauf mit geseedten Testbestellungen von Ende zu Ende — Kundenflow, Küchenflow, Verwaltungsflow, Monatsabschluss. Übergabe mit den QR-Katalogen, bereit zum Einschalten bei der Eröffnung.

Was beim Launch bereitsteht

Tag-eins-Umfang, übergeben.

Das ist es, womit die Gründer am Eröffnungstag starten. Live-Betriebszahlen (CAC, markenindividuelle Marge, Durchsatz) folgen, sobald die Küche läuft — wir veröffentlichen sie, wenn echte Daten dahinterstehen.

2
Marken bereit am Tag eins
Geprek 28 + Sego Sambel · Kataloge, Preise, Statustracker alle live
3
Marken vorbereitet
Bap Bowl, Nasgor Mas, Tumis Bunda — einschalten, wann die Gründer bereit sind
5 Wo.
Briefing bis Übergabe
Kundenstorefront, Küche, Verwaltung, Finanzen — ein Auftrag
1 Tag
Um eine 6. Marke zu launchen
neue Zeile, neue Theme-Tokens, neue Produktliste — gleicher Code-Pfad
100%
brand_id-Abdeckung
Bestellungen, Tickets, Buchungseinträge — nichts ungetaggt in der Datenbank
0
SaaS-Abonnements erforderlich
läuft auf Infrastruktur, die die Gründer bereits besitzen — keine monatliche Rechnung beim Skalieren
Unter der Haube

Schlank gebaut, auf Hardware, die wir bereits hatten.

Architektur

Eine Shell, beim Render markengebunden

Der Kundenstorefront ist eine einzige PWA. Ein Marken-Slug in der URL lädt beim Start die Farb-Tokens, Typografie, Texte, Produktliste und Bestellziel der jeweiligen Marke. Neue Marke = neue Zeile in der Markentabelle, neue Produktliste, ausliefern.

Vanilla JS · CSS tokens · service-worker · per-brand manifest
Stack

Statisches Frontend · PHP / MySQL Backend

Gehostet auf demselben XAMPP-Setup, das der Inhaber bereits für den Rest des Betriebs nutzt. Kein Build-Schritt, kein Docker, keine Neuerfindung. Bewusst so lesbar, dass jeder es versteht — der Küchenbildschirm muss funktionieren, auch wenn der Entwickler schläft.

XAMPP · PHP 8 · MySQL 8 · Swiper · Vanilla PWA
Bestellfluss

Auf jeder Ebene markengetaggt

Jede Bestellung, jedes Ticket, jede Statuszeile und jeder Buchungseintrag trägt die brand_id. Küche filtert danach, Verwaltung filtert danach, Finanzen allokieren danach. Es gibt keine Stelle im System, an der eine Zeile existiert, ohne zu wissen, zu welcher Marke sie gehört.

brand_id überall · soft delete · audit log
Kundenseite

Bio-Link zuerst, keine App-Installation

Der Kunde kommt über den Instagram- oder TikTok-Bio-Link der Marke, öffnet eine PWA, bestellt, zahlt per QRIS, verfolgt die Status-URL. Kein App Store, kein Login. Das Social-Media-Konto der Marke übernimmt das Marketing; der Storefront muss nur konvertieren.

PWA · IG / TikTok bio link · QRIS · localStorage cart
Küchenseite

Ein Tablet, drei Wischer

Ein wandmontiertes Android-Tablet an der Zubereitungslinie. Tickets laufen ein, farbig umrandet. Antippen zum Weiterrücken durch drei Zustände. Live-Zählung oben, damit der Koch die Warteschlangentiefe kennt, ohne etwas zu öffnen.

Android · fullscreen PWA · long-poll updates
Finanzen

Gemeinkostenallokation nach Bestellanteil

Miete, Gas und Grundpersonalkosten werden monatlich nach dem Gesamtbestellanteil jeder Marke aufgeteilt. Markeneigene Kosten (Verpackungs-SKUs, einer Marke zugeordnete Zutaten) gehen direkt ins richtige Buchungswerk. Für den Inhaber lesbare Formel je Zeile sichtbar.

monthly close · per-brand P&L · CAC linkage
Weiter → Mikro Farm

Mehrere Marken
von einem Ort aus?

Kostenloses Erstgespräch. Wir haben es selbst gemacht — wir wissen, was im zweiten Monat wehtut.