The Theme Loop / Q4 2025
Cross-Browser Background Video, Shipped Solo Across Four Layouts.
Three browsers, three different failure modes that all rendered as the same visible bug.
// The Problem
Three browsers behaved three different ways under the same Liquid section. Safari played only the first video and ignored the rest, Chrome rendered static thumbnails instead of autoplaying, and Firefox showed thumbnails while its API quietly lied about the video state. The store needed Liquid sections supporting four layout variants (columns, scroll, collapsible, slider), each capable of rendering either an image or a silent looping background video.
// The Fix
The root cause was browser autoplay policy enforcement. Each browser implements the spec differently, and Shopify's Liquid rendering compounded the inconsistencies. I built a custom IntersectionObserver solution that manages video lifecycle based on viewport visibility: videos load and play only when scrolled into view, pause when scrolled out (saving battery on mobile), and handle the Safari-specific quirk of requiring user gesture delegation for multiple video elements.
Zero third-party dependencies and zero layout shifts. The videos sit as true background elements: muted and looping, controls hidden, with a static image fallback when a device refuses autoplay.
// outcome
All four layouts (columns, scroll, collapsible, slider) shipping background video on Safari, Chrome, and Firefox.
4
Layout variants
3
Browsers reconciled
1
Hand-rolled IO solution
0
Third-party deps
// NDA note
This project was completed under NDA, so the client name and some specifics stay private. Happy to walk through the long form (technical detail, trade-offs, sanitized artifacts) under your own NDA if it would help.
AI Shopify Generator
Q3 2025A CLI that turns a prompt into a production Shopify page, deployed and validated.
NDA client
The Tracking Gap
Q2 2024Browser-only tracking was missing half the story.
NDA client
The Brand Asset Hub
Q2 2025I replaced three vendor relationships with a single internal tool that runs the entire creative ops loop.
NDA client
Got a similar problem? Let’s talk.

