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.
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.
| From | Event | To |
|---|---|---|
| Shop | NEXT | Contacts |
| Contacts | CONTACTS_ARRIVED (phone QR · iCloud vCard · Tally/Excel list · paste) | Contacts (green “N contacts added”), then Who is who? |
| Contacts | NEXT with no contacts | Daily work |
| Who is who? | MARK (customer / supplier / staff) · REMOVE · UNDO | Who is who? |
| Who is who? | NEXT | Daily work |
| Daily work | NEXT | Files |
| Files | FILE_ADDED (drop · choose · phone photo) · VOICE_NOTE · REMOVE | Files |
| Files | NEXT | Send |
| Send | BUILD | Thank-you; the build is queued and delivered file by file (→ What reached FoodBridge) |
| any step | JUMP (steps column) · BACK | that step |
| Contacts / Files | SCAN (QR on the phone) | Phone page → sends to the computer under a one-time code |
| Phone page | PICK (contacts) · SNAP (photo) | they land on the open Contacts / Files screen; each read takes them (once) |
| State | Event | To |
|---|---|---|
drafting | EDIT (any answer, contact, file) · SAMPLE_FILL · START_AGAIN | drafting |
drafting | BUILD | queued (a snapshot: Excel + setup.json + every file) |
queued | FILE_DELIVERED (one at a time; big files in pieces) | queued |
queued | ALL_DELIVERED | delivered — the team can open it |
queued | OFFLINE / server down (5xx, network) | queued — retried on the next chance |
queued | REFUSED (4xx for one file) | that file dropped and named as missing; the rest go on |
delivered | EDIT then BUILD again | a new build (builds are snapshots, never edited after sending) |
| Steps | Shop · Contacts · Daily work · Files · Send. Products and Warehouse stock are hidden, not deleted (model.js HIDDEN_STEPS). |
| Contacts | One marking step (Customer / Supplier / Staff). Delivery days, areas, terms and staff jobs are hidden questions (HIDDEN_ASKS). |
| Files | Every file reaches the team as it came (raw/); over 2.5 MB it travels in pieces. |
| iPhone | Safari's one-time Contact Picker setting first; iCloud on the computer second. |
| Words | Titles only, no sub-text; one action per screen; Hindi and English. |
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, applying the bridge's own rules (a refused file is dropped and named as missing).
No request leaves the browser. Serve over HTTP (a service worker does not run from file://).
Two discovery aids, nothing else: the FoodBridge online / down switch in each screen's top bar (down: builds wait with “Send now”, the QR says it can't reach FoodBridge); and, where the browser has no contact picker and is not an iPhone (a computer), a stand-in that picks six invented contacts. An iPhone, real or previewed, shows Safari's one-time setting, as the prototype does.
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.