Shoppers outside the US wanted American retail, and American retail would not ship to them. The service in between had to be explained before it could be sold.
E-commerce · Vue & Laravel
Global Shopaholic
A US retail storefront taken from spec to deployment, solo.
- Product
- Global Shopaholics — US package forwarding and assisted purchase
- Role
- Full-stack developer, Global Shopaholics LLC
- Scope
- Bootstrap Vue 3 storefront on Laravel 8, payment gateways, order processing

The tension
The customer is not buying a product. They are buying a US address.
The client had no technical staff, so the specification arrived as conversations rather than documents and the build had to absorb changes without a rewrite each time.
A visitor understanding sign up, purchase, ship well enough to claim a free US address without asking anyone.
One storefront serving sixteen languages, where price, courier and tax treatment all vary by destination.
The product story
Three steps, or nobody signs up.
The promise
Say what the service is, immediately.
The landing view leads with the offer — buy from US stores, ship worldwide — and puts claiming a free US address in front of everything else.

Narrow first
Most of this traffic is on a phone.
The storefront reflows to a single column with the same content order, so the explanation survives the width it is most often read at.

The mechanism
Sign up, purchase, ship.
The numbered walk sits above the benefits, because the benefits only mean anything once the mechanism is understood.

Walkthrough
The storefront in motion
Recorded from the live site.
The trust test
The happy path is only half the product.
A courier is unavailable to a destination
Shipping options resolve per destination at request time, so an unavailable courier is absent from the choice rather than failing after the customer has committed to it.
The payment gateway declines
Order processing treats payment as a separate state from order creation, so a decline leaves a recoverable order rather than a lost basket.
The visitor does not read English
Language is selected in the header and carried server-side, so the explanation — the part that has to land — is never the part left untranslated.
The decisions
Three moves carried the story.
Lead with the mechanism, not the catalogue
There is no catalogue — the inventory is every US store. So the page sells the process, and the numbered three-step walk is the primary content rather than a support section.
Put localisation in the data, not the templates
Sixteen languages, plus per-destination couriers and tax treatment, resolve from the Laravel backend so a new market is a data change rather than a frontend branch.
Ship against conversations
With no technical counterpart on the client side, each release was demonstrated rather than specified, and the component structure was kept loose enough to absorb the resulting changes.
What I would test next
