RestaurantBrain feasibility study

#CANON — binding decisions for the RestaurantBrain deliverable

Status: authoritative. Every other document in this deliverable MUST use these phase names, stack choices, scope tiers, numbers and terminology verbatim. Where an appendix (r01–r09) or a critique (c01–c03) disagrees with this file, this file wins and the appendix is treated as superseded input.

Date: 2026-08-18. Label key: [verified] = checked with a source in the research session · [known] = training data ≤ May 2026 · [estimate] = reasoned guess.


Decision: build the full POS, sell it CRM-first, in Czechia only, to counter-service chains of 2–8 sites in Prague and Brno. Ukraine is the engineering and support base and customers #2–10, not the revenue thesis. Do not enter a second paid market before the first is at 50 paying sites.

  • Own the POS, or do not do this. A CRM on someone else's POS caps identity coverage at ~24% of checks against 30–38% at v1 (A4 true) / 22–28% (A4 false), rising to ~52% at v2 core when we own the order flow, and ~20 points of that gap is high-quality; more decisively, a CRM overlay has no switching cost, churns at 40–60%/yr, and clears only 3–37% gross margin through middleware. Defensibility here is installed base × switching cost × payment contract. The CRM is why the first 100 customers buy; the POS and the payment rail are why the next 700 stay.
  • Czechia is the only correct first market. Zero fiscalization since 1 Jan 2023 [known], no producer liability, no local entity required, the widest Stripe Terminal reader roster in CEE (WisePOS E + S710 + S700 + Verifone) [verified], one language, one wage level, one installer pool, everything drivable in three hours. The hard rule that generates this: enter only markets whose time-to-first-legal-invoice is under 60 days. That admits CZ, UA, NL, UK, DE, AT and FR (self-attest); it excludes PL-via-GUM, BE, PT, SK, HU, GR, and it permanently excludes Spain, where LGT art. 201 bis fines the software producer and the 29 Jul 2025 producer deadline was not postponed by RD-ley 15/2025 [verified].
  • CZ + NL is rejected. A Dutch-speaking support FTE is EUR 4,200–5,200/mo loaded against EUR 2,500 in CZ, cannot be served from Kyiv, and drags a second entity, a second accounting-export format, a second acquirer and a second installer network. CZ + NL is two companies sharing a repository.
  • Counter-service only, single-station first. This removes table plans, coursing, seat-level splits, transfers and waiter handhelds, and it takes the offline core from full multi-station (48–58 eng-months) to single-station (17–20). It also matches the ICP: 2–8 site chains, not single sites, because the holdout-attribution feature — the demo that closes deals — is statistically undetectable below ~1,500 treated guests and therefore tells a single-site café to cancel.
  • The brief's S1 (founder + 2–4 engineers, 24 months) cannot produce a sellable POS+CRM and must be re-framed. The reconciled scope is 125 eng-months for an S1-cut v1; S1 delivers ~126 eng-months only over 36 months at 3.5 average effective engineering FTE. The canonical bootstrapped plan is therefore 5 engineers over 36 months on EUR 1.8–2.4M, not 3 engineers over 24 on EUR 900k. If that capital is not available, the only honest alternatives are (a) POS-only with no CRM beyond a loyalty ledger, or (b) first-party ordering + loyalty for delivery-heavy concepts as a wedge, and neither is the product in this brief.

#2. Canonical phases

These names are fixed. No document may invent, rename, merge or renumber a phase. Durations are stated for S1 with the S2 equivalent in brackets.

PhaseNameS1 months (S2)Eng-months consumed, cumulative S1Exit gate — all must be true
P0FoundationsM0–M4 (M0–M3)14≥8 of 40 Prague/Brno operators place a EUR 200 refundable deposit at ≥EUR 89/site/mo · ≥1 written payments term sheet at ≥25 bps residual, no merchant-ownership clause, no volume minimum unreachable by M36 · Czech counsel opinion signed on e-receipt join lines, loyalty T&C structure under Art. 7(4), and VAT on points redemption · Teya/Storyous/Dotykačka ownership conflict confirmed by direct call · device lab standing and the fsync power-cut test run · Kotlin-vs-TypeScript engine decision recorded as an ADR · one reconciled work-breakdown replacing the nine appendix effort tables · Tech E&O + Cyber bound
P1Design-partner pilotM5–M17 (M4–M9)56MVP (§4) complete · 5 CZ design partners live, invoiced and VAT-charged · ≥3 sites run unattended (no founder or engineer on site) through 4 consecutive Saturdays · zero manual production data repairs in the trailing 30 days · ≥1 full service run with WAN deliberately cut, reconciled to the cent · median tickets/site/week ≤3 by week 6 post-install
P2First paying market — CzechiaM18–M31 (M10–M18)125v1 sellable (S1 cut, §4) complete · 40–60 paying CZ sites · ≥60% of sites from outside the founder network · gross churn on the first-20 cohort <20% annualised · fully-loaded CAC <EUR 2,000 and falling QoQ · tickets/site/month <1.4 · contribution margin per site >EUR 25/mo · ≥1 referenceable chain of ≥4 sites
P3Second market + payments attachM32–M46 (M19–M30)190v2 core (§4) complete — S1 ships v2 core only, 58–65 eng-months against P3's 65 eng-months of capacity; S2 ships full v2 in the same phase · Ukraine (PRRO via Checkbox/Vchasno) then Poland (kasa-online printer partner + KSeF) live · payments residual invoiced on ≥30% of new logos · 150–250 sites · NRR >95% · support cost/site/month <EUR 40
P4Scale or sellM47+ (M31+)v3 (§4) starts here and not before · S1: EUR 1.5M+ ARR and breakeven trajectory, or sell to Nexi / Teya / Worldline / SumUp at 3–6× ARR. S2: EUR 6M ARR, gross churn <18%, ≥25% of new logos from channel

P3 scope, S1 vs S2. P3 is the only phase whose scope differs by scenario. S1's 65 eng-months in M32–M46 buy v2 core (§4): T2 LAN multi-station, the two second markets, guest ordering + QR PWA + Wallet passes, card-linked identity, Brand Vouchers, WhatsApp/Viber, segmentation and the payments-attach machinery. Everything else that used to sit in v2 — table service, the handheld waiter app, the customer-facing display, Apps-on-Devices, the HubRise delivery module, cashback and subscriptions, DE+AT, the second cell — is v3 and is P4-and-later for S1. Table service and the handheld serve a different ICP than §1's counter-service, single-station beachhead and cannot be funded before the counter-service base is at ~150 Sites. S2, on ~132 eng-months/year, ships full v2 (+86.5 → +96.5, §5.1) inside the same phase. Cumulative eng-months at P3 exit stays 190 for S1.

Hard stops, at any time, in any phase: a fiscal or tax defect that causes a customer to be fined; a breach of guest PII; two consecutive quarters in which support headcount grows faster than site count.

Financing gates. S1: pre-seed of EUR 900k–1.1M before P0; extension of EUR 900k–1.3M at the P2 entry gate; and — stated here because the plan does not end at profitability — a third financing event at M47, because peak capital through M47 (EUR 1.8–2.4M) is not capital to breakeven (EUR 3.0–3.5M, §5.2). S2: EUR 7M before P0; EUR 15–25M Series A term sheet at M20 on EUR 1.2–1.6M ARR — if that term sheet does not exist, S2 switches immediately to a profitability plan (freeze hiring, one country, EUR 3M ARR at breakeven by M40).


#3. Canonical stack

One row per layer. Chosen is chosen; the runner-up exists only to name the reversal path and its trigger.

LayerCHOSENRunner-up (and the trigger that would flip it)
Counter clients (POS, KDS, expo, CFD)Kotlin 2.x + Jetpack Compose, Android-only, min SDK 26, laid out as Compose Multiplatform modules (:domain :data :ui-core :ui-pos :android-app) with an inert :ios-app seamReact Native (New Architecture, bridgeless). Flip if the beachhead moves to US/Western EU with >40% iPad attach, or if 2 senior Kotlin/Android engineers cannot be hired in 8 weeks
Shared money engine (pricing, tax, modifier resolution, fold)One Kotlin :domain module, compiled to JVM for the backend and to Android for the counter. Pure, no I/O, integer minor units, no bare dates. This resolves the r05-vs-r08 contradiction against r05Rust → WASM core with FFI both sides (+3.5–5.0 eng-months). Running a TypeScript engine inside the Kotlin app is rejected
Backend servicesKotlin/JVM, Ktor, modular monolith, OpenAPI-first REST, generated clientsTypeScript/Node 22 + Fastify. Flip only if the shared-engine decision is reversed
Web clients (back office, internal support console)TypeScript + React + Vite, desktop-first 1280px+
Guest surfaces (v2 core: web ordering, QR PWA)TypeScript + React with SSR (Next.js), one multi-tenant PWA on the restaurant's own domain, plus Apple/Google Wallet passes— . Per-restaurant white-label native apps are prohibited (Apple Guideline 4.2.6)
Local device storeSQLite via SQLDelight + SQLCipher, append-only event log + transactional outbox in the same transaction
Device ↔ cloud syncBespoke: HTTPS + WebSocket carrying our own event envelopes, server-assigned per-site monotonic seq, resume/backfill/snapshot horizonPowerSync as pure opaque transport (licence resolved: FSL, converted to Apache-2.0 since 2026-05-31) [verified]. Saves ~2 eng-months; only adoptable if the event log stays the wire format
Device ↔ device (LAN)Not in v1. T0 single-station only. When T2 lands: bespoke mTLS 1.3 + CBOR framing, elected coordinator with durable monotonic epochs as fencing tokens— . The T3 dedicated hub SKU (Raspberry Pi) is cancelled permanently
Conflict semanticsEvent sourcing with per-device append-only streams (UUIDv7 event_id, gapless device_seq, HLC ordering) and a pure deterministic fold. The conflict table is the specCRDT (Automerge/Yjs) — rejected for money, permitted only for free-text order notes if ever needed. Field-level LWW (Firestore/Realm) is disqualified
Primary databasePostgreSQL 17, shared schema, org_id as the leading column of every composite PK and index, RLS as backstop, order/order_line/order_event RANGE-partitioned monthly on business_date— . DB-per-tenant and schema-per-tenant are rejected
AnalyticsPostgres read replica + materialised views to 200 sites, then self-hosted ClickHouse fed from the domain-event outbox (never CDC)ClickHouse Cloud / BigQuery. Rejected for v1 cost and Schrems II exposure
RealtimeOwn WebSocket gateway, one connection per device, per-site monotonic seq with bounded gap replay; Postgres LISTEN/NOTIFY fanout to 200 sitesNATS JetStream — deferred until 200 sites, not before
Jobs / durable workflowsPostgres transactional outbox + SELECT … FOR UPDATE SKIP LOCKED workers; the four long-running flows written as explicit state machinesTemporal / Restate / DBOS — rejected for S1, revisit above 8 long-running flows
Card-present payments (CZ/EU)Stripe Terminal, semi-integrated, server-driven + local SDK. Devices: Stripe Reader S700 and S710 (two-SKU plan, not one) [verified]. Zero EMV L2/L3 work, everAdyen Terminal API (the hedge, and the only confirmed source of PAR [verified]). Nexi/Worldline/ZVT only if a domestic rail is forced
Payments economics railA separate ISV/referral agreement, term-sheeted in P0. Primary candidate Viva.com ISV Partner Program (ISV sets its own per-transaction markup, 24 European markets) [verified]; then Nexi, Worldline, Global Payments via ČSOB/KB, Nuvei, Adyen for Platforms— . Teya is structurally unavailable in CZ (owns Storyous, majority of Dotykačka). We never become a payfac: break-even is ~EUR 333M TPV and PSD3/PSR applies H2 2027–early 2028 [verified]
Payments (Ukraine, P3)monobank + PrivatBank Android terminals behind the same PaymentTerminal port. Our payments revenue in UA is EUR 0
Fiscal signingBuy. FiscalProvider interface owned by us; fiskaly / Deutsche Fiskal / EFSTA behind it for every signing market. The argument is co-defendant risk transfer, not price. CZ needs none. UA PRRO via Checkbox or Vchasno Kasa as intermediary — we never hold a merchant's КЕП key. PL via a GUM-homologated kasa-online printer partner (Posnet/Elzab/Novitus), never our own GUM certificationDirect national implementations (~18–22 eng-months for DE+AT+FR+IT+ES+PT plus ~1.5 FTE/yr). Reconsider per country above ~2,000 registers
PCI postureSemi-integrated only, zero PAN, ever. Merchants land on SAQ B-IP; we run SAQ D-Service Provider with evidence collection started in month 1. All "SAQ P2PE" claims are struck from every document and every sales asset
PrintingRaster-only (HTML/Canvas → 1-bit bitmap → GS v 0), raw TCP 9100 from the native Android app for the till printer, Star CloudPRNT pull for kitchen printers where the SKU allows. No text fast path, no code-page matrixEpson Server Direct Print. A browser-based print path is rejected: no browser opens a TCP socket, and Chrome's Local Network Access permission (Chrome 142+) [verified] merely adds a second install-day silent-failure prompt with no WebView UI on Android
Fleet / MDMBase-tier MDM for enrolment + kiosk lock-task + OS update window only (Hexnode or Mosyle, ~EUR 5.5/site/mo), with remote config, feature flags, telemetry, log capture, printer health and device health in our own in-app agentEsper Bridge (USD 4/device/mo) — only above 200 sites or with a kiosk fleet
InfrastructureHetzner, one EU cell (Falkenstein/Nuremberg), self-hosted. Hard rule: capacity planning is horizontal only — the CCX line repriced +113–176% on 15 June 2026 and any rescale reprices [verified]AWS eu-central-1 — only when a signed enterprise contract funds the second cell
Observability / errorsSelf-hosted GlitchTip + Grafana/Loki/Prometheus from day oneSentry Business (Sentry Team at 50k errors is one bad release across 500 sites × 6 devices)
Feature flags / configOpenFeature + self-hosted Unleash, evaluated synchronously offline from a signed, monotonically-versioned config bundle the device refuses to downgrade, last-known-good cache, 7-day TTL that warns rather than fails— . LaunchDarkly per-MAU pricing is rejected
AIAnthropic API through one internal ai-gateway; nothing else imports the SDK. claude-opus-5 for menu/POS-migration/invoice ingestion and NL-analytics tool-calling; claude-sonnet-5 for narrative, replies and copy; claude-haiku-4-5 for classification; Batch API (50% off) for anything nightly. Per-feature global spend cap requiring a human to raise it, in addition to per-tenant caps— . NL analytics is tool-calling over a fixed, parameterised, tenant-scoped metric layer; text-to-SQL over the open schema is prohibited
Messaging transportLocal aggregator first (CZ aggregator, SMSAPI in PL, TurboSMS in UA) with Twilio as failover; SES or Brevo for email; per-tenant sending subdomains with own DKIM/SPF— . Viber and WhatsApp senders are per-tenant only. We never aggregate one sender across tenants in Poland (PKE art. 398 fines scale to the sender's revenue: 3% of prior-year turnover or PLN 1,000,000, whichever is higher [verified])
BillingStripe Billing until multi-entity invoicing across three countries is realChargebee

#3.1 Non-negotiable architecture invariants

These are decisions, not guidance. Any document that contradicts them is wrong.

  1. All money is integer minor units. Never a float, anywhere, in any language.
  2. unit_price_minor, tax_rate_bp and menu_snapshot_id are snapshotted onto the Line at order time and never recomputed.
  3. Fiscal Document numbers are allocated only by the certified fiscal component, never by application code. Check numbers come from coordinator-leased blocks; kitchen Ticket numbers are cosmetic.
  4. Business Day is leased from the coordinator, never stamped from a device wall clock. A device more than 5 minutes from coordinator HLC-physical time may take orders but may not close or tender. The fiscal adapter refuses to sign outside a trusted-time threshold.
  5. Every coordinator-issued lease and every print job carries a durable monotonic epoch. Coordinator identity derives from (persisted_epoch, boot_id, monotonic_start); a claim needs majority ack from reachable peers or cloud confirmation; in a two-device venue with no WAN the election loser freezes print dispatch for 60 s.
  6. Terminal ownership is a lease with the same fencing epoch as print dispatch, plus nightly PSP reconciliation by idempotency key. This is base scope, not optional.
  7. payment_attempt has an explicit unknown state and an idempotency key keyed to {check_id, attempt_seq}. unknown is never rendered as "failed". SCA soft-declines (online_or_offline_pin_required) are classified as in-flight, never terminal, and are filtered before reconciliation matching [verified].
  8. The acquirer transaction reference is persisted forever on every Payment. Referenced refunds are mandatory.
  9. Guest PII lives in a separate crypto-shreddable store keyed by guest_id; the financial event log holds only guest_id. Erasure tombstones replicate over the same sync channel with per-device ack tracking and per-device revocable data keys. Rendered ticket bitmaps are never persisted beyond a 24h retry window.
  10. consent_record.ui_surface is an enum with no pos_staff value and the API rejects it. The cashier-consent button does not exist and cannot be added as a custom field.
  11. The migration importer sets marketing suppression by provenance, and the segment builder cannot clear it. Aggregator-sourced guests are never marketing targets.
  12. Fiscal logic lives in a slow-release, separately-versioned module, architecturally isolated from the fast app, because certificates bind a named software version.
  13. The property suite is written by a human before the fold exists, and the fold is accepted only by the property suite, never by review. Anything touching money is implemented with AI assistance and property-tested by a human who did not write the implementation.
  14. Release freeze Thursday 12:00 → Monday 10:00. Rollout cohorts: lab → 3 friendly sites → 10% → 40% → 100%, minimum 24h soak spanning a dinner service at each step. Android rollback does not exist; kill switches are the only mitigation path.
  15. On-device retention is 7 days of closed Checks plus all open Checks, hard alarm at 500 MB. Cloud is the archive.
  16. No query outside an explicit transaction (lint-enforced), or Postgres RLS is not a backstop.
  17. Offline manager PINs are Argon2id-derived, tuned to ~250 ms on the slowest certified SKU, salted per (org, employee), wrapped with the device-bound Keystore key, and scoped to managers at that Site.

#4. Canonical scope tiers

Anything not listed in a tier is out of scope for that tier. There is no implicit inclusion.

#MVP — the P1 pilot build (56 eng-months)

Order domain: counter-service Check aggregate (open, add/void/comp Line, Option selection, quantity deltas, discount, additive payments, over-tender, close), deterministic fold, conflict table, invariants P1/P3/P4/P7/P8 as plain property tests, single-station T0 only · local SQLite + SQLCipher + forward-only migrations · outbox + device↔cloud sync · Business-Day lease, clock-skew guard, check-number leasing. POS Android app: shell, PIN auth, roles, menu grid, Option/Option-Group UI, search, ticket, payment UI, cash management, X/Z, drawer, offline-degradation UX. Printing: raster core, raw TCP 9100, discovery + static-IP wizard + MAC-keyed rebinding, one printer SKU (Epson TM-m30III all-interface, C31CK50152), basic health/failover/dedupe with a verify queue. Payments: PaymentTerminal port, Stripe Terminal adapter, unknown state, idempotency, error taxonomy including SCA soft-decline. Fiscal/tax: FiscalProvider interface, CZ VAT (12% reduced / 21% standard), CZ receipt renderer with golden files, CZK 1 cash rounding on the cash tender only. Back office: menu management core, staff/PINs/roles, device + printer settings, X/Z view. Platform: multi-tenancy, auth, RBAC, config resolution, entitlements + release flags, signed monotonic config bundle, kill switches, staged rollout, CI/CD, IaC, observability, backups. AI: menu ingestion from PDF/photo with citations, confidence scoring and a human review UI that never auto-publishes. CRM: deterministic identity (phone E.164 / email / loyalty ID), POS phone capture, points + stamps ledger, append-only consent record schema with versioned policy text. Fleet: in-app agent (remote config with LKG cache, log ring-buffer upload, Device Health screen), QR provisioning wizard, installer runbook. Design system: one token set, Compose + React component libraries. Device lab + CI on real hardware; fsync power-cut test.

#v1 sellable — the P2 exit build

Two scopes are canonical. S1 cut = 125 eng-months is what the bootstrapped plan actually ships. Full = 168.5 eng-months is what S2 ships — 167 plus the 1.5 eng-months for in-app staff self-onboarding, funded into Full on 2026-08-18 (see the Full-only list below). The S1 cut is unchanged at 125 because that item is deferred there. Any document still quoting 167 predates this decision.

Included in both, on top of MVP:

  • Offline core: injected-fault deterministic simulator, production divergence detector, venue replay + force-resync + audited surgical repair, snapshot/backfill/tombstones/purge, coordinator role for print dispatch.
  • Menu engine: variant matrices, nested Option Groups (depth ≤3) with free-count policies, per-channel price lists with recurrence, 86 overrides, per-Station routing and language, image pipeline, publish/diff.
  • Reporting: metric layer, Daily Close (immutable, hash-chained, per Site per Business Day), cash reconciliation, the 10 canonical reports.
  • KDS + expo mode + bump bar, with an on-screen last-heartbeat age and a full-screen state change after 45 s without a coordinator heartbeat.
  • Printing: Star CloudPRNT pull driver, routing engine (Station fan-out, per-Station language, void/modify slips, reprint job IDs), full health/failover/dedupe.
  • Payments: reconciliation, referenced refunds and the batch-boundary UX, Tip capture and per-employee attribution, payment_method model with nullable par.
  • Compliance: allergens (EU FIC 1169/2011), compliance test harness, consent-gated dual receipt renderer (fiscal-only vs promotional), DORA contract addendum, EU Data Act export/switching.
  • CRM: capture surfaces (POS phone lookup, SMS e-receipt, QR join landing), loyalty ledger (append-only, hash-chained, points/stamps/tiers/expiry), signed offline-redeemable Vouchers (Ed25519/COSE, pinned key set, trusted clock, local spent-set), promo rules engine (config-schema, ~8 rule types, one shared JSON spec, 500-case golden corpus in CI), consent & preference centre with double opt-in, DSAR/erasure with offline tombstone propagation, six templated automation flows, holdout-based incrementality reporting.
  • Commercial: Stripe Billing, payments-partner integration, onboarding workflow tool, AI tier-0 support agent with device telemetry, contracts (MSA/DPA/SLA) that expressly do not warrant third-party connector availability.
  • Integrations: Google Business Profile (reviews, hours, order-link repoint), Dotypos migration importer, generic CSV/Excel menu importer.

Included in Full only (deferred in the S1 cut): full injected-fault simulator suite, publish/diff rollback UI, internal support console beyond a read-only impersonation view, KDS beyond a bump-capable ticket list, segmentation query builder UI, multi-channel adapters beyond one SMS aggregator + email, campaign power-analysis UI, residual/margin ledger, Storyous importer, accounting export beyond one CZ format, i18n beyond cs/uk/en, in-app staff self-onboarding (1.5 eng-months, Domain C).

In-app staff self-onboarding is a decided item, not a floating one. It is the named mitigation for 60–100%/yr front-of-house churn and for A20's ≤1.4 tickets/Site/month ceiling. It is in v1 Full at 1.5 eng-months and deferred in the S1 cut, and it is the first Full item the S1 cut repays if A20 trips at the P2 gate. The Storyous importer sits in the same list with its own documented swap trigger: ≥25% of the 40 P0 discovery Sites on Storyous swaps it into the S1 cut against a named 1.0-eng-month Full item.

#v2 core — the P3 build

S1 ships v2 core and nothing beyond it in P3: 58–65 eng-months against P3's 65 eng-months of capacity (§2, §5.1). S2 ships full v2 — v2 core plus every v3 item below — inside the same phase, because S2 carries ~132 eng-months/year. The names v2 core and v3 are canonical; no document may write bare "v2" for the S1 P3 build.

T2 LAN multi-station (elected Coordinator, epochs, fencing, peer rediscovery on subnet change) · Ukraine PRRO via Checkbox/Vchasno · Poland kasa-online printer partner + KSeF + JPK_V7M · guest web ordering + QR PWA + Wallet passes · card-linked identity (PAR, enrolment-only, gated on A6) · Brand Vouchers (single-brand, face value, no top-up, no cash-out) · WhatsApp and Viber channels (per-tenant senders) · segmentation, journeys, RFM/lapse modelling, CRM reporting · the payments-attach machinery including the residual/margin ledger.

Plus repayment of the "Full only" v1 deferrals the S1 cut skipped and v2 core depends on, named here so P3 does not rediscover them: the residual/margin ledger (payments attach cannot be invoiced or reconciled without it) · the segmentation query builder UI (segmentation, journeys and RFM have no operator surface without it) · multi-channel adapters beyond one SMS aggregator + email (WhatsApp and Viber ride on them) · accounting export beyond one CZ format (PL JPK_V7M and the UA export) · i18n beyond cs/uk/en (Polish UI and receipts). These are inside the 58–65, not additional to it.

What was cut out of v2, and why. Table service and the handheld waiter app serve a different ICP than §1's "counter-service only, single-station first" and cannot be funded before the counter-service base is at ~150 Sites. The two things that are load-bearing for P3's own exit gate are kept: Site count (T2 LAN plus the two second markets) and identity capture / CRM renewal (guest ordering + QR PWA + Wallet passes, which are what move blended capture from 30–38% at v1 to ~52% at v2 core). Cutting either of those would break a thesis this deliverable states as proven elsewhere; cutting full-service does not.

#v3 — P4 and later

Table service (courses, seats, splits by item/seat, merges, transfers, floor plan) · handheld waiter app · customer-facing display · Apps-on-Devices (our POS running on Stripe S700/S710) · HubRise-resold delivery module, then a native Glovo connector only when HubRise costs a named deal · cashback and subscriptions · DE+AT with fiskaly or Deutsche Fiskal in the chain · second cell / data residency.

No v1 tier contains any v3 item. In particular the HubRise-resold delivery module is v3, not v1 Full and not v2 core — that settles the three-way tier assignment it currently carries, and Domain I's v1 Full total must be reached without it.

#Out of scope — permanently, or until a named trigger fires

CutTrigger that reinstates it
Self-order kiosk and unattended EMVNever in this plan. It is 4.5 eng-months of app plus 5–8 of unattended EMV certification plus 1.0–1.5 of EAA/ADA kiosk accessibility
Drive-thruNever
Spain, any activity including a Spanish-language websiteNever, until a Spanish counsel opinion on RD 1007/2023 conformance is signed and producer liability is insured (it is not insurable)
Basque TicketBAINever. Deleted, not deferred
United StatesNever in this plan
T3 dedicated hub SKUNever
iPad / iOS targetNever in v1–v3. Keep the CMP module seam; activating it costs +6–10 eng-months
Store-and-forward offline card paymentsNever. The claim is "orders, kitchen, cash and receipts keep working with no internet; card depends on your acquirer"
Surcharge / service-fee engineNever in the EU (PSD2 Art. 62(4)–(5)). Mandatory service charge is modelled in the tax engine as a distinct VAT-able entity
Gift cards / multi-merchant stored valueNever. Brand Vouchers replace them
Payfac / PI licenceAbove EUR 300M annual TPV, and not before the PSD3/PSR final text
Scales, legal-for-trade weighingFirst deli/bakery customer who pays, and only price-computing legal-for-trade scales that hand us a completed line
Label printingZPL-only when a customer needs it
Reservations / table managementIntegrate, never build. The minimal waitlist has its own row below and is itself out of scope until its trigger fires
Tip pooling / distributionA paying UK or US Customer, plus a German Steuerberater opinion on the payroll-tax treatment. Tip capture and per-employee attribution is in v1 sellable and is not the same thing
Detractor routing + service-recovery Voucher (~1.0 eng-months)≥3 design partners or paying Customers ask for it in writing, or review/NPS response becomes a named term in a chain deal. Not in MVP, v1 or v2 core
Minimal waitlist + walk-in SMS (~1.5 eng-months)A signed Customer whose queue is the stated reason they will not buy, or the first table-service Site at v3. Not in MVP, v1 or v2 core
Live inventory / stock countingv3. Ship theoretical COGS only
Scheduling and payrollNever. Integrate
Probabilistic identity matching500 tenants, and a labelled evaluation set first
Visual journey builder, BTYD/CLVDeleted
Partner/reseller portal200 sites
NATS JetStream, ClickHouse200 sites
Per-restaurant white-label native guest appsNever (Apple Guideline 4.2.6)
Cross-brand consumer wallet / network (controller model B)Never in v1–v3. Schema is partitioned so it is addable; behaviour is not built
In-parcel "win your customers back from Glovo" QROnly if we decide in writing not to build aggregator connectors. The two cannot both be safe
Toast, Aloha, Brink, Revel, TouchBistro, SpotOn, Olo, Micros 3700, Omnivore, DeliverectNever

#5. Canonical numbers

These exact figures must appear in the roadmap and risk documents. Do not re-derive them.

#5.1 Reconciled engineering effort by domain

One roll-up, double-counting removed, critics' upward revisions applied. This total is materially higher than any single appendix headline — that is the point of reconciling.

DomainOwnsMVPv1 sellable (S1 cut)v1 sellable (Full)full v2 delta (S2)
A Order domain + offline core (T0)fold, conflict table, invariants, local store, outbox, cloud sync, business-day/clock/numbering, simulator, divergence detector, ops replay10.616.019.6+9.0
B Backend platformtenancy/auth/RBAC/config/flags, menu & catalog engine, tax engine, payments orchestration, realtime gateway, reporting metric layer, Daily Close, cash reconciliation, accounting export, AI gateway + ingestion + analytics, platform/CI/DR12.023.028.0+12.0
C Client appsdesign system, POS app, back-office console, KDS + expo, fleet agent, provisioning, internal support console, release engineering, i18n/a11y17.028.036.5+18.0
D Hardware, printing, peripheralsraster core, transports, discovery, routing, health/failover/dedupe, drawer/scanner/CFD, certification matrix, installer tooling, device lab5.010.013.0+4.0
E Payments + PCIterminal port, Stripe adapter, splits, voids/refunds, reconciliation, tips capture, tokenization, PCI programme4.011.013.5+6.0
F Fiscal + regulatory (CZ only in v1)FiscalProvider, receipt framework, CZ, allergens, compliance harness, DORA/Data Act2.58.09.5+11.0
G CRM / loyalty / privacyidentity, capture, loyalty ledger, offline Vouchers, rules engine, consent, DSAR/erasure, flows, attribution2.519.029.0+11.0
H Commercial machinerybilling, payments-partner integration, onboarding tool, AI tier-0 support, contracts0.08.010.5+5.0
I Integrationsconnector runtime, Google Business Profile, migration importers0.04.08.5+10.5
TOTAL53.6 → 56127 → 125168.1 → 168.5+86.5 → +96.5

How the v2 column splits by scenario. +86.5 → +96.5 is full v2, and it is the S2/Full figure — S2 absorbs it inside P3 on ~132 eng-months/year. S1 cannot: P3 (M32–M46) has 65 eng-months of capacity, so S1 builds v2 core only, 58–65 eng-months (§4), and every v3 item is P4-and-later. The +86.5 → +96.5 delta is not deleted and not re-derived per domain here; §4 defines v2 core and v3 by contents, and S1's P3 budget is the 65 eng-months in the §2 phase table. Cumulative S1 eng-months at P3 exit stays 190.

Domain C Full now carries in-app staff self-onboarding at 1.5 (v1 Full, deferred in the S1 cut), which is why the Full column is 168.5 and not the 167 quoted before 2026-08-18. The S1-cut column is unchanged.

Domain E includes the whole PCI programme, one-off and ongoing: SAQ D-Service Provider evidence collection, QSA scoping and the run cost of 0.3 eng-months per quarter (1.2/yr). That run cost sits inside the 11.0 S1-cut figure; it is not additive to it, and any document quoting ~0.3 eng-months per month is wrong by a factor of three.

Domain H sub-split (S1 cut, 8.0): billing 1.5 · payments-partner integration 1.5 · onboarding workflow tool 1.5 · AI tier-0 support agent 2.5–3.0 · contracts (MSA/DPA/SLA) 0.5 — 7.5–8.0 against the 8.0 line. Every document quotes the AI tier-0 agent at 2.5–3.0 eng-months, never as the whole of Domain H.

Domain I post-v1 restatement: the column reads +10.5, not the +9.0 originally reconciled. The HubRise-resold delivery module (1.50) moved from v1 Full to v3 under §4, while the three Ukrainian migration importers (Poster 1.25, r_keeper 1.5, iiko/Syrve 1.5) stayed in v2 core because Ukraine entry depends on them. Post-v1 splits v2 core 5.5 / v3 5.0; v1 Full stays at 8.50, reached without HubRise by re-costing the mapping-UI framework and the drift/contract harness to 1.75 each. The full-v2 TOTAL is therefore +86.5 → +96.5. See 06 — Integrations §2.2.

Domain I sub-split (S1 cut, 4.0): connector runtime 1.00 · Google Business Profile 1.25 · Dotypos migration importer 1.00 · generic CSV/Excel menu importer 0.75 = 4.00 exactly. The Dotypos importer is 1.00 eng-months everywhere; no document may price it at 1.5–2.5 without moving this total.

AI-assist multipliers, already baked in above, stated per domain so nobody re-applies them: D ≈ 1.25× · A ≈ 1.10× · B ≈ 1.50× · C ≈ 1.35× · E/F/G legal-and-correctness rows ≈ 1.0–1.10×. Certification queues, field sales, physical install, RMA logistics and trust compress by 0%.

#5.2 Scenario S1 — bootstrapped

ItemCanonical value
TeamFounder (0.4 eng-FTE) + 2 engineers at M0 rising to 3 by P0 exit and 5 by M13 + 0.5 fractional product designer (EUR 2.5–4k/mo) + 1 QA owning the device lab + first support hire at site #40, not site #150 + 1 field/install person by site #10
Effective engineering capacity3.5 eng-FTE average, after a 15–25% on-call tax from 150 sites onward → **42 eng-months/year, ~126 over 36 months**
CalendarMVP at M17. v1 sellable (S1 cut, 125 eng-months) at M31. v2 core (§4, 58–65 eng-months) at M46 — not full v2. The brief's 24-month framing is not achievable
CapitalPeak capital through M47: EUR 1.8–2.4M (not EUR 850–950k). Structure: EUR 900k–1.1M pre-seed, EUR 900k–1.3M extension at M20. Capital to breakeven: EUR 3.0–3.5M over 5–7 years and ~800 Sites. These are two different numbers and both must be quoted; the first is not the cost of reaching profitability
BreakevenNot before year 5, at ~800 sites (800–850), on EUR 3.0–3.5M of capital over 5–7 years. The modelled mid case at M47 is ~220 Sites and ~EUR 475k ARR still burning ~EUR 450–550k/yr, so M47 is a third financing event, not profitability: a Series A that requires S2-shaped metrics S1 will not have, or a strategic sale at 3–6× ARR (≈EUR 1.4–2.9M on EUR 475–600k ARR) — roughly the capital invested. This gap is not closed by re-forecasting revenue upward
Y3 exit ARREUR 550–750k, where Y3 means the third year of revenue, M44–M48 (r09's EUR 982k corrected for cohort churn, corrected CAC and 30–40% payments attach). This band is the stretch case. The modelled base is ~EUR 475k at M47 on ~220 Sites; only the high case (~250 Sites) reaches the bottom of the band. Quote EUR 475k as the expected outcome and EUR 550–750k as the upside, never the reverse
Probability of reaching Y3 alive35–45% [estimate]

#5.3 Scenario S2 — funded

ItemCanonical value
Team13 product engineers + 2 designers + 1 QA + field ops + sales + support = 22 → 34 → 55
Effective engineering capacity11 eng-FTE → ~132 eng-months/year
CalendarMVP at M9. v1 sellable (Full, 168.5 eng-months) at M18. Full v2 — v2 core plus every v3 item (§4) — inside P3; P3 second/third markets by M30
BurnEUR 13–15M over 3 years (r09's EUR 11.33M plus c03's CAC and support corrections)
Y3 exit ARREUR 4.5–5.5M
Financing gateEUR 15–25M Series A term sheet at M20 on EUR 1.2–1.6M ARR. Binary
Probability of reaching Y3 alive30–40% [estimate]

#5.4 Unit economics — canonical inputs

MetricCanonical value
CZ list pricePOS EUR 79/site/mo + CRM EUR 39/site/mo + KDS EUR 25/station/mo
Target subscription ARPU, CZ, at v1 sellable — POS + CRM + KDS onlyEUR 110–130/site/mo. Downside case EUR 95. This is subscription revenue only. Any figure that also includes the payments residual or messaging is a different metric and must be labelled "total recurring revenue per Site" — never "blended ARPU", and never compared against this line
Fully-loaded CAC, CZ, Y1–Y2EUR 2,200–3,200 (includes onboarding, install day, travel, demo kit, and absorption of the 15–25% of signed deals that never go live). Target <EUR 2,000 by M31
Install cost per siteEUR 550–1,400 (CZ), 5–8 on-site hours × 2 people. Plus network remediation the customer did not budget
Onboarding labour22–55 h manual, 16–34 h with AI menu ingestion (~40% reduction, not 80%)
Support hours sold07:00–01:00 local, 7 days, as standard. 24/7 is a paid tier at +EUR 25/site/mo
Support ticket rate2–4/site/month for the first 6 months post-install, decaying to 0.8–1.2; use 1.4 blended for the first 24 months
Support ticket mix~45% of tickets are hardware-caused; ~60% of those hardware tickets are printing (≈27% of all tickets). Use these two shares verbatim — "60% of tickets are printing" is wrong
Support cost per site per month at 500 sitesEUR 40–55 at CZ wages; EUR 25–32 with the AI tier-0 agent deployed
Support FTE at 500 sites8–11, or 3 plus escalation with AI tier-0 filing tickets from telemetry before the restaurant calls
Gross logo churn by cohortcohort 1 40%, cohort 2 30%, converging to 22–25% by cohort 4
Payments attach, Y3 blended30–40% (70–85% on new openings, 20–30% on displacement wins blocked by 36–48-month terminal leases with EUR 300–900 early-termination fees)
Payments residual required≥25 bps, no merchant-ownership clause. EU net spread available: 60–90 bps gross in CZ/PL against a ~0.51% + EUR 0.135 cost base
Net payments gross profit per site per yearPoland EUR 1,620 · Germany EUR 670 · Ukraine EUR 0 to us · US USD 10,150 (reference only)
Fiscal signing COGSEUR 10–15/register/month in DE/AT [verified] = 15–25% of a EUR 59 ARPU. Price DE at EUR 89–129, never EUR 59
InfrastructureEUR 6.90–7.90/site/month at 100 sites, EUR 5.40–6.80 at 1,000, EUR 3.65–4.85 at 10,000. 3–8% of revenue. Never the constraint
AI spendEUR 0.30–1.50/site/month steady state, plus EUR 0.50–3.00 one-off per onboarding
MDMEUR 5.5/site/month (base tier, 4–6 managed endpoints)
Contestable marketCZ POS-relevant universe ~30,000 sites; Prague+Brno counter-service 2–8 site chains ≈ 1,200–2,000; annually contestable 200–500 (new openings 8–12% + ownership changes 5–8% + acute-pain switchers 3–6%)
Chain sales cycle9–14 months signed-to-fully-deployed. Y2 chain revenue lands in Y3
Realistic exitEUR 40–90M strategic sale in years 6–9 to Nexi, Teya, Worldline, SumUp or Lightspeed. Anchor: orderbird → Nexi, EUR 130–140M for ~14,000 clients [verified]

#5.5 Canonical hardware BOM per site

Reseller model only: sell at cost + 15%, never subsidise. Hardware gross margin 10–13% after freight, spares and DOA — cost + 15% is 13.0% of revenue before freight, spares and DOA, so 13% is the arithmetic ceiling of the pricing rule and the previously stated 15–25% was not derivable from it. Model hardware COGS at a 12% gross margin. Sold as a branded bundle of OEM-branded devices — our box, quick-start card, pre-provisioned config, SIM, support number — because the device stays legally Sunmi's/Epson's and CE, GPSR, WEEE, EU Battery Regulation and the Cyber Resilience Act stay with them.

Tier A — counter-service café/bakery, 1 till (the canonical ICP site)

RoleSKUEUR ex VAT
TillSunmi D3 Mini GMS 10.1" (integrated 58 mm printer)579 [verified]
Card readerStripe Reader S710 (or WisePOS E)230–320
Cash drawerSafescan SD-4141, 24 V85
RouterTeltonika RUT241 (4G failover built in)155
UPSAPC BE850G2125
CablingCat6, 2–3 runs200–500
TotalEUR 1,374–1,764

The EUR 465 anchor this table previously carried was the non-GMS SKU, which the GMS/EDLA rule below forbids; the compliant GMS SKU is EUR 579 [verified], and the Tier A total moves with it to EUR 1,374–1,764 (low = 579+230+85+155+125+200; high = 579+320+85+155+125+500). Both ends are pending distributor quotes at P0 exit. Budget Tier A at the top of the range.

Tier B — counter-service, 2 tills + kitchen

RoleSKUQtyEUR ex VAT each
TillSunmi D3 Pro GMS 15.6"2639
Front receipt printerEpson TM-m30III, C31CK50152 all-interface1314.87 [verified]
Kitchen printerEpson TM-U220II impact, Ethernet1280–340
Bar printerStar TSP143IV LAN (CloudPRNT)1230–280
KDSElo I-Series 4 15.6" Android, wall mount1~1,150
Bump barLogic Controls KB17001250–350
Card readersStripe S710 / WisePOS E2230–320
Cash drawerAPG Vasario 1616, 24 V1110–150
NetworkRUT241 + 8-port PoE switch + 1–2 UniFi U6 Lite1 set400–650
UPSAPC BE850G2 or EcoFlow River 21110–350
Cabling200–500
TotalEUR 4,900–5,800

Rules that are part of the BOM, not commentary: buy GMS/EDLA SKUs for anything running our app (non-GMS costs an own MQTT push transport at 1.8–2.2 eng-months, an own OTA pipeline and a frozen WebView) · anything that prints gets a cable; Wi-Fi printers are "unsupported, best effort" · kitchen printers are impact, never thermal · the router and a validated AP are a hard requirement of the install, not a recommendation — without them peer sync cannot establish and we owe 1.5–2.0 eng-months of cloud-relayed peer path nobody costed · networking is 20–35% of the hardware bill and the customer never budgets it · spare pool 5–8% in-region, 1 spare terminal per 25 live units, 2–4% RMA/DOA reserve · device lab capex EUR 8–12k for rig 1, a second CI rig at EUR 8–10k by M12 · re-certify the hardware matrix every 18 months at 0.25 eng-months/quarter forever.


#6. Canonical terminology

Use the left column. The right column is banned in every document, schema, API and UI string.

Canonical termDefinitionBanned synonyms
CustomerThe restaurant business that pays RestaurantBrainnever the diner
GuestAn identified person who eatscustomer, client, patron, diner, consumer
OrgBilling and contract entity; one legal owner, one data cellaccount, company, tenant (in prose)
BrandMenu namespace, branding, default locale, tax classesconcept, chain (in schema)
SiteOne physical restaurant locationlocation, venue, store, outlet, branch, restaurant (in schema)
Site GroupFree-form many-to-many tag over Sites (region, franchise cohort)region, cluster
DeviceOne physical hardware unit with a serialterminal, unit
StationThe logical role a Device holds: TILL, KDS, EXPO, CFD, HANDHELDterminal, till (as a schema name), POS (as a schema name)
CheckThe financial container for one party at one Site on one Business Day. The canonical noun of the domainorder (in-house), bill, tab, ticket, sale, transaction
OrderAn inbound order from an external channel (own web, QR, aggregator) that becomes a Checknever used for in-house service
TicketA kitchen work instruction produced by firing part of a Check to a Station. Never a financial objectkitchen order, chit, docket, KOT
LineOne sellable item on a Checkline item, order line, item
Item / Variant / Option / Option GroupCatalog entities. Size is a Variant, never an Option. An Option belongs to an Option Groupmodifier, modifier group, product, addon, extra, SKU (a field on Variant, not an entity)
Menu SnapshotThe immutable, content-hashed, compiled artefact a Device downloads and swaps atomicallymenu version (in prose only), catalog
TenderOne payment instrument applied against a Checkpayment method (reserved for the stored instrument)
PaymentA Tender that reached a terminal state at the PSPcharge, txn
TipDiscretionary gratuity. Outside VAT scopenever interchangeable with Service Charge
Service ChargeMandatory charge. VAT-able revenuenever called a tip
DiscountReduces the taxable base
CompZero-price authorisation with an actor and a reasonfree, void (a Comp is not a Void)
Business DaySite-configured 24h accounting window, default 04:00–04:00 local, leased from the Coordinatortrading day, service day
ShiftOne employee clock-in → clock-out
Cash Drawer SessionOne drawer open → counttill session
Daily CloseThe immutable, hash-chained, sequentially-numbered per-Site per-Business-Day closeEOD, end of day, Z-Bon (a DE rendering of it), cashup
Z-reportThe printed/exported rendering of a Daily Close
Fiscal DocumentThe legally-numbered artefact issued by the certified fiscal componentreceipt (a Receipt is the rendering, not the document)
ReceiptThe printed, emailed or QR rendering handed to a Guest
CoordinatorThe single-writer role for print dispatch, number leasing and terminal ownershiphub, server, master, leader, primary
EpochThe durable monotonic fencing token stamped on every Coordinator-issued lease and print jobterm, generation
Event / Command / FoldImmutable fact / intent / the pure function Events → CheckStatemutation, action, reducer
IdentityOne identifier: phone (E.164), email, loyalty ID, hashed PAR
ClusterThe derived set of Identities believed to be one Guestgolden record, master record, profile (Profile is the display projection)
MemberA Guest enrolled in a Loyalty Program
Consent RecordAppend-only record per (Identity, channel, purpose) with the hash of the exact wording shownopt-in, permission
VoucherA signed, single-use, offline-redeemable entitlement (Ed25519/COSE)coupon, promo code, offer code
Brand VoucherSingle-brand, face-value, no top-up, no cash-out instrumentgift card, stored value, wallet
Campaign / Audience / Holdout / TreatedCampaign, its frozen audience snapshot, the randomised control bucket, the sent bucketcontrol group (use Holdout)
Incremental revenue(mean margin treated − mean margin holdout) × n treated, with a bootstrapped 95% CI, net of channel and discount costattributed revenue, ROI (unqualified)

#7. Standing assumptions and their owners

Every row is an assumption the plan rests on, an owner who must resolve it, a deadline, and what changes if it is false. Unowned assumptions do not appear here because they are not allowed to exist.

#AssumptionOwnerDueIf false
A1CZ counter-service 2–8 site chains will pay ≥EUR 89/site/month for POS+CRMFounder — 40 discovery calls, 20 real order forms with a EUR 200 refundable depositP0 exit (M4)Fewer than 8 of 40 deposit → do not write code. Re-run the model at EUR 95 ARPU (breakeven slips to Q4-Y5, peak capital ~EUR 2.6M) or pivot to first-party ordering + loyalty for delivery-heavy concepts
A2At least one acquirer or ISV programme gives ≥25 bps residual, no "we own the merchant" clause, no volume minimum unreachable by M36Founder — written term sheets from Viva.com, Nexi, Worldline, Global Payments (ČSOB/KB), Nuvei, AdyenP0 exitStop. SaaS-only CEE is 0.65–0.95× LTV/CAC. The economics do not exist and no engineering fixes it
A3Teya owns Storyous and holds a majority of Dotykačka, making it unavailable as a CZ payments partnerFounder — one direct callM1If wrong, Teya becomes the cheapest on-ramp and A2 gets materially easier
A4A neutral "join here" line inside a transactional e-receipt is not obchodní sdělení under zák. 480/2004 in CZCzech counsel, EUR 3–5kM2The highest-volume capture channel disappears. Blended identity capture at v1 drops from 30–38% to 22–28% — the ~52% figure is v2 core, reached only once guest ordering, the QR PWA and Wallet passes ship, and it is never the v1 number. The CRM value case and the ARPU assumption both weaken
A5PL PKE art. 398 forbids the same line in Poland, and forbids one aggregated Viber/SMS sender across PL tenantsPolish counselbefore P3 PL entryAlready assumed true. PL e-receipts are a fiscal-only template with zero promotional content; PL tenants hold their own sender or the channel is not offered
A6Stripe Terminal card-present in CZ does not need to emit PAR for v1Backend lead — one-day sandbox test against Stripe and AdyenM1Informational only. If Stripe emits PAR, card-linked identity moves from v2 core to v1.1. If not, it stays in v2 core and we do not switch PSPs for it. Adyen returns PAR for Visa/Mastercard on Terminal API [verified]
A7fsync is honest on the certified Android SKUs and the Pi-class hardwareQA — write intent, cut power at 1,000 random offsets on the smart PDU, count survivorsweek 3 of build (M1)The intent log alone cannot be trusted. The printed monotonic per-Station Ticket number becomes the only dedupe primitive; print health rises +1.0 eng-months
A8Under 40% of the CZ beachhead segment runs 2+ POS stationsFounder — 30 discovery calls counting actual station countsM3T2 LAN multi-station moves from v2 core into v1 sellable: +9.0 eng-months, MVP slips ~3 months, and the T2 election/fencing/epoch-reuse work becomes critical path
A9No PSP will permit store-and-forward offline card auth on acceptable termsPayments owner — written answers from 2 PSPsM4Irrelevant either way — we do not build it. This exists only to fix the sales claim, which is: "orders, kitchen, cash and receipts keep working with no internet; card payments depend on your acquirer"
A10A fiskaly/EFSTA multi-country quote lands under EUR 8/register/month at 500 registersFounder — direct sales quotes from two vendorsbefore DE/AT entry (v3, P4+)Build-vs-buy flips. DE+AT entry rises from ~4.5 to 18–22 eng-months plus 1.5 FTE/yr, and DE+AT is deferred out of the plan
A11Czechia does not reintroduce a cash-register obligation before 2029Compliance owner — quarterly reviewcontinuousCZ stops being a zero-fiscal market: +2.5–3.5 eng-months and a certification calendar we do not control, landing on the only market with revenue
A12PL gastronomy can be served by driving a GUM-homologated kasa-online printer (Posnet/Elzab/Novitus) without GUM-certifying our softwareCompliance owner + one PL vendorbefore P3PL requires GUM: 6–12 months, PLN 50–150k, plus a Windows/Linux bridge box at +EUR 200–350/site. PL is deferred and DE+AT becomes market 3
A13UA PRRO can be served via Checkbox or Vchasno Kasa as intermediary, so we never hold a merchant's КЕП keyCompliance owner + UA counselbefore P3 UAUA fiscal rises from ~1.75 to 5–6 eng-months and carries custody liability in an incident. UA reverts to engineering/support base only
A14Google Business Profile API allowlist is grantedProduct — apply in M1M6Review management degrades to manual paste. Drop it from v1 sellable; it has no engineering workaround
A152 senior Kotlin/Android engineers can be hired in Kyiv/Lviv/Prague within 8 weeks at ≤EUR 4,500/moFounderM2The entire stack decision reopens. React Native becomes the pick and +5.5 eng-months of vendor-SDK bridging plus 0.15–0.25 eng-months/quarter forever applies
A16HubRise stays independent and clears >50% gross margin at EUR 27–35/siteFounder — partner agreement reviewbefore the v3 delivery moduleBuild Glovo natively (+3.5 eng-months) or drop the delivery module. The Omnivore→Olo→Thoma Bravo sequence is the precedent
A17For a white-label guest ordering page, the restaurant is the EAA service provider, not usEU counsel — a 2-hour questionbefore v2-core guest orderingThe microenterprise exemption never applies. Every guest surface must be EN 301 549 / WCAG 2.1 AA from day one: +1.5 eng-months and a permanent audit obligation
A18Tech E&O + Cyber at EUR 1–2M limit is obtainable at EUR 8–25k/yr for an EU SaaS operating in fiscalised marketsFounderbefore customer #1It is a procurement gate for any chain. Note it never covers producer-side fiscal fines
A19Our merchants' PCI landing zone is SAQ B-IP, and SAQ C applies if our app runs on the readerQSA scoping opinion, EUR 5–10kbefore any Apps-on-Devices deployment (v3)Nothing changes for v1. Remove every "SAQ P2PE" claim from sales material now; Stripe is not on the PCI SSC P2PE listing
A20Blended support ticket rate stays ≤1.4/site/month through the first 24 monthsSupport owner — instrumented from site #1P2 exit gateSupport cost/site exceeds EUR 55 against a EUR 110–130 subscription ARPU. Freeze sales and fix the product; this is the r09 open question that decides breakeven. The named mitigation is in-app staff self-onboarding (§4, v1 Full, 1.5 eng-months, deferred in the S1 cut) — if this assumption trips, that deferral is the first thing the S1 cut repays
A21Payments attach on displacement wins is capped at 20–30% by 36–48-month terminal leases with EUR 300–900 early-termination feesSales — capture "acquirer + rate + contract end date" on every discovery callcontinuousIf lower, the LTV thesis requires new openings to be >50% of pipeline, which reorders lead-gen toward fit-out contractors, equipment distributors and the trade-licence register
A22The AI-assist multipliers in §5.1 hold in practiceEngineering lead — measured per sprint against the reconciled work-breakdownM12Re-baseline the effort plan; do not re-forecast the revenue. AI compresses code, never the certification queue, the install, the sales meeting or the support rota
A23Sub-merchant KYB does not stall more than 10–20% of applications, and merchant chargeback/negative-balance exposure stays under EUR 15–40k/yr at 300 sitesOps owner (not an engineer)before P3 payments attachBudget rolling reserves, delayed payout on prepaid sales, and an ops hire. A signed customer who cannot take cards for 9 days is a churn event
A24We can define and price a fiscal-archive handover artefact for churned merchants without inheriting a decade of availability obligationsLegal + compliance ownerbefore customer #1Holding a churned merchant's fiscal archive under DE §147 AO (8–10 yrs), FR signed archives or a UA КЕП is an unpriced, unbounded liability. Nothing in the research models it

End of canon. Anything not decided here is not yet decided, and no writer may decide it.