Exhibit 01 / 06 · Flykitt, jet-lag platform
Home · the trip globe
The home screen renders the traveler's active route on a live globe, backed by the itinerary service. Programs, product surfaces, and trip creation all hang off this view.
Selected work · jet lag platform
Four years owning the backend architecture of a science-driven travel performance product, developed with Navy SEALs and fighter pilots. Customers included the LA Dodgers and Inter Miami. Multi-AZ AWS foundations, multi-protocol APIs, multi-tenant identity, and a commerce stack that pays for all of it.
Senior Full-Stack Engineer / Backend Architect
Aug 2021 to 2025
flykitt platform · api, pipelines, aws, terraform
Flykitt sells arrival performance. A system of supplements, an app, and protocols that get travelers (athletes, executives, military) off a long-haul flight functional. I joined in 2021 as the platform's backend architect and stayed four years, through the storefront rebuild, the subscription launch, and the AI product lines.
The clientele made reliability non-negotiable: when a professional sports team lands at 2am before a match, the protocol has to be there. At the same time the business ran on a physical-product storefront and a subscription tier, so the same small engineering team owned revenue infrastructure, identity, mobile APIs, and ops. The architecture had to make that ownership tractable.
Wheels down · protocol live
A professional sports team lands before a match. The plan on the right has to be waiting on every phone. There is no retry window on an arrival.

One small team owned all four surfaces
Under the app and the storefront is a distributed system. A Fastify API takes every mobile request; a separate orders API takes every shop order; behind both, an SNS to SQS spine fans work into a swarm of workers, each with its own queue and its own dead letter line. Programs are built by an algorithm worker, drawn into a protocol pdf by the files service, and handed to the warehouse api for a physical custom pack. Auth0 sits in front of every surface with one tenant per client; a notification service speaks to Slack, SES, and Firebase Cloud Messaging. AWS X-Ray stitches the trace across all of it. What follows breaks the system into three views.
one api tier at the front, a swarm of workers behind it, external saas at the edges.
The front is deliberately monolithic. One Fastify app with thirty route modules on Lambda is easier to trace, deploy, and reason about than a service per domain when the team is small. Every request lands at the API Gateway, is verified once against Auth0, then handled by a route module in the same process. The seams live behind that front: each async handoff crosses an SNS topic and lands in a dedicated SQS queue with its own dead letter line, and AWS X-Ray follows the trace across the boundary.
submission returns immediately; the pipeline runs on worker time. each hop is retriable.
The mobile POST returns as soon as the API has persisted the inputs and published to the topic. The pipeline runs on worker time, not on request time. Every worker has its own SQS queue plus dead letter queue and is idempotent on the program id, so a replay by the queue cannot double bill or double ship. When the algorithm finishes, a second SNS topic wakes the push worker, which delivers an APNS payload through Firebase Cloud Messaging. The phone updates without polling.
apns live activity updates without a poll; the api owns the translation.
The support tooling surface uses the same API but a different front door. An MCP server wraps the Flykitt API for triage agents; an M2M gated read only SQL executor and an OpenAI Assistants proxy round out the toolkit for the human on the other end. Every tool speaks the same auth (M2M tokens through Auth0) and hits the same domain. No shadow admin API, no bypass path.
Six production screens from the iOS app, each shown as captured and annotated to the backend systems behind it: the itinerary, flight-status, protocol, aggregation, and rewards services the platform runs. The screens are the work of the Flykitt design team; the systems they read from are the scope of this case study.

Exhibit 01 / 06 · Flykitt, jet-lag platform
The home screen renders the traveler's active route on a live globe, backed by the itinerary service. Programs, product surfaces, and trip creation all hang off this view.
Exhibit 02 / 06 · Flykitt, jet-lag platform
Each segment is tracked for delays, gate changes, and itinerary diffs. When the schedule moves, the app prompts a program recompute so the jet-lag protocol stays aligned.
Exhibit 03 / 06 · Flykitt, jet-lag platform
Every completed program resolves to an outcome: jet lag prevented, distance flown, time in the air. The share card is composed from that same trip record.
Exhibit 04 / 06 · Flykitt, jet-lag platform
A lifetime ledger of the traveler's flying (zones crossed, miles, flight time, countries) rolled up from every program on record, down to a generated machine-readable strip.
Exhibit 05 / 06 · Flykitt, jet-lag platform
Past programs are scored: recovery days saved, eastward vs. westward crossings, sleep captured in flight. All of it derives from the same flight and protocol records.
Exhibit 06 / 06 · Flykitt, jet-lag platform
Referral credits and video rewards run on a per-user ledger. Issuance, redemption limits, and remaining counts served through the rewards API.
App, storefront, coaches, and teams all authenticate differently, and machine-to-machine callers (support tooling, automations, partner APIs) needed a separate class of credential. A single Auth0 multi-tenant layer with RBAC, MFA, and OAuth2/OIDC for humans plus a first-class M2M grant for services absorbed that variety instead of scattering it across handlers.
Impact·Millions of authentication events a month with zero identity-related downtime; one place to reason about who can see what.
The mobile POST cannot wait on the algorithm, the protocol PDF, or the warehouse hop. Publishing to SNS and fanning out to per-worker SQS queues keeps the request path light, isolates failure per subscriber, and lets every hop retry (and eventually dead-letter) without dragging the others down. Handlers stay idempotent on the message id so an at-least-once queue can be replayed safely.
Impact·Program submission acks in milliseconds; the algo, files, warehouse, and push chains run on worker time and recover independently.
Stripe subscription state, Apple StoreKit notifications, Shopify order events, and Cirium flight alerts all arrive as at-least-once webhooks from callers outside the trust boundary. Every receiver verifies the signature, deduplicates against a processing lock keyed by event id, and enqueues the effect asynchronously. Retries and idempotency were designed in on day one, not patched in after the first double-charge.
Impact·900+ Pro subscribers in four months (~$100K ARR) without a billing incident, and terminal flight events land in Live Activity without duplicate pushes.
Shopify's Storefront API carries catalog, cart, and PCI-scoped checkout compliance; a custom React Router 7 frontend carries the brand and the performance budget. Optimistic cart updates and real-time inventory sync kept it at 95+ Lighthouse.
Impact·3× year-over-year conversion lift and a major share of revenue growth.
Support agents, triage automations, and human operators all need read access across programs, orders, subscriptions, and identity. A separate admin API duplicates the domain and forks the auth model, which is how those systems drift into divergent behavior and privilege leaks. An MCP server that wraps the Flykitt API, paired with an M2M-gated read-only SQL executor and an OpenAI Assistants proxy, reuses one auth layer and one source of truth for permissions.
Impact·One place to reason about blast radius; support tooling upgrades ride the same deploys as the product; no bypass path to audit.
Cirium emits about thirteen flight-status event kinds (en route, landed, diverted, gate change, baggage, more). Doing the mapping on the client fragments it across app versions and cannot be updated without a release. Handling it inside the webhook keeps the translation versioned with the domain model and reduces the phone to a pure renderer of ready-to-display payloads over APNS.
Impact·Live Activity updates land without a poll; changing the mapping is a server deploy, not an app release.
The LLM product lines (menu intelligence, support agents) are bursty, session-oriented, and latency-sensitive. They fit Cloudflare Workers and Durable Objects better than the AWS service tier they would otherwise burden. Keeping them out of the core VPC also keeps their failure domain (rate limits, provider outages, cost spikes) off the platform's critical path.
Impact·Two shipped AI products with their own case studies, isolated from the core platform's failure domain.