Static HTML. No logic, no framework, no data. Real copy, consuming the shapes in
flow/05-contract.md, rendered in the SNA brand — colours,
gradient and typefaces read directly off snaworldwide.com and locked into
DESIGN.md on 2026-08-06.
Navy #004E7C → blue #0074A8 → cyan
#00B5D9 is SNA's own logo gradient, copied exactly. Headings are Barlow
Condensed and body is Inter — both SNA's. Cyan never carries text: it fails
contrast at 2.3:1, so navy does every job that must be read.
This is the design review. Approving it means the frontend cards get built to look like this. Rejecting a screen here costs seconds; rejecting it after the frontend card costs a deploy cycle.
01 / F1
Sign in — POST /api/auth/request-link
30 Sep - 2 Oct 2026 · Ho Chi Minh City
LEAD LOCAL - GO GLOBAL
No password. We email you a link, you tap it, you are in.
Only addresses on the conference guest list can sign in. If yours is not recognised, contact the organisers.
02 / F1
Link sent — 200 { ok: true }
Check your inbox
We sent a sign-in link to linh.tran@pacificlogistics.vn
The link works once and expires in 15 minutes. Open it on the phone you will carry at the conference.
Not arrived after a minute? Check spam, then ask at the registration desk — the organisers can sign you in directly.
03 / F2 + F5
Event — home, the object page
Day 1 · 30 September
Pinned
The rooftop terrace opens half an hour later than printed. Same venue.
30 Sep, 08:15
Collect your printed meeting grid when you check in. Table numbers are on it.
29 Sep, 17:40
Shuttles leave the hotel lobby at 07:30, 12:00 and 16:30 on all three days.
28 Sep, 09:00
04 / F3 + F4
My card — GET /api/me/qr, GET /api/me/profile
Hold this up to be scanned
Screen brightness goes to full automatically
05 / F3
Edit my card — PUT /api/me/profile
Six fields visible, everything else behind "More options" — photo, name card upload, and the free note you want to share.
06 / F4
Scan — camera, before a code is found
Point at the code on their phone. It saves by itself.
Ask for camera permission the first time only, with a sentence explaining why — iOS refuses silently if the prompt is dismissed.
07 / F4
Saved — 201 { already_existed: false }
Saved to your connections
You met Marco Bernardi
That is connection number 13. You moved up to #3.
08 / F4
People › My connections — tabs as lenses
13 people, all three days
09 / F5
People › Leaderboard — GET /api/leaderboard
Top connectors — a prize on Gala Night for number one
486 is unique pairs across the whole conference. It is not the sum of the numbers on the right — every connection appears in two people's lists.
10 / F7
Join the show — the mandatory tap
Gala Night · 2 October
Tap once now. When the organisers start it, your phone joins in by itself.
This tap is not optional decoration. Phone browsers refuse to start a video with sound unless the person has touched the page first — so the app asks for the tap early, while nobody is watching the stage.
11 / F7
Joined, waiting — GET /api/show, state: idle
Gala Night · 2 October
Keep this screen open and turn your volume up.
12 / F7
Playing, in sync — state: playing + server_time
Gala Night · 2 October
Playing together with 214 other phones
13 / F6
Organiser › Door check-in — POST /api/checkin
Day 1 · 30 September
Checked in · 08:12
Kenji Tanaka
Nihon Kaiun KK · Yokohama
14 / F2 + F7
Organiser › Console — announcements + show control
17 guests have not tapped "Join the show" yet. Their phones will not play — that is the browser's rule, not ours.
If the venue wifi will not carry it, stop here and play the video on the main screen instead. Nothing else in the app depends on this.