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:
+20
-15
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user