Inspiration

I run Mr Sqoop Express (mrsqoopexpress.com), an online shop that helps people in Uganda buy products from AliExpress. You see the full price in Uganda shillings, including shipping and our handling fee, you pay with MTN or Airtel Mobile Money, and we deliver to you in Uganda.

Most of our customers don't want to scroll through a website. They call or WhatsApp us with the same questions every day: how much is this in shillings, how much is shipping, where is my order? And many of them would rather just say what they want than type it. So I built Sqoop Assist, a shopping assistant you can talk to, that does the whole job: finds the product, gives the real delivered price, places the order and takes the payment.

What it does

There's an "Ask Sqoop" button on every page of the store. You can type or speak to it, and it talks back.

  • "Today's deals" shows what's popular right now.
  • "Earbuds under 50,000" finds products within your budget, with the full delivered price on each one.
  • "How much is the second one?" gives the breakdown: item price, handling fee and shipping, the total in shillings, and the delivery dates.
  • "Order the first one" (when you're signed in) reads the order back to you first. Only when you say "yes" does it place the order and send a Mobile Money payment request to your phone. You approve the payment with your own PIN, so the assistant can never spend your money on its own.
  • "Did my payment go through?" and "My orders" check your account.
  • "Track my order" asks for your order number and the phone number you used at checkout. If they don't match, it refuses, so nobody can look up someone else's order.

How I built it

The store is a Next.js app with a Neon Postgres database, hosted on Vercel. Products and prices come from the AliExpress API, and payments go through MTN and Airtel Mobile Money.

Sqoop Assist is built around an MCP server inside the store, at mrsqoopexpress.com/api/mcp, using Streamable HTTP. It has eight tools: search products, price quote, today's deals, track order, my orders, prepare order, place order and payment status. The chat widget uses the same tools, and so can Alexa+ or any other MCP client. Every answer comes from the store's live data, so the assistant always gives the same prices as the website.

Ordering is two steps on purpose. "Prepare order" prices the order and returns a signed confirmation that's tied to the customer's account, the items, the total and the phone number, and expires after 10 minutes. "Place order" only works with that confirmation, so a misheard word can't buy anything, and saying "yes" twice doesn't charge twice. The account tools only ever touch the signed-in customer's own orders.

For the voice, I didn't want to pay for a speech service, so the store runs Piper, an open-source voice, on our own small server next to our payment proxy. It speaks about four times faster than real time there.

Challenges I ran into

Pricing was the hardest part. A product's real cost isn't just the AliExpress price: our supplier orders go to Dubai first and then on to Uganda, and we add a handling fee. Getting one clear shilling total that the assistant can say in a sentence took a few tries.

The voice was the other big one. I first tried running a voice model on Vercel, but it was too slow and too big for a free serverless function. Moving it to our own server with a lighter voice fixed both.

Accomplishments that I'm proud of

It runs on a real business that real customers in Uganda use, with real prices, real orders and real Mobile Money payments. And the customer always stays in control of their money.

What I learned

How to design tools an assistant can use safely, especially anything that spends money: confirm first, sign the confirmation, and let the customer approve the final payment themselves.

What's next for Sqoop Pay

Luganda and Swahili, so more of our customers can shop in their own language, and delivery alerts when a parcel reaches Kampala.

Built With

Share this project:

Updates

Submission history