Skip to content
Built by Clérise
← All work
Own businessLive

Embroidery Blanks

A webshop rebuilt around how the business actually sells: on WhatsApp.

HCreations Embroidery Blanks is my own business: I supply embroidery blanks to embroiderers and resellers across South Africa. I replaced its WooCommerce shop with a Laravel API and a Vue storefront and admin built for the way we work.

Role
Owner, designer and developer
Stack
  • Laravel 13
  • PostgreSQL 17
  • Redis
  • Vue 3
  • TypeScript
  • Pinia
  • vue-i18n
  • Reka UI
  • TipTap
  • Tailwind CSS v4
  • Docker

The problem

WooCommerce and Elementor were built for a different business. Most of our sales happen on WhatsApp. Some customers have no e-mail address at all. Every product comes in any of our binding colours, and the binding stock is shared across all products. Deliveries go to Pudo lockers, not street addresses. Each of those meant another plugin or another workaround.

What I built

A Laravel 13 API on PostgreSQL with a Vue 3 + TypeScript storefront and admin, in English and Afrikaans:

  • Accounts with just a cellphone number. Password resets for those customers go through the admin or WhatsApp.
  • In the admin, every order can send a pre-filled WhatsApp message: order status, payment reminder or shipped. A full WhatsApp Business API integration, so WhatsApp orders land in the system too, is in progress.
  • Checkout built around Pudo lockers, with card payments through iKhokha and EFT, both behind one payment-gateway interface.
  • Invoices and packing slips as PDFs, and a rich-text editor for the shop’s own pages.
  • An importer that moved products, customers, orders and settings out of WordPress and writes a report of what it did. It can run again safely.

The hard part

This is the first system I own from the screen to the server, and I am also its main user. The trickiest pieces were the stock logic for bindings that every product shares, and fitting WhatsApp into the order flow without losing track of anything.

I also simplified the business itself along the way: fewer manual steps between a WhatsApp message and a packed order.

Engineering notes

  • Monorepo with the API, the SPA and Docker; one PowerShell command starts everything.
  • en.json is the schema for translations; the build fails if Afrikaans is missing a key.
  • Headless-browser QA scripts in Docker, and Lighthouse 90+ on mobile for the home and product pages.
  • Every build session ends with a written handover note.
  • Secrets stay in .env; the WordPress dump with credentials was removed from git history.

Designed and built by Clérise with Vue 3 and TypeScript.

Read the sourceSouth Africa · remote