The Firewright is a live outdoor cooking finder we built on Shopify's Universal Commerce Protocol (UCP) and Global Catalog, and it went from a fork of our first Catalog site to a public launch in two days, because everything specific to a category lives in one config file. Since late August it has also been set up for Shopify's Promoted Placements program, the commission layer we could only join a waitlist for when we started.
I built it for myself. I cook outside most weekends, I am an obsessive pizza person, and I own an Ooni. In July we shipped Frunk & Trunk, an accessory finder for Tesla and Rivian owners, and wrote up what building on UCP taught us the first time. About three weeks later The Firewright followed: 8 brands and 21 grills, griddles, kamados, fire pits and pizza ovens, from a Traeger Ironwood to a Gozney Dome. It holds no inventory and stores no product data. Every price is a live catalog query when the page loads, and every purchase happens on the seller's own site.
One config file is the vertical
On day one of the first build, before we knew there would be a second, we put everything category-specific in a single file: which brands and models a visitor picks from, which categories exist, what each category searches for, the copy, the empty states, the disclaimer and the countries we ship to.
Everything else is category-agnostic on purpose. The catalog client, the structured data builders, the routes and the browser scripts never learned what an electric vehicle was. They know there is a product a visitor picks first and a set of categories hanging off it. Swap the config and you have a new vertical. We forked the repository on July 24, and The Firewright was public on July 26.
The new repository keeps the EV one as an upstream remote, so fixes travel both ways. In October, four search filter bugs found on Frunk & Trunk, including price caps read in US dollars for Canadian shoppers, came over line for line. Nearly every bug in the shared code has turned up on both sites; the one recorded exception was a layout shift in a hero only The Firewright has.
A fork is a free audit of your own abstractions
Standing up the second vertical, then widening it, exposed three defects that more testing on the first site would never have found:
-
A brand name is one word. The script that remembers your pick rebuilt homepage category links by splitting the stored slug at its first hyphen. That works for
tesla-model-y. It sent Solo Stove, Big Green Egg and Kamado Joe owners to a 404. - Model names are short. Our accessibility checks assert that no page scrolls sideways at 320 pixels wide. The new site failed by 21 pixels, because the longest option in the model switcher went from "Model Y" to "Blackstone 36 Inch Griddle".
- We know which brands are ours. A guard keeps other manufacturers' products off a brand's pages. When we added pizza ovens, it was quietly filtering Ooni and Gozney out of their own pages, because the grill-only version of the site had listed them as other brands.
A second vertical asks the questions you did not know were questions.
What changed for outdoor cooking
We compare the appliance itself. Frunk & Trunk can only compare accessories, since nobody buys a Rivian through a comparison page. Here the grill or oven is the purchase with the strongest search intent, so each model page opens with the cooker itself across shops, cheapest first, whenever at least two shops carry it. That took filters for parts listings, price floors against partial listings posting a false best price, and whole-word model matching so an Ooni Koda 12 never lands on the Koda 16 page.

The categories depend on the cooker. A pizza peel has no business on a Weber page. Each of the 12 categories says which kind of cooker it applies to, so a model page shows 8 of them, and a mismatched address returns a 404 instead of an empty shelf.

Screenshots: thefirewright.com, November 2026.
The name had to be vetted, not just liked. Nearly every good fire word is already a grill brand: Blaze, Ignite, Ember, Stoke, Flare, Spark, Char. The Firewright was the only strong candidate with the .com available and no collision in the category.
The money: from a waitlist to Promoted Placements
When we launched, a site like this could earn only through affiliate programs, one merchant and one application at a time. On August 26 Shopify onboarded us into the Promoted Placements Developer Preview. How it works, per Shopify's Promoted Placements documentation, and what it meant for our code:
-
Turn it on per saved catalog. You switch on Earn commission for a saved catalog in the Dev Dashboard and send its
catalog_idwith your calls. We send it on every call, not only search, so product pages and saved items carry attribution too. -
Label what is promoted. Promoted listings arrive with a
placementobject. We label them Promoted, put a commission note next to results and buy buttons, and never reorder results ourselves. - Leave the link alone. Every eligible Catalog item in the order counts, within a 7-day window, but only when the buyer follows the URL Shopify returned exactly as given. That rules out wrapping it in an affiliate network redirect, so the site skips its own link tagging.
The merchant-by-merchant route has been slow. Three months in, the site has no seller program links, as The Firewright's affiliate disclosure shows. One enrollment covering every eligible merchant in the Catalog is a different thing from a dozen negotiations that can each end in a no.
Three months of running it
Live means every crawl is a catalog call. Nothing is cached, so a bot that walks every product page spends your rate limit. In late August a crawler presenting itself as Chrome did exactly that. The site now stops at the first rate-limit response instead of retrying, turns heavy bots away from expensive routes, and has paused its similar-items page, which cost two to three catalog calls per view.
The guides keep prices live too. The site now has 24 buying guides. The text lives in git, and each guide's comparison blocks fill from the catalog at page load, so no price is ever written into an article. A guide that skips a heading level, has an uncaptioned table or uses "click here" as link text stops the server from starting.
The bar stayed where it was. WCAG 2.2 AA, checked by the site's own scripts: axe at desktop and phone widths, a 19-check keyboard script, contrast checks on every color pair, and reflow tests at 320 and 640 pixels. Core pages are server-rendered with live catalog data, structured data, a sitemap and an llms.txt, so AI assistants that skip JavaScript still see the listings.
If you are building on UCP, treat a discovery surface as a template, not a project. The first one is expensive because you learn the protocol and your own abstractions at once. The second is cheap, and it shows you what you got wrong the first time.
Questions we hear
Can a site built on Shopify's Catalog earn commission?
Yes, through Shopify's Promoted Placements program, which is invite-led during Developer Preview. You earn on attributed purchases when your calls reference a saved catalog with Earn commission turned on and the buyer follows the URL Shopify returned, unchanged.
How long does a second vertical take?
For us, two days from fork to public launch, because the category-specific parts lived in one config file. The real work is what the new category needs that the old one did not.
Can I add my own affiliate tags to Catalog links?
Not to links you want Shopify's commission on. Rerouting the URL or changing its parameters disqualifies the conversion.
Braun Design Co is a boutique Shopify Plus partner in Austin. Custom themes, migrations, and AI search optimization for brands that already sell.
If you are weighing a build on UCP or the Catalog, we are happy to compare notes on what worked and what broke for us. Book a 30-minute call.