Engati · Internship · full stack
Abandoned-cart recovery
High-intent shoppers who leave a Shopify store get a personal nudge to come back: a branded link, and a discount if the store offers one. I designed and shipped it end to end as an intern, in one to two sprints.
(01) The problem
A store can only win back an abandoned cart if it can reach the shopper. Shopify doesn’t share a customer’s details across stores, so someone new to one store is often unknown there, even if they have ordered elsewhere.
(02) How it works
- The shopper enters their phone number in a CTA popup on the Shopify store, built with theme.liquid.
- The product-discovery-service runs validation checks and hands off to an @Async task.
- The async task checks the store’s Shopify integration and configuration, then looks the shopper up by email: our database first, then Shopify’s GraphQL API for that store.
- Last fallback: the archived-orders parquet in DuckDB, across every store. It pulls all matching records and extracts the phone number, even when it wasn’t in the shipping details.
- The result is pushed to Kafka, keyed by user_id.
- The shopify-consumer-service builds the payload, applies any discount configured on the portal, and turns the store link into an Engati-branded short URL with our in-house shortener.
- The message goes out through Engati’s existing messaging pipeline.
(03) Key decisions
Three places to look
Shopify can’t see across stores, so the lookup falls back from our database, to Shopify’s GraphQL API, to archived orders in DuckDB that span every store.
Async at every hop
Validation happens up front; store checks and lookups run in an @Async task, and the hand-off to messaging goes through Kafka.
Keyed by user_id
Kafka messages are keyed by user_id, so everything about one shopper lands on the same partition, in order.
(04) Results
- Designed, built and tested end to end in one to two sprints, as an intern.
- Shoppers new to a store can still be reached, thanks to the cross-store DuckDB lookup.
- Learned design patterns like adapter and factory along the way.
I worked days and nights to test it end to end. It was a lot of fun, and I learned a lot.