Inspiration
Sending flowers online is easy. Knowing they arrived fresh, on time and still a surprise is not. The sender never sees the real bouquet, the recipient is often not home, and every update is a phone call. We wanted a concierge that handles all of it on the app everyone already has open: WhatsApp.
What it does
Stem & Seal Concierge is an agentic AI florist that looks after three people at once: the sender, the recipient and the florist. Admins approve every gift.
- Sign up, then the business starts the chat. A new customer signs up with their WhatsApp number and gets a "thank you" message right away, with Send a gift and Talk to us buttons. Nobody has to message the bot first.
- Order inside WhatsApp. Tapping Send a gift opens a swipeable carousel of bouquets with photos. The concierge then asks who it's for, their WhatsApp number, the address, the occasion, a card message, the day, the time window, and whether to keep it a surprise. Then it sends the gift for approval.
- A person approves. Nothing reaches the florist or the recipient until an admin approves the gift and confirms the delivery window.
- The surprise is kept. The recipient hears that a surprise is on its way, never who it's from, and confirms the delivery time in one tap or suggests another.
- AI checks the bouquet before anyone sees it. The florist snaps a photo. Claude on Amazon Bedrock counts the stems and scores freshness against the order. A wilted or short bouquet goes back to the florist. A good one goes to the sender on WhatsApp with Looks perfect / Add card message / Change something.
- Every step is a WhatsApp update to the right person: approved, confirmed, out for delivery, delivered, and a rating at the end. Delays come with an automatic goodwill credit, up to 50 AED. Anything above that waits for a human.
- Admin tools. Approvals, deliveries, a live agent trace that explains every decision, and festival broadcasts on WhatsApp, SMS or email.
How we built it
- AWS End User Messaging Social sends every WhatsApp message: approved templates for business-initiated messages, then interactive buttons, lists and an image carousel inside the 24-hour window.
- Amazon SNS and SQS bring replies and button taps back to the agent. On AWS, an SNS-triggered Lambda does the same.
- Amazon Bedrock: Claude Haiku 4.5 runs the conversation and Claude Sonnet 4.5 checks the bouquet photos. The agent is built with Strands Agents and has 18 tools (orders, photo check, florist rework, delivery slots, credits, email, escalation). It can be hosted on Bedrock AgentCore Runtime, with AgentCore Memory for returning customers.
- AWS End User Messaging SMS and Amazon SES handle SMS and email.
- Amazon DynamoDB stores orders and customers, Amazon S3 stores photos, and the AWS CDK deploys the stack.
- A Next.js console gives each role its own screen: admin, florist, client and recipient.
- Policy lives in code, not in the prompt: the credit cap, the photo check before customer contact, and hiding the sender from the recipient. Every AI-written message has fixed fallback wording, so the conversation never gets stuck.
Challenges we ran into
- WhatsApp's rules. A business can only open a chat with a Meta-approved template, and template variables can't start or end the text. We rewrote templates until they passed, track the 24-hour window per customer, and fall back to a template automatically when it closes.
- Small API details with big effects. Destination numbers must include the
+, the image carousel needs a newer Graph API version, and the event destination failed until we fixed its IAM condition. - Bedrock model IDs. Bare model IDs fail with "on-demand throughput isn't supported", so everything uses cross-region inference profiles.
- Photos lie. A phone sent a WebP image named
.png, and Bedrock rejected it. We now detect the real format from the image bytes and shrink large photos to fit Bedrock's limit. - The AI talking to the wrong person. Given a friend's name, the model once greeted the friend instead of the customer. We added a check that rejects a greeting to anyone else and uses the fixed wording instead.
Accomplishments that we're proud of
- The whole flow runs live on real WhatsApp: sign-up, ordering in chat, approval, the recipient's confirmation, the AI photo check, and delivery.
- No customer ever sees an unchecked bouquet. The photo check fails a wilted bouquet on purpose in our demo.
- The sender stays hidden from the recipient on every channel.
- 58 automated tests, all running offline with mocked AWS calls.
What we learned
- On WhatsApp, the template and 24-hour-window rules shape the whole product design, not just the messaging code.
- An agent is most trustworthy when the model writes the words and the code owns the rules: who gets told what, when, and within which limits.
- Fixed fallbacks for every AI step make a live demo, and a real product, much calmer.
What's next for Stem & Seal Concierge
- Payments inside the WhatsApp order.
- Templates in Arabic and Hindi for our customers in Dubai and India.
- A florist mobile app with the photo check built into the camera.
- Full deployment on AgentCore Runtime with Memory, so the concierge remembers birthdays and favourite flowers.
- Delivery tracking with live driver updates for the recipient.
Built With
- ai
- amazon-ses
- amazon-sns
- amazon-web-services
- dynamo
- llm
- nextjs
- python
Log in or sign up for Devpost to join the conversation.