A single CRM and membership platform for Swire’s four malls — Taikoo Place, Cityplaza, Pacific Place and Citygate. It replaced four ageing, mismatched systems and let each mall run its own members, tiers and campaigns. Redeeming a receipt went from a paper process that took days to something staff finish at the desk.
Swire Properties runs four major malls in Hong Kong. Each had its own membership setup — its own member list, its own receipt‑redemption desk, its own ladder of spending tiers. The same job, done four different ways, on systems no one could keep in sync.
Membership had never really worked well in a Swire mall. Redeeming a receipt, claiming a reward, checking your spending — each was its own hassle, and different in every mall. A previous vendor had built a system, and Swire wasn’t happy with it. So instead of patching it, we rebuilt the whole experience — one platform, run by each mall on its own.
The work fell into four phases.
Understand what the vendor left, define what a member record is, build the earn-and-reward loop with gifts and campaigns on top, then scale it across four mall brands — five steps in all, in that order.
With the business analysts who knew how each mall ran day to day, I walked the old portal screen by screen to work out what was really going wrong.
Before any screen, I worked out the member and receipt model with Swire's tech lead — what a record is, and the states it can hold. We agreed it in week three, and everything after held together because of it.
Receipt → points → tier, rebuilt around what staff already do. I pushed back to keep this loop right before scope grew, because everything else depends on it.
A campaign tool that ties every promotion back to real spending, sent as email through one tool — styled to each mall's branding, set up once.
The membership programme runs on four above tiers — blue, gold, platinum and black. I built the interface on Vuetify and themed it per tier, so buttons, forms and the receipt-upload flow stay consistent to run while each tier keeps its own identity — one set of components to maintain, not four.
“Most of enterprise design is just the patience to keep editing the same thing.”
I worked out the flows before drawing screens— scanning a receipt, redeeming a reward, same‑day spending, and the yearly renewal — then the parts behind them: building campaigns, and the emails each mall sends in its own branding.
Five steps, across four phases.
The map above is where it ended up; the steps below are how it got there — grouped into the four phases it actually moved through, in order.
I worked out the member-record model with Swire’s tech lead, then led the design from there — with the BAs, the product owner, and the engineering team.
The business analysts knew how the four malls actually ran day to day. I went through the old portal with them, screen by screen, to work out what was really going wrong.
Before drawing any screen, I worked out the member and receipt model with Swire’s tech lead — what a record is, and the states it can be in. We agreed it in week three, and everything after that held together because of it.
This is where I pushed back with the product owner. The scope kept growing, but the receipt loop had to be right first — everything else depends on it.
The campaign tool came out of what the BAs heard from each mall’s marketing team. I demoed it to Swire every sprint and adjusted it on the spot.
The membership programme runs on four above tiers — blue, gold, platinum and black. I built the interface on Vuetify — buttons, forms, the receipt-upload flow, the lot — and themed it per tier, so it stays consistent to operate while each tier keeps its own identity.
Three screens tell the whole story: one member record, the redemption desk rebuilt around what staff already do — scan, validate, redeem — and the tier shown as a live, visible state.
The CRM I designed in 2020 isn’t the one running today — it’s changed a lot through small fixes since I handed it over. The member‑record model we agreed on early is why all those changes held together. The version running now is easier to use than the one we launched— and that’s the point.