All work
Work

PAUL & JOE BEAUTÉ HK

A Shopify storefront for a French beauty brand's Hong Kong market - a customised Dawn theme with gift-with-purchase, a member zone and campaign pages, backed by a small back-office I now maintain.

PAUL & JOE BEAUTÉ HK storefront on a laptop
Role
Shopify theme developer
Year
2026
Stack
  • Shopify
  • Liquid
  • Dawn 15
  • JavaScript
  • Tailwind CSS
  • Shopify Admin GraphQL
  • PHP
  • React
  • Vite
What I did
  • Customised Dawn theme: header with mega-menu and search, product gallery, cart, footer
  • Gift-with-purchase engine in Liquid and cart AJAX with tiered gift thresholds
  • Member zone: registration, personal details, marketing preferences and order history posting to the back-office
  • Campaign templates: brand story, primer category, seasonal collection, in-store redemption with floating CTA
  • Homepage modules: hero slider, collection slider, featured banners, video banner, ticker
  • Maintenance of the PHP back-office and React dashboard: order sync, customer forms, birthday mailer, webhooks

Overview

PAUL & JOE BEAUTÉ sells in Hong Kong through a Shopify store in Traditional Chinese. The brand needed more than a stock theme: a mega-menu for its product lines, a gift-with-purchase mechanic that runs during promotions, a members' area that talks to its own CRM, and landing pages for seasonal campaigns and in-store events.

The storefront starts from Shopify's Dawn and keeps its structure, so the brand team can still edit every page from the theme editor. Behind it sits a small back-office that syncs orders and customers, sends birthday discount codes, exports spreadsheets and receives the forms the storefront posts.

Dawn, customised

Rather than fork Dawn wholesale, I kept the base and added suffixed variants of the sections that needed to change: a header with a bespoke mega-menu and search box, a product page with a carousel gallery, a cart that understands gift lines, and restyled collection, multicolumn and image-with-text sections. Upstream Dawn stays traceable, and the editor keeps working for the brand team.

Homepage modules are hand-written: a hero slider, a collection slider, featured banners, a video banner and a revolving message bar - all driven by section settings so the team can swap campaigns without a developer.

Storefront homepage with hero slider and new-member promo bar

Gift with purchase

Promotions give a free gift once the cart passes a threshold, with a better gift at a higher tier. The buy-button snippet recomputes the cart total excluding gift lines, then adds or swaps the right gift variant through Shopify's cart AJAX API on every change - so the gift is always correct, never double-counted, and disappears if the customer drops below the threshold.

Product page with shade picker and quantity

Member zone and campaigns

The member zone is a set of custom page templates - registration, personal details, marketing preferences, order history - whose forms post to the brand's back-office rather than Shopify's account pages, so the CRM stays the source of truth for consent and birthdays.

Campaign work is a template each: brand story, primer category, a seasonal collection page, and an in-store redemption event with its own showcase slider, video, pre-footer and a floating register button. The redemption form validates on the client, then the back-office deduplicates entries, enforces the deadline and emails a confirmation.

Member zone with welcome, birthday and shopping-day offers
In-store redemption campaign page

Keeping the back-office running

The back-office is a plain PHP service with a Vite and React dashboard: JWT-authenticated admin users, order and customer sync via the Admin GraphQL API, XLSX exports, a birthday mailer that mints a Shopify discount code per customer, and webhooks for customer creation and restocks. I inherited it and handle fixes, the redemption flow and the customer-form changes the theme depends on.