Off-Roading Shopify
Shopify + Klaviyo + Recharge — Plus AI Trade-Show Kiosk
Multi-system Shopify engagement: audit + harden the operation. Mid-engagement, built an AI trade-show kiosk after watching booth pain.
- JS dwell-time tracking in theme.liquid → Klaviyo profile properties for browse-personalization
- 3 Klaviyo flows (Welcome, Browse Abandonment, Abandoned Cart) with 6-path Django upsell logic
- Shopify Flow customer-tagging architecture + product-tag fix (caught Product_W mis-tagged as Product_X)
- JSON-LD schema (AggregateRating, BreadcrumbList, FAQPage) + robots.txt.liquid + Meta catalog (344 files)
- Recharge 5-email failed-payment recovery + shadow-DOM CSS injection for widget button labels
- AI trade-show kiosk: four-model image pipeline, 7-level fallback chain, two-device QR session sync
- Shopify Admin GraphQL
- Liquid
- Shopify Flow
- Klaviyo
- Recharge
- Next.js 16
- TypeScript 5
- OpenAI gpt-image-1.5
- Claid.ai
- Neon Postgres
Three engineering deep-dives
Two on the AI kiosk surface (image pipeline + prompt-engineering harness), one on the Shopify side of the engagement (Klaviyo personalization architecture — dwell-time JS, customer-tag taxonomy, 6-path Django conditional logic). Each is a focused walkthrough — architecture, the engineering 'why,' and real annotated source. Independently linkable, so share the one that matches the role.
AI Image Pipeline
Customer photo + scene description → print-ready 15,420 × 1,320 px panoramic in ~45s, with a 7-level graceful-degradation chain so the booth never tells a paying customer "generation failed."
Read case study →Prompt Engineering
Image models trained on 1:1 / 16:9 data don't have a useful prior for 11.68:1. The prompt has to do composition work the model wasn't trained for — so I built a switchable harness with eight strategies and shipped the one with the most stacked constraints.
Read case study →Personalization Architecture
Custom storefront JS pushes per-product behavioral data to Klaviyo profile properties; email Liquid reads Shopify customer tags + Recharge subscriber tag through 6-path Django conditional logic so the right cross-sell goes to the right customer.
Read case study →Want to see the harness or the diagnostics object?
Happy to walk through the 8-prompt comparison run, the per-phase ms timings, or the full 7-level routing decision on a call.