← Back to gallery

H4-Y — Product Variants Configuration UX rework PROD

2026-05-25 — Gate 2 ship. Closes the H4 arc properly. Narong reviewed H4-X (variant editing at /cafe/settings/attributes) and pushed back: variant configuration should match Odoo's UX (Product form with Attributes & Variants tab + per-variant detail page), not a separate admin. Verified against odoo/odoo 17.0 source. Surfaced new durable feedback rule: default to Odoo UX patterns for every new screen.

Summary

Status
12/12 prod · 21/21 local · typecheck clean
Commits
nix-outdoor-sales-backend 3f47d67 · nix-cafe 0f37896
Files
1 migration · 5 modified + 4 new + 2 deleted in nix-cafe (1872 ins / 2241 del = −369 LOC net)
Migration
Applied to prod Supabase: 4 new cols on cafe.product_product + barcode partial-unique idx (verified post-apply)
Source
Notion v0.2 doc, "Product Variants Configuration" section
Tested on
lumiere-coffee.nixtech.app (Starter)

What Narong asked for

Mapped to routes: /cafe/products = joined list · /cafe/products/[id] = Product form with Attributes & Variants tab · /cafe/products/[id]/variants/[variantId] = variant "Configure" page.

What shipped

Routes

Schema migration

DAO + action extensions

12/12 prod checks

Prod: cafe.product_product has barcode + standard_price_usd + weight + volume
Prod: cafe_product_product_tenant_barcode_unique_idx exists
Login to lumiere-coffee
/cafe/products renders + has joined-list testids
List has product rows (lumiere has 25 product_product seeded)
Click a single-variant product → /cafe/products/[id] loads
Seed throwaway template + variant on prod (TAG-prefixed)
Variant detail page renders full Odoo field set
Edit variant: barcode + cost + weight + volume + save persists (DB round-trip verified)
/cafe/settings/attributes redirects (authenticated)
Settings nav: no Attributes entry on /cafe/settings
No 5xx HTTP responses during the suite

Throwaway template H4YPROBE_* auto-cleaned via process.on("exit") + cascade-delete (template → product_product → combos).

Screenshots

Regression sweep

51/51 regression green · 12/12 H4-Y prod = 63/63 total. No regressions from this push.
test-phase1-prod.mjs11/11 (narongix)
test-phase2-sso-outdoor-prod.mjs6/6 (narongix)
test-phase2-cafe-multishop-prod.mjs6/6 (demo) · 2 parallel-load flakes on the POS-picker check, solo retry green — matches the known race documented in project_session_2026_05_24_narong_feedback
test-m1-prod.mjs10/10 (narongix)
test-r7-prod.mjs14/14 (narongix + lumiere)
test-r8-prod.mjs4/4 (narongix)
test-h4-y-prod.mjs12/12 (lumiere — this slice)

Open Qs flagged for Narong (defaults applied)

Notes for Narong