Inspiration
Small service businesses run on repetition. A salon, a clinic, a tutoring practice, a boutique studio, the owner is usually one person doing the actual work and also answering the same five scheduling questions all day, over text, over DMs, one customer at a time. Most AI scheduling demos I'd seen were shallow chat wrappers that fall apart the moment someone asks for a refund or tries to book an already-taken slot. I wanted to build something that actually acts, books, reschedules, and knows exactly when to hand off to a human, rather than something that just talks about acting.
What it does
ShopFront is an autonomous intake and booking concierge, demonstrated through a fictional boutique salon, Bloom Hair Studio, in Austin, Texas, run by stylist Sarah Lin.
It handles the routine work end to end on its own: answering FAQs on pricing, hours, and policy, checking real calendar availability, booking, rescheduling, and cancelling appointments, and preventing double-bookings automatically. It only escalates to the human owner for five specific situations, refund requests, service complaints, unresolvable scheduling conflicts, requests for policy exceptions, and anything genuinely ambiguous, and when it does, it logs a structured ticket with full context and the correct urgency level instead of just apologizing and dropping the thread.
How we built it
The core is an AWS Strands Agent coordinating three tools: a local FAQ retrieval tool using TF-IDF similarity search over a knowledge base with no external vector database, a calendar tool with a dual-mode design (an in-memory mock calendar for zero-credential demo use, and a real Google Calendar API integration behind the same interface), and an escalation tool that writes structured tickets to a JSON log with a named-trigger classification system.
The model layer is provider-agnostic through Strands' OpenAI-compatible interface, so it can run against OpenRouter, direct OpenAI, or Bedrock without changing the agent logic.
Challenges we ran into
The build surfaced three real bugs that only turned up because I deliberately tried to break the agent instead of trusting a single happy-path run.
A response-printing bug caused every agent reply to print once in full and then repeat in fragments, traced back to Strands' default streaming callback handler firing alongside a manual print statement. Fixed by disabling the default handler and keeping a single clean output path.
The agent would improvise detailed personal hairstyle recommendations based on a customer's self-description, with zero tool involvement and no actual stylist in the loop. This wasn't a booking task and was a liability risk, so I tightened the system prompt to redirect styling questions to an in-person consultation with the actual stylist instead.
The most serious bug: the agent hallucinated dates when resolving relative phrases like "tomorrow" or "day after tomorrow," at one point confirming a booking for October 31, 2023, three years in the past, because nothing in the system grounded it to the real clock. Fixed by injecting the actual system date into the prompt, adding a callable get_current_date tool, and adding hard validation in the calendar tool that rejects dates outside a sane window.
Accomplishments that we're proud of
Getting a fully autonomous multi-turn flow working end to end in one continuous session: book an appointment, confirm the slot correctly disappears from availability, block a double-booking attempt on that same slot, reschedule using the original booking ID, and correctly classify an angry refund request as high urgency, all without the conversation breaking or losing state.
Catching all three bugs above before they reached the demo, by refusing to trust the agent's own self-reported "all tests passed" and instead manually running adversarial conversations designed to break it.
Keeping the escalation logic genuinely selective rather than defaulting to asking permission for everything, which was the actual bar the hackathon's Everyday and Professional Agents tracks were set against.
What we learned
An agent's own summary of its test results is not verification, only running it yourself and trying to break it is. The most convincing autonomous-agent demo isn't the one with the most features, it's the one where you've already tried to make it fail and it didn't.
What's next for ShopFront: Autonomous Salon Booking Concierge
Real Google Calendar OAuth wired in for a live deployment, SMS and email delivery for owner escalations instead of console logging, and a voice interface using ElevenLabs so the concierge can take an actual phone call instead of only text.
Log in or sign up for Devpost to join the conversation.