← back to Dw Photo Capture

DEVICE-TEST.md

68 lines

# 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.
- [ ] **Multi-photo tip (matters):** for visual-ID, take **2-3 pattern shots** from slightly different
      angles/distances before it resolves — the app **fuses all views** (a pattern matching across
      several shots outranks single-shot noise). Single handheld shots are only ~1-in-3 top-1;
      multiple views is the reliable way to ID by design. Same applies to the Add-mode dup warning.
- [ ] 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.