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. 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.