Dong Tan Nguyen
Case study 01

Fueled

A serverless commerce analytics platform, built to survive nineteen integrations that all fail differently.

Years2025 — 2026
OutcomeAcquired by Opensend
600,000 req / hour

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.

AWS LambdaDynamoDBEventBridgeSQSNext.jsShopify PolarisNestJS GraphQL
The shape of it
request path, synchronousevent path, everything else
Storefront eventspageview · cart · orderMerchant adminNext.js · Polaris · embeddedAPI Gatewaysession token → JWTLambdavalidate, write, resolveDynamoDBsingle-digit msClickHouse & Athenaanalytics, after the factEventBridge → SQSretries, backoff, DLQFan-out workersone shape per platform19 destinationsanalytics · ad platformsESPs · SMSCDPs · data warehouses

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.