Store Builder — Discovery Prototype (wiring hub)

Iteration goal: a distributor builds his FoodBridge store in about 10 minutes — on a computer or a phone — without typing his customers, and sends it to FoodBridge's customer success team in one click.

Screens

Every step screen follows the screen it is opened on, as the prototype does: 1000 px and wider, the desktop layout; narrower, the phone layout at the same step. On a phone, Shop opens the welcome first.

▶ Start the flow →

Transition map — screens (→ SSOT-5 workflow)

FromEventTo
ShopNEXTContacts
ContactsCONTACTS_ARRIVED (phone QR · iCloud vCard · Tally/Excel list · paste)Contacts (green “N contacts added”), then Who is who?
ContactsNEXT with no contactsDaily work
Who is who?MARK (customer / supplier / staff) · REMOVE · UNDOWho is who?
Who is who?NEXTDaily work
Daily workNEXTFiles
FilesFILE_ADDED (drop · choose · phone photo) · VOICE_NOTE · REMOVEFiles
FilesNEXTSend
SendBUILDThank-you; the build is queued and delivered file by file (→ What reached FoodBridge)
any stepJUMP (steps column) · BACKthat step
Contacts / FilesSCAN (QR on the phone)Phone page → sends to the computer under a one-time code
Phone pagePICK (contacts) · SNAP (photo)they land on the open Contacts / Files screen; each read takes them (once)

Transition map — the store build (→ SSOT-1 state machine)

StateEventTo
draftingEDIT (any answer, contact, file) · SAMPLE_FILL · START_AGAINdrafting
draftingBUILDqueued (a snapshot: Excel + setup.json + every file)
queuedFILE_DELIVERED (one at a time; big files in pieces)queued
queuedALL_DELIVEREDdelivered — the team can open it
queuedOFFLINE / server down (5xx, network)queued — retried on the next chance
queuedREFUSED (4xx for one file)that file dropped and named as missing; the rest go on
deliveredEDIT then BUILD againa new build (builds are snapshots, never edited after sending)

Decisions this iteration carries (owner, 2026-09-26 … 10-01)

StepsShop · Contacts · Daily work · Files · Send. Products and Warehouse stock are hidden, not deleted (model.js HIDDEN_STEPS).
ContactsOne marking step (Customer / Supplier / Staff). Delivery days, areas, terms and staff jobs are hidden questions (HIDDEN_ASKS).
FilesEvery file reaches the team as it came (raw/); over 2.5 MB it travels in pieces.
iPhoneSafari's one-time Contact Picker setting first; iCloud on the computer second.
WordsTitles only, no sub-text; one action per screen; Hindi and English.

How it runs with no server

The prototype files under screens/prototype/ are byte-for-byte foodbridge-mock-platform v7/store-builder @ 3c840e6. Where it would call the bridge (/api/stores, /api/handoff), a service worker — discovery-bridge.js — answers instead and keeps everything in this browser. No request leaves the browser. Serve over HTTP (a service worker does not run from file://). The phone page gets a stand-in contact picker on a desktop browser.

Owner-side data: seed-data/seed.json (the prototype's own sample answers; in the prototype: “Try it with sample data”). The team's side is the customer-success module's own discovery.