Deeve Technologies
Client workShopify

Awareness Avenue, Customizer

Six Shopify Liquid product customizers for personalised jewellery, including the ring pair that replaced a paid options app: tag-gated, metafield-driven, priced through hidden fee products, with no app subscription and no third party...

ClientAwareness Avenue
RoleShopify Liquid developer
Year2026
TypeShopify
The engraving widget running on a live Awareness Avenue ring product page
The Personalize Your Ring panel on a live Awareness Avenue ring page, with engraving and carat upgrade toggles
The engraving panel on a live Awareness Avenue bracelet page, taking up to three engravings with per-engraving pricing
Overview

Six product customizers written in Shopify Liquid for a jewellery brand where almost nothing ships unpersonalised.

Built for Awareness Avenue alongside the automation work.

Built with
ShopifyLiquidJavaScriptTheme CustomizationCRO
The problem

What was in the way

Personalised jewellery breaks the normal Shopify variant model.

A three-stone ring where each stone is a different birthstone and each can carry a name is not three variants, it is a combination the variant system was never meant to hold. Doing it with variants means thousands of SKUs, almost none of which ever sell.

Options apps solve it by rendering their own widget and taking over Add to Cart. That works until the widget has to match the theme, price a fourth charm differently, or behave one way on a necklace and another on a ring. On this store an app also owned the checkout path on the products that made the most money.

What I built

Six parts, each with a reason

A ring customizer that replaced the app

ring-customizer.liquid, 536 lines, written to replace the Globo option set on the wife rings. Three optional sections: engraving, carat upgrade and stone colour.

Each one is off unless its boolean metafield says otherwise, so a plain band renders no switches at all and a stone ring renders three.

A photo personalizer that had to bypass the AJAX cart

Photo, date and message, all three required, with the date and message accepting "N/A" as the escape and the photo hard-required.

A file cannot ride Shopify's AJAX cart/add.js, it is silently dropped. So the three fields are real named inputs inside the product form and travel on the theme's own multipart POST to /cart/add. That single constraint is why it is a separate build rather than another variation of the engraving widget.

The already-engraved case

ring-customizer-engraved.liquid, 599 lines, for rings that ship with an engraving on them.

It opens with "keep current engraving" on by default. Turning it off offers two paths: change it, which runs the normal placement and text flow, or remove it for a plain band at no charge. You can see it on The Horizon Ring.

It refuses to render if the product also carries the ring-customizer tag or the Globo tag, so two customizers can never fight over the same Add to Cart button.

Birthstones, charms and engraving

The earlier three, all on the same pattern: a birthstone picker that draws a faceted gem in the month's colour and layers a real photograph over it when one exists, a charm widget that reads its count from a variant option or renders its own stepper, and a standalone multi-engraving widget.

Pricing through hidden fee products

Charges ride existing unlisted fee products rather than variants: one handle for engraving, one for the carat upgrade, one for colour.

On Add to Cart the widget adds a fee line per chosen option and lets the theme add the ring last, so the ring sits on top of its own option lines in a cart that sorts newest first. If a fee product is ever missing, that section hides itself rather than breaking the page.

A birth flower widget with real counting

One grid of twelve months. The theme's "Number of Flowers" variant option owns how many can be picked, tapping a selected month releases the slot, repeats are blocked, and unpicked months disable themselves once the limit is hit.

The first flower is included and each additional one fires an extra-flower fee at a quantity of count minus one.

How it was built

The engineering underneath

No appLiquid, JavaScript and CSS in the theme, with no subscription and no third party holding customer data
Tag gatedEvery widget is an independent snippet switched on by a product tag rather than a deployment
Line-item propertiesSelections ride the cart line, so the order, packing slip and fulfilment export all carry them

Shopify Liquid, JavaScript and CSS in the theme. No app subscription and no third party holding customer data.

Every widget is an independent snippet gated on a product tag, so turning one on is a tag rather than a deployment. Every behaviour is a metafield with a default written into the snippet, so the merchandising team changes limits and surcharges without touching code and a product with nothing set still renders correctly.

Selections save as line-item properties on the cart line, which means the order, the packing slip and the fulfilment export all carry them without anything extra installed.

Each file opens with a comment block naming its tag, its metafield namespace, its defaults and its pricing route, because the people editing products after me are not developers.

The newest pair replaced a paid options app on the ring range. The rest cover birthstones, charms, engraving, birth flowers and photo engraving.

ShopifyLiquidJavaScriptTheme CustomizationCRO
More work

Projects like this

All projects
Why it matters for your project

I build software, and I measure whether it works.

The same questions I research are the ones I ask on client builds: is it reliable, is it fast, is it easy to use, and is it secure. Those four drove satisfaction in my ICT portal study, and they shape how I scope and test every project.