[object Object]

← back to Dw Photo Capture

Device-test checklist for the iPhone-Safari real-device pass (camera-first, specs, mics, 10/6 gallery, calibrate-once measure, live Update + 2nd-push confirm, video transcode)

7d4ccb68012e0664d006467f85bbd34677db814a · 2026-07-07 08:56:28 -0700 · Steve Abrams

Files touched

Diff

commit 7d4ccb68012e0664d006467f85bbd34677db814a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jul 7 08:56:28 2026 -0700

    Device-test checklist for the iPhone-Safari real-device pass (camera-first, specs, mics, 10/6 gallery, calibrate-once measure, live Update + 2nd-push confirm, video transcode)
---
 DEVICE-TEST.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/DEVICE-TEST.md b/DEVICE-TEST.md
new file mode 100644
index 0000000..620a351
--- /dev/null
+++ b/DEVICE-TEST.md
@@ -0,0 +1,63 @@
+# dw-photo-capture — real-device test checklist (iPhone)
+
+**Open in SAFARI** (not Chrome/in-app browsers — iOS only gives Safari the camera):
+`photo.designerwallcoverings.com` → login `admin` / `DW2024!`
+
+Everything below is deployed and headless-verified; this pass confirms the *physical* camera +
+measure paths that only a real device can exercise.
+
+---
+
+## 1. Home → camera-first
+- [ ] Home shows 3 white pills: **Add New SKU · Update SKU · Check Sample In**.
+- [ ] Tap **Add New SKU** → the camera opens *immediately* (that's the camera-first flow).
+
+## 2. Add New SKU — capture + specs
+- [ ] Shoot a **sample label** → within a couple seconds the fields auto-fill (Mfr#, name, color)
+      and a **Captured specs** list appears (material/width/repeat/match/contents/etc.).
+- [ ] Tap a **🎤 mic** on a field → speak → it fills that field.
+- [ ] **📷 Photo** and **🎥 Video** buttons add media; counters climb (N/10 · N/6); ✕ removes one.
+      *(This is the HEIC path — the one thing never tested on-device. If a photo ever fails to
+      load, it should toast "Could not read that photo," NOT freeze.)*
+- [ ] **👁 Preview** → shows the draft summary → **✅ Create draft** → "Created DRAFT · <sku>".
+      Confirm it's a **draft** in Shopify admin (not live).
+
+## 3. 📐 Measure — calibrate once, then card-free
+- [ ] Tap **📐 Measure** → first time shows the red 💳 box + "One-time setup."
+- [ ] Lay a **credit card** in view, size the red box to it, tap **✓ Save calibration**.
+- [ ] Card box disappears → size the green 📦 box to some goods → live **W × L** reads out.
+- [ ] Close and reopen Measure → it goes **straight to the goods box, no card** (calibration saved).
+- [ ] Sanity: measure something you can check with a ruler; expect ~±10% (hold the phone at a
+      similar distance to your calibration).
+
+## 4. Update SKU — LIVE writes (careful — real products)
+- [ ] Tap **Update SKU** → camera opens. Shoot a **label** of a product that exists in Shopify.
+- [ ] It resolves: "✓ Updating <title>". Add a photo → **⬆ Push media to SKU (LIVE)** →
+      "✅ LIVE: N photo(s) → <sku>". Confirm the photo appears on that product in Shopify.
+- [ ] **Visual-ID path:** with the mfr# blank, shoot the **front pattern** → it should match by
+      design ("🔍 Visually matched <title>" once the re-embed is done). If it auto-matched,
+      the **first Push asks "tap Push again to confirm"** — that's the safety gate; a 2nd Push writes.
+- [ ] Edit the mfr# after a match → the target should reset ("mfr# changed — re-find") so you never
+      push to a stale product.
+
+## 5. Video → Shopify
+- [ ] In Add or Update, add a short **🎥 video** → save/push → watch the note:
+      "🎥 Uploading… → transcoding N/M… → N video(s) ready ✓" (Shopify transcodes async, ~1–2 min).
+- [ ] Confirm the video appears on the product in Shopify admin.
+
+## 6. Check Sample In
+- [ ] Tap **Check Sample In** → front/back identify modal opens; shoot back label + front pattern →
+      it fuses code + pattern into a best match.
+
+---
+
+## Known-good expectations
+- **Visual-ID confidence** rises to **high** once the fine-tuned re-embed finishes (during the
+  re-embed it may say "medium" — that's coverage, not quality; the model is 2.3× better on held-out).
+- **Draft vs live:** Add = draft (safe); Update = **live immediately** (your explicit choice) — but
+  a visual/ambiguous match always needs the 2nd-Push confirm before it writes.
+
+## If something's off
+- Camera won't open → you're not in Safari, or camera permission denied.
+- Measure wildly off → Recalibrate (↺) and hold at a consistent distance.
+- Video "N failed" → clip too big (>150MB) or a transient upload error; retry.

← ec02bd7 Wire in fine-tuned DW CLIP: sanity-check picks best epoch (e  ·  back to Dw Photo Capture  ·  Add-mode visual dedup: new-SKU pattern photo → fine-tuned vi cf2ea4a →