Skip to content
FeaturesPricingAffiliateBlogHelpAboutContact
Get StartedSign In
Back to Blog
industry2026-05-2312 min read

My weekend brunch average order value slowly dropped from €18 to €16.50 over 6 months — the cross-sell rail had been silently empty the whole time (D1 JOIN+json_group_array anti-pattern)

Inês (30), runs Padaria do Loureiro bakery+café in Porto Cedofeita, watches brunch AOV slowly drop from €18.02 to €16.47 over 6 months. Cycles through five wrong theories — none works. thMenu support forensic: the "Customers who liked this also added" cross-sell rail was empty on EVERY render for all 47 products. Bug: `apps/web-menu/src/app/[locale]/[restaurant_slug]/product/[product_id]/page.tsx:39-60` SSR query combined `JOIN products` with a correlated `json_group_array(json_object(...))` SELECT subquery — CLAUDE.md §2 bans this combo; D1 returns 500 reliably. `try {} catch {/* non-critical */}` swallowed the failure → rail was empty for the entire feature lifetime. Math: 80 views × 30% configured × 40% accept × €1.30 lift × 26 weeks = €2,366 in revenue that never landed. **PR #657 batch IX F2** fix: split into 2 queries + JS-side Map merge + `[BEACON:similar_products_query_failed]` log marker. Fix deployed Thursday, Sunday AOV jumped to €17.90. Pattern: D1 JOIN+json_group_array = always 500; every "non-critical" catch deserves a beacon log marker.

th

thMenu Team

thmenu.com

Found this helpful? Share it.