Loyalty & rewards
A loyalty commerce platform, ERP to storefront
Three coordinated workstreams as their embedded engineering team: a live Java ERP kept shipping, a headless storefront built from scratch, and a migration toolkit that moved the data between them.
Client
A North American corporate loyalty and rewards fulfilment company
5 weeks
to launch readiness

The challenge
What was in the way
The client runs corporate perks and rewards programmes — an ERP holding catalogue, orders and fulfilment, and a need to put branded storefronts in front of end customers.
The ERP was long-lived and business-critical, the storefront did not exist, and the data had to move between them without a day of downtime.
The solution
What we built
Three coordinated workstreams as their embedded engineering team. On the ERP, continuous development of a live Java and Spring Boot system shipped through Jenkins to AWS, with secret scanning in the pipeline and explicit production-database safety rules.
The storefront is a headless commerce platform built from scratch — a thin, correct orchestration layer over three systems we do not own (the client’s catalogue and fulfilment API, Stripe for payments and tax, and a transactional email provider) with PostgreSQL as the system of record reconciling money state against fulfilment state for every order.
The engineering is deliberately conservative where it counts. Domain code is forbidden by lint rule from importing any framework, and CI greps the built worker bundle to prove none leaked in. There is no message broker: the order status column is the queue, claimed with FOR UPDATE SKIP LOCKED, which removes an entire piece of infrastructure from the failure surface.
The migration ran through a purpose-built toolkit of convergence, reconciliation and verification scripts against the live schema, with a full census of what moved.
Key technologies
- Storefront
- Next.js 16, React 19, TypeScript, Tailwind 4, next-intl (EN/FR)
- Data
- Prisma 7, PostgreSQL 18, Redis, Postgres-as-queue worker
- Integrations
- Stripe payments and tax, NetSuite, client catalogue API
- ERP
- Java/Spring Boot, PHP/CodeIgniter, Jenkins, AWS, gitleaks
- Quality
- Biome, Vitest, Playwright including visual design-parity tests
Impact & results
Launch readiness in five weeks
30 schema migrations covering referrals, entitlements, tax, admin roles, audit and reporting rollups.
Architectural boundaries enforced by machines
The domain layer cannot drift into framework coupling, because CI will not let it merge.
Infrastructure deliberately removed
No broker to operate, monitor or fail.
A live ERP kept shipping
While its replacement front end was built alongside it.
Start here
Start with a problem, not a brief.
Tell us what is slow, what is manual, what is stalled, or what nobody understands any more. We will tell you honestly whether it is worth building.



