5.1
Loyalty Merchant Rewards
Merchant loyalty platform · US payments · March–June 2026
Lead product & development consultant
What was happening
LMR runs a loyalty program for merchants — restaurants, salons, retail shops — sold through independent sales agents and POS software partners rather than directly. The consumer-facing redemption portal already existed and worked: merchants earned points, customers spent them.
What didn't exist was a way for the channel to run the program itself. Enrollment, rewards configuration, billing, and the decision about whether a given month's points should be released all ran through LMR's internal team by hand. That's workable at a few hundred merchants. The first integration partner has around 25,000 locations.
What made it hard
The rule at the center is a payment gate. Points are calculated as soon as monthly volume arrives, then held until the owning organization settles its invoice. Get that wrong in one direction and you release points nobody paid for. Get it wrong in the other and a merchant who genuinely earned them doesn't get them. Either failure costs trust with the sales channel, and recruiting that channel is the entire growth strategy.
The second thing was tenancy. Four roles across two levels of organization, users who belong to several organizations with a different role in each, and a firm requirement that nobody ever sees another organization's data or is offered a button they aren't allowed to press.
What I did
To be precise about scope: I built the agent and ISO portal — enrollment, the points engine, billing and reconciliation, and the partner API. The consumer redemption portal is a partner's product, and the marketing site is someone else's work.
I wrote the requirements, the technical specification, the API contract, the database schema, and the security model. Then built it: a Node and Postgres API, a React dashboard, deployed on AWS.
Tenant isolation is enforced at the database with row-level security rather than as a convention in application code, so an ordinary bug can't leak data between organizations. The dashboard's permission model runs in three layers, so the interface never offers an action the API would refuse.
The infrastructure is deliberately ordinary. The platform is built to serve a channel of that size, but the machinery underneath it isn't more elaborate than it needs to be. It keeps running cost tracking revenue rather than running ahead of it.
What changed
The platform is the system of record for the program. The channel administers its own merchants instead of routing every change through LMR staff, and the credentialed partner API the growth strategy depends on is live. It's been in continuous delivery since launch.
How it was run
That's an unusual amount of structure for a project this size, and it's most of why it landed on scope and on budget. It also put the risk of a wrong estimate on me, which is the correct place for it.
Numbers
- ~110 API endpoints · 23 tables · 45 migrations
- ~45K lines of test against ~43K lines of source · 80% coverage floor enforced in CI
- 14 requirements revisions · 25 architecture decision records · ~380 merged pull requests