From ff1ae7982499a3cb0e7f124215c6ad75c22cbe37 Mon Sep 17 00:00:00 2001 From: Matt Edholm Date: Fri, 8 May 2026 18:41:33 -0400 Subject: [PATCH] docs(reset): "hold until the screen starts to flash" terminology MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Renames the user-facing description of the BOOT-button factory reset across the codebase. The threshold remains 5 s (RESET_HOLD_MS) but "hold for 5 seconds" misled users: total wall-clock time-to-visible- change includes ~20 s of e-ink redraw after the threshold fires, and a too-short press now wakes the device into a normal poll cycle (a side effect of the EXT0 wakeup we just added). "Until the screen starts to flash" matches what the user actually sees. - Remove-this-frame modal gains a small aside describing the physical reset for the new owner, with the new terminology and a callout that a brief tap just refreshes the image. - CLAUDE.md and the operation.h comment near the EXT0 wake call use the same phrasing. - feedback_reset_terminology.md memory locks the rule for future edits — never write "hold for 5 seconds" in user copy. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 2 +- frontend/src/views/HomeView.vue | 15 +++++++++++++++ ...et-BPaL7SoR.js => BaseBottomSheet-BJ-4S2HL.js} | 2 +- ...icker-DC7iFd_Y.js => DevicePicker-qeCTtRmk.js} | 2 +- ...{HomeView-Db9Al7L1.js => HomeView-D07qrHpY.js} | 2 +- ...omeView-DwSsh2DL.css => HomeView-WQheOzw3.css} | 2 +- ...ryView-xvPIft8b.js => LibraryView-Czb8zdcL.js} | 2 +- ...sView-DCS7ac_2.js => SettingsView-CX4Yi75h.js} | 2 +- ...oadView-BchKf6zv.js => UploadView-DaSwla70.js} | 2 +- .../{index-BojlVxcP.js => index-CmcHGdN5.js} | 4 ++-- public/build/index.html | 2 +- 11 files changed, 26 insertions(+), 11 deletions(-) rename public/build/assets/{BaseBottomSheet-BPaL7SoR.js => BaseBottomSheet-BJ-4S2HL.js} (98%) rename public/build/assets/{DevicePicker-DC7iFd_Y.js => DevicePicker-qeCTtRmk.js} (96%) rename public/build/assets/{HomeView-Db9Al7L1.js => HomeView-D07qrHpY.js} (96%) rename public/build/assets/{HomeView-DwSsh2DL.css => HomeView-WQheOzw3.css} (69%) rename public/build/assets/{LibraryView-xvPIft8b.js => LibraryView-Czb8zdcL.js} (98%) rename public/build/assets/{SettingsView-DCS7ac_2.js => SettingsView-CX4Yi75h.js} (92%) rename public/build/assets/{UploadView-BchKf6zv.js => UploadView-DaSwla70.js} (98%) rename public/build/assets/{index-BojlVxcP.js => index-CmcHGdN5.js} (99%) diff --git a/CLAUDE.md b/CLAUDE.md index a43a8da..a8d9fd8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -34,7 +34,7 @@ Build gifted e-ink frames that stay personal and current over time, with no ongo - Atomic image write: display only refreshes after complete confirmed transfer; last good image persists through outages - Deep sleep between pull cycles (see ESP32 deep sleep memory) - Status via border color: yellow = sync fail, red = no WiFi -- 5-second button hold triggers re-provisioning (config wipe + AP mode) +- Holding the BOOT button until the screen starts to flash triggers re-provisioning (config wipe + AP mode). Threshold is 5 s in firmware (RESET_HOLD_MS), but user-facing terminology is "hold until the screen flashes" because total wall-clock time-to-visible-change includes a ~20 s e-ink redraw, and a too-short press just wakes the device into a normal poll cycle. - Two-phase provisioning: AP mode (WiFi credentials) → STA mode (QR to account setup page) - Async image processing: Symfony Messenger (Doctrine transport), `max_retries: 1` - Image storage: `storage/images/{id}/{model}_{orientation}.bin`, relative paths in DB diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index 48e89b1..6be5d16 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -251,6 +251,12 @@ this frame from your account and unlinks it from your photos so the next owner can claim it fresh. This can’t be undone.

+

+ On the frame itself, the new owner can also do a factory reset + by holding the small button on the back until the screen starts + to flash. (If they only tap it briefly, the frame just refreshes + its current image — keep holding until it flashes.) +