Fueled
A serverless commerce analytics platform, built to survive nineteen integrations that all fail differently.
What it had to do
Merchants wanted to know what their store was doing, and they wanted to know now. Every pageview, every add to cart, every order — collected, understood, and pushed on to whichever ad platform or ESP they happened to be using that quarter.
That last part is the trap. Nineteen destinations, each with its own idea of what an event looks like, its own rate limit, and its own way of falling over. So the shape was decided early: nothing in the request path does work it does not have to.
What I actually did
Kept the hot path boring
Deferred execution and connection reuse so a cold Lambda does not go looking for a database handle it will only use once, plus caching in front of the reads that repeat. Cheaper to run and much less exciting at 2am.
Made nineteen integrations look like one
A code-first NestJS GraphQL API with typed schemas, DTO validation, enums, unions, custom field resolvers and platform-specific inputs — so adding the twentieth destination is a schema change, not an archaeology project.
Embedded it in Shopify without the sharp edges
Pages Router with getServerSideProps for App Bridge embedding, OAuth redirects, CSP hardening, and HMAC-verified compliance webhooks. A thin proxy route decodes the Shopify session token, exchanges it for a backend JWT, and passes the request on.
Assumed the API would be poked at
Tenant-aware guards and feature permissions on every operation, a locked-down production surface, limits on how expensive a single query is allowed to be, and errors sanitised before they leave the building.
Watched the bill as closely as the latency
Infrastructure lived in the Serverless Framework and AWS CDK, which meant cost was a thing you could read in a diff rather than discover at the end of the month. Most of the savings came from the unglamorous side: caching that removed redundant compute, and read patterns that stopped asking the database the same question twice.