Project portfolio Browse selected work

Shopify Plus: up to US$4,800 development credit

Electric bicycles

A-Spadz

A-Spadz uses a focused range for European urban and light-adventure riding. The storefront emphasizes range hierarchy, accessories, retail locations and multilingual service rather than catalog breadth.

Visit the live project
A-Spadz CAVET Air European e-bike
Official public brand visual

Core implementation review

Three storefront journeys from model choice to purchase

A-Spadz is not merchandising an open e-bike grid. The European storefront has to route a rider to the right CAVET host, keep colour and compatible parts on that same bike, and still present stores, warranty and checkout language for the destination market.

Project context

Define how customers choose before defining the storefront

Buying decision

CAVET Air, CAVET and Air-Combo are differentiated by price, battery, range and use. Customers choose solo commuting or paired purchase, then colour and compatible batteries, bags or racks.

Delivery boundary

WESWOO builds a full lifecycle around a focused range—selection, colour, bundles, accessories, stores, registration and warranty—so visual identity is supported by credible ownership service.

01Model range

Settle commuting, range and a paired purchase before colour

The European catalog is a short host-bike line. Home merchandising separates CAVET Air, CAVET and Combo by price, battery and use, so a product page opens on a riding job rather than a grid of similar names.

  1. 01Meet the three core models on the home page
  2. 02Open the PDP for solo commuting or a paired purchase
  3. 03Confirm position, power and range
  4. 04Only then move to colour and parts

Implementation

  • CAVET and CAVET2 (CAVET Air) remain separate products; Combo is a paired-purchase entry rather than extra options inside one variant matrix.
  • Cards keep battery, torque, range and sensor visible at narrow widths so home and range views compare the same fields.
  • Replacement parts sit in their own family so service SKUs never crowd the host-bike hierarchy.

Deployment and acceptance

  • Model titles and core specifications are reused across EU markets; riding-context copy lives in product-template sections and blocks that can update per bike.
  • Listing quick-add only submits the host’s default sellable state; full configuration still happens on the product page.
ResultWhat changes after implementation
  • Shoppers choose a riding job first instead of hunting through bags, racks and spares.
  • A Combo change or a new host is mostly a product-object and story-module update.
View script and Shopify API evidence
quick-add.js
02Colour to cart

Let the chosen colour own the gallery, price and sticky bar

Colour is the shoppable variant on these bikes. A colour change must move media, price, availability and the sticky bar together; batteries, bags and racks then attach as related items, not as a second host.

  1. 01Select a colourway
  2. 02Sync media, specifications and availability
  3. 03Echo colour and price in the sticky bar
  4. 04Submit that variant, then add compatible parts

Implementation

  • product-info.js keeps model and colour aligned, media-gallery.js pages the matching assets, and product-form.js submits that same variant.
  • shine-trust-v4-sticky-cart.js repeats colour, price and the primary action instead of resolving options on its own.
  • shine-trust-v4-bought-together.js, shine-trust-v4-buyx-gety.js and Product Recommendations keep batteries, bags, racks and threshold offers in distinct states from a single-bike add.
  • cart-drawer.js treats returned Ajax Cart JSON as cart state; quantity-popover.js continues through Cart Ajax change and update.

Deployment and acceptance

  • Gallery, buy box, specifications and complementary offers remain separate sections while reading one active variant.
  • Theme-editor reloads remount gallery and sticky-cart modules only, so listeners are not stacked.
  • Swiper 8 runs the mobile carousel; closing it restores focus to colour, and the sticky bar stays clear of geometry and the main action.
ResultWhat changes after implementation
  • The bike on screen, its price and the variant entering the cart stay the same object after a colour change.
  • A solo add, a sold-out colour and a paired offer remain visually distinct, so a rack is not mistaken for another frame.
View script and Shopify API evidence
product-form.jsproduct-info.jsmedia-gallery.jsshine-trust-v4-sticky-cart.jsshine-trust-v4-bought-together.jsshine-trust-v4-buyx-gety.jsquantity-popover.jscart-drawer.jsCart Ajax: addCart Ajax: changeCart Ajax: updateProduct Recommendations APIswiper-bundle.min.jsShopify theme editor mode
03European service

Keep language, stores and warranty inside the buying path

The same CAVET hosts sell into several EU markets. Specifications can be shared; delivery, retail availability, warranty and checkout language cannot. Those ownership cues belong next to the buy action, not only in the footer.

  1. 01Open region and language selection
  2. 02Reuse the same host specifications
  3. 03Confirm stores, warranty and checkout language on the product page

Implementation

  • localization-form.js and floating-selector.js are the switching surface; colour and sticky-cart logic consume the selected catalog instead of embedding country strings.
  • pickup-availability.js surfaces local pickup on the product page so retail entry sits in the purchase path.
  • Warranty, reviews and after-sales copy are merchandiser-editable modules, separate from power and range fields, so policy can change without touching variants.

Deployment and acceptance

  • Core bike specifications stay shared; delivery, stores, campaigns and support publish per country from theme settings.
  • Checkout preloads use en-NL. Cookie, Klarna and consent messaging remain configurable storefront integrations, outside product-form.js.
  • Promotion bars, navigation and product-content modules can ship independently of a full template rewrite.
ResultWhat changes after implementation
  • After a market switch, the rider is still configuring the same CAVET, with delivery and service language matching the destination.
  • A country store or warranty update does not require a new colour variant or a rewritten add-to-cart path.
View script and Shopify API evidence
localization-form.jsfloating-selector.jspickup-availability.jsproduct-form.js

Operational handoff

The operating team can continue after launch

Catalog and content
  • Host bikes are product objects for CAVET and CAVET Air; colour is the shoppable variant.
  • Batteries, frame bags and racks attach as related products by compatibility, not as host variants.
  • Spares stay in a separate family, and the Combo entry is maintained apart from a single-frame product so offers and inventory are not crossed.
Market operations
  • The storefront is European, multilingual and EUR-priced; the localization controls switch catalogs, and checkout preloads use en-NL.
  • Torque and range copy is reused; delivery, stores, campaigns and warranty remain country-editable.
  • Payment and privacy messaging stay configurable integrations, not product-form logic.
Research notesPublic sources and verification boundary

Public research sources

Content verification

Industry, product and observable feature notes are verified against the brand site. Apps, admin configuration and commercial data that cannot be confirmed from the storefront are not inferred. WESWOO scope is stated only from project records and client authorization.

Public information last reviewed: 2026-08-12

Your next move

Turn your storefront into infrastructure for sustainable growth

Discuss your project