Skip to content
career_db

← projects/WHERE slug = 'vaporbeast'

row 1 of 4

Regulated e-commerce platform

VaporBeast

Age-restricted retail, where an incorrect address is a compliance exposure rather than a missed delivery.

record7 fields
slug
vaporbeast
kind
Regulated e-commerce platform
year
2024 — present
role
Software engineer, Solution25
stack
Shopware 6, PHP, Symfony, Vue.js, GraphQL, MySQL
repo
NULL
Fig. 01 — schematic
Plugin boundaries between the Shopware 6 storefront and its external servicesA Shopware 6 core sits at the centre. Three plugins mediate outbound boundaries — Smarty for address validation at checkout, Curbstone for remote card tokenisation, ShipHero for two-way warehouse sync. A fourth, Sales Agent, is internal: it lets a representative order inside a wholesale customer's account.Smartyaddress validationCurbstonecard tokenisationShipHerowarehouse / WMSSmarty pluginCurbstone handlerShipHero syncShopware 6storefront · admin · catalogueSales Agent pluginWholesale accountagent orders on the buyer's behalfPLUGIN BOUNDARIES — SCHEMATIC, NOT A DEPLOYMENT DIAGRAM
Each plugin owns one boundary between the storefront and an outside system. ShipHero is the only two-way sync; Sales Agent is internal to the wholesale flow.

VaporBeast is a US retailer of vape and smoke-free products, selling to adults 21 and over with a separate wholesale programme. I worked on its Shopware 6 platform at Solution25 and wrote several of the plugins it depends on.

01What makes it different

Most e-commerce constraints are commercial. These are legal. Nicotine products in the United States fall under the PACT Act, which brings age verification at delivery, adult signature requirements, and real restrictions on which carriers may carry what. The storefront is age-gated before a visitor sees a product.

That changes the weight of ordinary features. Address entry is normally a conversion problem — here it decides whether a shipment is lawful and which carrier can take it. Payment is normally an integration detail — here the merchant category makes PCI scope a live concern rather than a checkbox.

02The plugins

Four extensions carry most of that weight, and each one exists because of a constraint rather than a preference. Smarty validates and normalises addresses against USPS CASS-certified data at checkout, and reports whether an address is residential or commercial and deliverable at all — which is what the carrier and service-level rules downstream key off.

Curbstone handles payment through remote tokenisation, so card data is captured by a PCI-validated Level 1 provider and never reaches the merchant's own systems. ShipHero syncs two ways with the warehouse: orders out for fulfilment, stock levels and tracking numbers back. Sales Agent lets a representative build and place an order inside a wholesale customer's account, with the agent recorded on the order, because wholesale buyers order by phone rather than self-serving.

03Extending rather than forking

The temptation on a build this specific is to modify the platform. That buys a working store and an unupgradable one, and the bill arrives at the next Shopware release.

Everything here sits on documented extension points instead: payment handlers, event subscribers and service decorators, custom entities with their own administration modules, scheduled tasks and the message queue for anything talking to a third party. Nothing polls a remote API inside a request the customer is waiting on.

04On reflection

The integrations were built one at a time as each was needed, so each grew its own approach to retries and logging. A shared convention for talking to a third party — one place for backoff, failure states and traceability — would have been worth establishing before the second one, not after the fourth.

next row

Pabau

Clinic & booking platform

Back to table