~/work/who-decides-war/
Who Decides War
Built a custom media-heavy Shopify storefront across navigation, collections, products, search, cart, HLS video, and responsive editorial commerce.

- Role
- A Unified Whole · Software Engineer
- Period
- Nov 2025 – Jan 2026
- System
- fashion commerce
Editorial did not mean static
Who Decides War needed a storefront that felt like the brand’s visual world while still behaving like a complete Shopify store.
Jeff Visoky created the brand and web design for Who Decides War. He gave me the visual direction and page designs; I implemented the Shopify theme and the storefront behavior needed to make them work with real catalog data.
The visual direction leaned on strong typography, full-bleed imagery, collection storytelling, video, and an interface that could recede behind the clothes. A generic theme could provide products and a cart, but it would not preserve that editorial pacing. At the same time, a collection of custom campaign pages would be difficult for a merchant to maintain and easy to break on smaller screens.
I built a compact custom theme around Shopify’s normal architecture: layouts, JSON templates, sections, snippets, assets, and schema. Reusable headers, menus, product and collection pieces, media blocks, cart surfaces, and search components supplied the behavior. Brand-specific composition lived in merchant-editable sections rather than hard-coded page snapshots.
The design goal was restraint. The engineering goal was making that restraint survive real catalog data, unavailable products, changing media, and navigation across the rest of the store.
Navigation had to change with the page
An overlay header works on a cinematic homepage until the next page has no image behind it.
The header needed different visual behavior across templates and scroll positions while keeping menus, search, and cart reachable. Desktop navigation could expose nested menus through pointer interactions; mobile needed explicit toggles, predictable back paths, and scroll behavior that did not trap the page.
I moved menu content into configurable theme settings and built dropdown behavior around Shopify link lists instead of fixed labels. That let the merchant change collections or hierarchy without editing Liquid. Search input and results behavior followed the same principle: respect Shopify routes and objects while presenting them in the brand’s visual system.
The small fixes mattered. A mobile cart link, an overlapping dropdown, or an invisible header on a bright image could interrupt a purchase before the product page loaded. Navigation was not just a frame around the design. It was one of the storefront’s core stateful components.
Collection pages carried motion and state
The collection grid had to present campaign media, product availability, pricing changes, and a growing catalog without becoming noisy.
I built reusable collection blocks that could use Shopify collection data or explicit editorial overrides. A block could resolve its title, image, link, and video from section settings with sensible fallbacks. Native video, hosted sources, and Shopify HLS output needed different markup and playback handling while keeping a consistent visual frame.
Product cards reflected sale pricing and sold-out state instead of treating every item as equally purchasable. Endless collection loading extended the catalog without discarding the current browsing context, which meant new cards needed the same media and interaction initialization as the first page. Loading, completion, and empty states had to remain quiet enough for the design while still being understandable.
This was where Liquid and JavaScript met most often. Liquid knew the catalog and section settings; JavaScript managed incremental loading and media behavior. Keeping the handoff narrow prevented an editorial collection page from turning into a second product API client.
Product media could not be one layout everywhere
A fashion product page may have several images, video, and long content, but the customer still needs to understand the item and buy it.
I worked on product media galleries, thumbnail and large-view behavior, hosted video and HLS playback, variant-aware content, sale or sold-out presentation, and layouts that stayed usable when a product had unusually large media or description blocks. The desktop composition could be spacious and editorial; mobile needed clearer ordering and controls.
Video support required source detection and fallback behavior rather than assuming every media field produced an MP4. Shopify-hosted video could expose HLS streams, while uploaded assets or external sources needed different handling. Autoplay, muted state, looping, controls, and plays-inline behavior depended on whether media was a background surface or product content the customer should control.
The theme kept these choices inside reusable media and product components. That made it possible to improve playback or responsive behavior without editing every template that displayed a collection or product.
Responsive work protected the shopping path
Most defects appeared where the brand layout met a narrow or unusually large screen.
Mobile cart behavior, menu and dropdown state, product content height, media cropping, and purchase controls went through repeated correction. At the opposite end, very large product screens could create unreadable line lengths or leave purchase information too far from the media. The solution was not one breakpoint; it was preserving the intended order and relationship of content across interaction modes.
Tailwind provided a useful constraint system, but the work still depended on inspecting actual products and media. A card height that worked for one image ratio could fail on a video. A title overlay could hide on one frame and become illegible on the next. Sale badges and sold-out labels had to remain visible without turning the grid into a dashboard.
Those iterations are the reason the theme feels calm. The simplicity is the result of handling the busy states underneath it, not the absence of them.
The theme editor was part of the product
A custom storefront is more durable when brand flexibility does not require developer access.
Sections exposed the choices a merchant was likely to change: collections, titles, images, video files or URLs, links, menu structures, featured blocks, and layout behavior. Defaults and fallbacks kept a section usable before every optional field was configured. JSON templates composed those sections into pages without locking the store into one content sequence.
That required resisting two extremes. Too little configuration would hard-code a campaign into Liquid. Too much would turn the theme editor into an undocumented page builder with combinations the design had never considered. The useful boundary exposed content and supported variants while keeping typography, spacing, interaction, and commerce logic inside the theme system.
For handoff, that boundary mattered as much as visual fidelity. It let the store continue changing while preserving the design decisions that made it recognizable.
The restraint was the engineering
The engineering success was making a media-heavy fashion site feel quiet without making it fragile.
Who Decides War combined Liquid data, configurable navigation, product and collection state, multiple video paths, incremental browsing, and responsive shopping behavior. None of those pieces was exotic alone. The difficulty was letting them recede behind the brand while remaining correct when the catalog or device changed.
I came away with a stronger respect for implementation that does not announce itself. A clean interface often depends on more state handling, not less. The best custom theme work gives a brand more control while giving shoppers fewer reasons to notice the machinery.
- Use Shopify objects and schema as the content boundary, not hard-coded campaign data.
- Separate editorial media behavior from product media controls and fallbacks.
- Carry sale, sold-out, cart, search, and pagination state through the visual system.
- Expose merchant choices deliberately while keeping design rules inside the theme.