A WhatsApp-first order assistant for a real Nigerian bakery - live today. Customers describe the cake they want in chat; an AI agent builds a complete, checked order against the bakery's price list and production calendar; the bakery's team approves what matters. Confirmations arrive on WhatsApp and by Amazon SES e-mail.
Try it in 60 seconds: message +234 815 615 5066 on WhatsApp (https://wa.me/2348156155066?text=Hi) and send "Hi, I need a birthday cake for next Saturday". Then try: "Where are you located?", "Do you have me as a registered client?", a voice note, or a photo of a cake you like.
At a glance: 34 agent tools - 10-page staff app, public behind a login - 6 approved WhatsApp templates - capacity-safe order transactions - 2,000+ automated checks - runs unattended on AWS with alarms.
Built for MARDIV CAKES AND CATERING SERVICES, Kaduna. The address, opening hours, phone number and 72-hour notice rule are the bakery’s own, and customers can get the address, hours and directions straight from the chat.
Inspiration
A bakery's orders are conversations. A single custom cake can take a dozen messages to pin down - size, flavour, design, the words on top, the date, the price, the deposit - and the details get lost in chat threads, calls and social media. Customers keep asking "was my order confirmed?", staff retype everything, and a date gets promised that the oven cannot meet. We built MARDIV CAKES' assistant so the conversation is the order: complete, checked against the bakery's calendar and price list, and approved by a person where it matters.
What it does
A customer messages the bakery on WhatsApp. An Amazon Bedrock AgentCore agent (Strands Agents, Claude Sonnet 4.5) asks only for what is missing - one or two things at a time, with tappable lists for sizes, flavours and real free dates - quotes the cake from the price list, offers approved alternatives when an ingredient is unavailable, and shows a summary. Nothing is committed until the customer taps Yes; that button places the order in code, in one DynamoDB transaction that takes the day's baking capacity, any stock and loyalty points together or not at all.
The bakery stays in control. Custom designs, wedding cakes and large orders wait for approval in the staff app. A deposit is confirmed only when staff record the money (a customer saying "I've paid" changes nothing). Changes to an order are re-priced, re-checked against capacity and flagged to staff. Allergies and anything unusual go to a person. The customer gets the confirmation on WhatsApp and by Amazon SES e-mail with the same specification, then updates, deposit and birthday reminders, and a feedback request as approved templates. Photos and voice notes work too, in English, Pidgin, Yoruba, Hausa and Igbo.
How we built it
- AWS End User Messaging Social (WhatsApp) is the only customer channel: inbound events arrive through SNS and SQS; replies go out with
SendWhatsAppMessageas text, interactive lists, buttons and approved templates; delivery receipts return through EventBridge and a scheduled message only counts as sent once WhatsApp says delivered. - Amazon SES sends the order confirmation (rendered from the stored order, so it can never disagree with WhatsApp) and the staff alerts.
- Bedrock AgentCore runs the agent (34 tools) with Memory per customer. DynamoDB holds the menu, orders and a per-day production capacity. Transcribe reads voice notes. EC2 + Systems Manager + CloudWatch + CloudFormation run the bot unattended behind alarms.
- The rules that matter are plain tested code, not prompts: the model never computes a price, a date or a payment status; identity is bound in code (no tool takes a phone number); confirmation is a signature of exactly what will be charged; payments are a ledger only staff can write to.
Challenges
- Making an agent safe to give a calendar and a price list: every figure a reply states is checked against what the tools returned that turn, and rules like "pay only counts when staff record it" live in code.
- Capacity races: two customers cannot take the last baking slot of a day (tested with concurrent orders).
- Changing a confirmed order without breaking anything: re-pricing, moving capacity between days in one transaction, and refusing if staff touched the order meanwhile.
- WhatsApp realities: message ordering, 24-hour windows and template approval, list-row limits, and out-of-order delivery of two messages sent a moment apart.
What we learned
Put the money, the dates and the permissions in code and let the model do what it is good at - understanding messy human requests and asking the right next question. Over 2,000 automated checks (including live runs against the real agent and an end-to-end run of the bot against it) keep that honest.
Built With
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-cloudwatch
- amazon-dynamodb
- amazon-ec2
- amazon-eventbridge
- amazon-ses
- amazon-sns
- amazon-sqs
- amazon-transcribe
- amazon-web-services
- aws-cloudformation
- aws-end-user-messaging-social
- aws-systems-manager
- claude
- flask
- python
- strands-agents
Log in or sign up for Devpost to join the conversation.