Work Craft Archive Contact

Designer Strategist Analyst Skeptic

I design the surfaces that convert, ship them by directing AI coding tools, then audit the numbers that say whether they worked. Occasionally the numbers say no. I publish those too.

Oscar Fong

Marketing Manager · Design, Storefront & Growth
Windflower Florist · Singapore
Since Jan 2026 · freelance from Oct 2025

Scroll for the evidence

The Thesis

Design is nothing if nobody stops walking.

Five years across luxury hospitality, brand consultancy and e-commerce growth taught me the same lesson three times: the work is not finished when it looks right. It is finished when someone who was walking past stops, and when you can show it was the design that stopped them. So I set up the measurement too. And when the measurement says the work did nothing, that goes on the site as well.

  • 01

    Specs, not prompts

    A one-off prompt gets you an image today. A version-controlled spec can be re-run next season, diffed against the last one, and handed to someone else. That last one is the whole difference between making images and leaving behind a capability.

  • 02

    Distrust the dashboard

    Meta reports the same purchase under more than one name. Add the names together and a sale can count twice, so the dashboard takes one and never sums them. A number that flatters you is the first one to audit.

  • 03

    Emotion over product

    Nobody buys a gift because of the specification. The three highest-returning ads in the account were all warm or incentive plays, and hooks built on a moment, like an apology, a milestone or making someone smile, out-converted product copy.

  • 04

    Replicate faithfully, then vary

    If you cannot first reproduce a known reference exactly, you have no baseline and every variation after it is noise. Fidelity first is how you tell a working system from a lucky render.

Selected Work

The work that moved a number.

04 / Case studies

All four are from my current role at Windflower Florist, covering design, storefront and growth, from Oct 2025 to now.

By The Numbers

What actually moved.

5.3
Years in practice May 2021 to today. No rounding up.
S$23.2K
30-day revenue from rebuilt flows First full window, 75% of all flow revenue.
+36%
Revenue per recipient Like-for-like, same season, on 44% fewer sends.
−19.6%
New-customer orders, year to date Repeat orders grew 3.5% over the same period. The decline was an acquisition problem.

What Broke

What it cost to learn.

    Windflower Florist · 2026

    Ad Reporting Layer

    Paid-social numbers can go wrong in a quiet, expensive way. Meta reports the same purchase under more than one name, and adding the names together counts it twice. This dashboard was built from its first version to count each purchase once.

    Role
    Specified and shipped the dashboard, including its deduplication rule
    Includes
    Caching, access control and rule-based flags
    Result
    Each purchase counted once, from the first version

    The trap

    Meta returns purchases under several aliased action types that carry the same value: purchase and omni_purchase are the same event. Add them together, which is the obvious thing to do, and purchases land twice.

    The rule

    Take the first alias that exists and never add them up. It is a few lines of logic and a comment explaining why they have to stay that way, because the next person to touch that file will want to sum them.

    Why a double count is expensive

    Ad budgets get judged against a return target. Sum the aliases and the reported value climbs with the count, so ads that are losing money can look like they are paying for themselves, and the budget keeps flowing to them.

    What the dashboard does

    It labels its figures as Meta-reported and not Shopify-verified, and it reads itself, with three rule-based flags. Scale: beating the account’s average return on less than typical spend, so probably starved of budget. Fix: below target on real spend, or paying far too much per click. Watch: the clicks aren’t landing, or the creative isn’t earning them. Rules rather than hand-written notes, so the advice doesn’t go stale when the numbers move.

    Windflower Florist · 2026

    Storefront Rebuild

    A florist’s storefront has one job: get someone from “I need flowers” to checkout before they give up. My part of the rebuild was the visual shell for the home, collection and product pages.

    Role
    Visual shell design, shipped by directing AI coding tools
    Scope
    Home, collection and product pages
    Handoff
    Adopted by the team as the baseline for SEO, cart form and launch work

    The filter that got the count wrong

    Shoppers filtering by colour were told there were 9 pink products. There were 128. The colour and flower filters ran after the catalogue had already been split into pages, so a page showed a handful of matches, or none, and the count was wrong everywhere.

    They now use Shopify’s native tag URLs, so filtering happens first, on the server, and counts, pages and price sorting all agree. Along the way, four flower filters turned out to be pointing at tag names that didn’t exist.

    The performance pass

    A 68 MB hero video was sitting in the theme, referenced nowhere a shopper would ever load it. Predictive search never fired, because its key handler built the debounced search and then never called it. Product recommendations fetched 30 items to show at most 10; fetching only what is shown cut that payload by 50–70% on scroll.

    Scope, honestly

    The rebuild was a team effort. My phase was the visual shell. SEO and structured data, the cart form and the launch belonged to other people, and I would rather you heard that here than in an interview.

    Windflower Florist · 2026

    Lifecycle Program

    The email flows were making money in spite of themselves. Alongside the rebuild, I audited what was already running.

    Role
    Audit, strategy, flow and email design
    Flows
    Welcome, abandoned cart, abandoned checkout, repeat buyer
    First 30 days
    S$23.2K from the rebuilt flows

    What the audit found

    Tracking switched off on live emails that were earning revenue. Two flows still named “Draft” and sending anyway. An A/B test split 100/0, with identical subject lines on both arms, which is less a test than a very confident guess.

    And one that mattered more: the old recovery flow carried two identical “no email in the last 14 days” conditions. It was quietly keeping the most engaged buyers, the ones hearing from the brand most, out of the highest-intent flow. I removed it and moved frequency control to Smart Sending.

    The rebuild

    Four flows, from scratch. Abandoned cart reconnects after an hour with no discount, offers 10% a day later, then sends a last call two days after that, and stops the moment someone orders. Abandoned checkout moves faster: 30 minutes, then 12% the next day. The welcome series runs three emails. A returning customer gets an email the moment they order again, and a second ten days later unless they have already come back.

    What changed

    S$23.2Kin the first full 30 days, 75% of all flow revenue

    6.6×the revenue per recipient of the old flows running alongside, at 2.4× the click rate

    +36%revenue per recipient on the welcome flow, same season a year apart (S$11.13 → S$15.14), on 44% fewer sends

    The bigger finding

    A year-on-year analysis showed new-customer orders down 19.6% while repeat orders grew 3.5%. Revenue wasn’t falling because loyal customers were leaving. Fewer new ones were arriving. That reframed the decline as an acquisition problem and set the plan for the second half of the year.

    Windflower Florist · 2026

    Email Studio

    Reviewing an email inside the sending platform means reviewing it after it is already built, and every change becomes another trip back into the builder. So I moved the review to before the build.

    Role
    Design, shipped by directing AI coding tools
    Format
    One file that opens in any browser
    For
    Reviewers without access to the sending platform

    How it works

    Open the file and the email renders the way it will send. Click any copy to edit it in place. When the edits are done, one button exports them for me to action. Reviewers never need access to the sending platform.

    An email headline edited in place, then exported

    Why it exists

    Reviewing inside the sending platform happens after the build, which is the most expensive moment to change your mind. With the studio, copy and layout are signed off before anything touches the live account.