ux(setup): rewrite captive-portal + AP/setup-screen copy

Beta tester called the previous setup wording "Chinglish."
Tighter, plainer language across all three surfaces:

- Captive portal (PORTAL_HTML): "Connect your frame", explicit
  "Home WiFi name / Home WiFi password", clearer footer.
- AP screen step list: 5-line plain-English checklist; no more
  Safari-specific reference.
- Setup screen: fixed step 2 wrapping mid-domain
  ("pictureframe / .edholm.me"), tightened steps 1 and 3.

Regenerated bg.bin to match the new gen_screens.py output.
NEEDS-FLASH: in-field beta unit still has prior copy.
This commit is contained in:
2026-05-09 15:17:15 -04:00
parent f1d867c659
commit c1bed8c218
8 changed files with 33 additions and 24 deletions
+20 -15
View File
@@ -222,17 +222,19 @@ def gen_ap(accent=YL, header="SETUP MODE — STEP 1 OF 2", qr_label="SCAN TO C
# Steps — frames ship with battery unplugged to preserve shelf life
# (idle setup-screen polling is non-trivial draw on e-ink), so the
# very first prompt is "Plug in power". Step 2 is unlock-first (iOS
# won't fire the captive UI from a locked-phone scan). Two-QR flow
# because iOS in recent versions doesn't auto-open the captive
# portal even after CNA detects it; scanning the second QR opens
# Safari which forces the portal to render.
# very first prompt is "Plug in the frame". Step 2 is unlock-phone
# because iOS won't fire the captive UI from a locked-phone scan.
# Two-QR flow because iOS in recent versions doesn't auto-open the
# captive portal even after CNA detects it; scanning the second QR
# opens a browser which forces the portal to render.
# NEW WORDING 2026-05-09 — beta tester called the prior copy
# "Chinglish." Tighter, plainer, no Safari-specific reference.
steps = [
("Plug in power", ""),
("Unlock your phone first", ""),
("Scan QR 1", "joins PictureFrame WiFi"),
("Scan QR 2", "page opens in Safari"),
("Enter your WiFi password", "and tap Connect"),
("Plug in the frame", ""),
("Unlock your phone", ""),
("Scan QR 1", "joins your phone to PictureFrame"),
("Scan QR 2", "opens the setup page"),
("Type your home WiFi password", "and tap Connect"),
]
sy = BODY_Y + 95
step_pitch = 32
@@ -361,13 +363,16 @@ def gen_setup():
bb = draw.textbbox((0,0), "ready.", font=F_HEAD)
draw.rectangle([28, BODY_Y+82, 28+bb[2]+2, BODY_Y+85], fill=GR)
draw.text((28, BODY_Y+96), "Scan to name this frame and", font=F_STEP, fill=(80,80,75))
draw.text((28, BODY_Y+110), "link it to your account.", font=F_STEP, fill=(80,80,75))
draw.text((28, BODY_Y+96), "Scan the QR to link this frame", font=F_STEP, fill=(80,80,75))
draw.text((28, BODY_Y+110), "to your account.", font=F_STEP, fill=(80,80,75))
# NEW WORDING 2026-05-09 — beta-tester feedback. Step 2 used to break
# mid-domain ("pictureframe / .edholm.me") which read as broken text;
# also tightened step 1 and 3.
steps = [
("Scan the QR with your phone", "camera or QR app"),
("Sign in at pictureframe", ".edholm.me"),
("Name the frame, choose", "orientation — done."),
("Scan the QR with your phone's", "camera"),
("Sign in or create an account", ""),
("Name your frame and pick", "orientation — done."),
]
sy = BODY_Y + 136
for i, (l1, l2) in enumerate(steps):