Software engineer / systems builder

Usefulsoftware.
Repeatablework.

I lead engineering on a multi-tenant loyalty platform used by 10,000+ merchants — owning architecture, integrations, and reliability through to the customer-facing surface — and I build the automation and agent tooling the team ships it with.

01 / WorkWhere the depth is

Code is the medium. The work is turning complex systems into products people can use.

Case study 01 / Joy Loyalty & Rewards_

Loyalty atproduct scale.

A multi-tenant SaaS platform that helps eCommerce merchants operate customer loyalty and rewards programs.

10,000+merchants served by the platform

The product

Joy gives merchants a platform for running loyalty and rewards experiences across their commerce operations and customer-facing surfaces.

The engineering challenge

Merchant configuration, customer activity, program rules, rewards, and third-party integrations all read and write the same program state. Keeping those surfaces consistent is the constraint the system is designed around.

02 / ApproachHow I work

Build the feature. Trace the impact. Verify the result.

01 / CONTEXT

Understand the whole flow

Trace callers, shared helpers, integrations, and adjacent surfaces before changing production behavior.

02 / CONSTRAINTS

Make bounded changes

Prefer minimal diffs, explicit risk gates, and clear separation between product logic and presentation.

03 / EVIDENCE

Ship with proof

Use reproducible tests, impact classification, diff review, health checks, and rollback-ready delivery.

03 / BackgroundExperience

Joy Loyalty & Rewards

Software Engineer / Engineering Lead

Avada Commerce

Software Engineer · SaaS products for eCommerce

DeHa Software

Software Engineering Intern

Posts and Telecommunications Institute of Technology

Hanoi, Vietnam

04 / AsideOn my own time

Not everything I build is meant to become a product.

LoyalFlowA publication about customer loyalty and retention

I work on loyalty systems every day, so it is the one subject where I can tell whether a piece of writing is actually right rather than merely fluent. I wanted to know how much of an editorial operation could run without me in it — choosing the subject, doing the writing, and deciding what is good enough to publish. The only honest way to find out was to build one, put it in public, and let it run.

What I wanted out of it: a clearer sense of where automated judgment can be trusted, and where it fails quietly enough that you would not notice.

It is my own project. No team, no customers, no roadmap — and it stays that way.

loyalflow.cc

05 / ArcadeShip it

Every codebase is a wall you clear one release at a time.

There is an arcade cabinet on this site. Clearing the wall is harder than it looks: the flaky bricks do not break on schedule, and the coupled ones never come apart alone.