About SlotShield
The Inspiration
The idea for SlotShield came from a simple observation: service startups lose thousands of dollars every month to no-shows, yet they have almost no tools to recover that lost revenue in real-time.
Imagine a hairdresser who blocks out a 1-hour appointment slot at $80. A client does not show up. That hour is gone forever, the revenue is lost, and the founder is left reacting instead of operating, manually sending apology texts or hoping the client eventually reschedules. One might argue that the simple fix is to require pre-payment. But in many service categories such as haircuts, plumbing, or laptop repairs, customers often feel uncomfortable paying before the service is successfully completed. For an early-stage founder, building trust and respecting customer preferences can matter more than enforcing rigid policies. So instead of forcing pre-payment and risking a damaged reputation, the real question becomes what if there were a smarter way to protect revenue while still meeting customers where they are?
What if the moment a no-show was detected, an AI instantly analyzed:
- Client history: Have they been reliable in the past?
- Current availability: Are there other clients waiting?
- Time left in the day: Can we fill this slot before closing?
- Startup context: What services does this startup offer?
And then, what if that AI could immediately execute recovery actions, reaching out to waiting clients, offering the client a rebooking incentive, or prepping the calendar for walk-ins?
SlotShield was born from the conviction that no-shows shouldn't mean lost revenue. They should be an opportunity.
What I Built
SlotShield is a full-stack web application that sits between your calendar, your clients, and your revenue:
Calendar Intelligence
- Syncs with Google Calendar and imports ICS/CSV appointment data
- Uses Gemini AI to classify events as service appointments or personal time with human-verifiable confidence scores
- Learns your startup context: registered services, known client names, industry type
Real-Time No-Show Detection
- Continuously monitors your schedule as appointments pass their start time
- Instantly detects when clients fail to show up
- Captures the moment to act, while recovery is still possible
AI-Powered Recovery Planning
- When a no-show occurs, Gemini generates a contextual recovery plan in seconds
- Plans consider: client history, remaining business hours, waitlist size, service pricing, and relationship tier (first-time vs. repeat no-show)
- Each recovery action includes a confidence score and estimated revenue recovery
Intelligent Execution
- One-click recovery actions powered by Twilio SMS and voice calls
- ElevenLabs AI voices for natural-sounding outreach calls
- Tracked execution with full audit logs so you know what worked
Smart Client Search
- Search clients by name, even fuzzy matches
- AI understands context: "the Tuesday regular" or "the guy who gets haircuts" matches to the right person
- Searches both formal client records and calendar appointment history
How I Built It
Technology Stack
- Frontend: React + Vite for a responsive, fast UI
- Backend: Express 5 with TypeScript for type-safe API routes
- Database: PostgreSQL with Drizzle ORM for schema flexibility and safety
- AI: Gemini 2.5 Pro
- Voice: ElevenLabs TTS for natural-sounding AI voice calls
- Communications: Twilio for SMS and programmable voice calls
- Auth: Google OAuth 2.0 with OIDC + PKCE (industry standard)
- Deployment: Cloud VPS
Architecture Decisions
- Chose Drizzle ORM for type safety and migration safety, which is critical when handling customer data
- Built an efficient event classification pipeline that combines Gemini AI with keyword-based fallbacks (AI fails gracefully)
- Implemented smart event override system: users can manually flip Gemini's classifications if needed
- Separated recovery planning from recovery execution to give founders time to review before acting
Key Features Engineered
- Calendar sync with human verification: We show users exactly which events Gemini classified and how confident it is. Users can toggle any classification with trust, but verify.
- Service price recovery: If an appointment has no price, we look it up from the startup's service catalog, then fall back to business average, then to a sensible default. Never show $0 recovery estimates.
- Client history context: Recovery plans know if this is a client's first no-show (gentle, forgiving tone) or a repeat offender (firmer, professional tone).
- Calendar + client database search: Most client search stops at your CRM. We search calendar appointments too, so you find clients even if they haven't been formally registered yet.
Challenges I Overcame
Challenge 1: Gemini AI Reliability in Real-Time
The Problem: Early calendar sync tests showed 30% of appointments weren't being classified. They were silently failing in Gemini. The catch block returned a generic "unavailable" message, so I didn't know the AI had failed.
How I Fixed It:
- Implemented a multi-layer fallback system: Gemini AI leads to keyword-based classifier which then leads to excluding by default
- The keyword classifier uses practical rules: "Service - Name" format = appointment; personal keywords like "gym," "coffee," "lunch" = excluded
- Added explicit logging in catch blocks so failures are visible, not silent
Challenge 2: $0 Revenue Estimates
The Problem: When appointments had no price attached, recovery plans would show $0 recovery estimates. Useless to founders and quitedemoralizing.
How I Fixed It:
- Implemented a three-layer price lookup: appointment price, matching service price, business average price leads to a default, practical price dependent on the original service revenue if not cancelled
- Added AI prompt rules that explicitly forbid $0 estimates
- Built a safety net that replaces any $0 values post-generation
Challenge 3: Recovery Actions Not Showing in the Hub
The Problem: Users executed recovery actions but they never appeared in the Recovery Hub. The query used and(eq(id, x), eq(id, y), ...) which is logically impossible (an ID can't be X and Y simultaneously).
How I Fixed It:
- Switched to
inArray()for "appointment ID in [x, y, z, ...]" logic - Recovery actions now surface correctly
Challenge 4: Client Search Was Too Narrow
The Problem: Search only looked at formally registered clients. But most startups have clients from calendar imports who aren't in the CRM yet. Typing "Thompson" wouldn't find "Mr. Thompson" from the calendar.
How I Fixed It:
- Extended client search to pull from both the client table and appointment history
- Gemini now sees both formal client names and calendar appointment names
- Added context awareness: service types, appointment days, nicknames
- Clients found only in calendar are returned as search results too
Challenge 5: Real-Time vs. Batch Processing
The Problem: Should no-show detection happen in real-time (polling every minute) or batch? Real-time feels snappy but expensive. The batch might miss the window to recover.
How I Fixed It:
- Built the architecture to support both: no-show detection happens when the user navigates to the dashboard (reactive) or via background jobs (proactive)
- This balances cost with responsiveness without complex infrastructure
Challenge 6: Calendar Classification Confidence
The Problem: How do you explain to a founder in the service industry why Gemini thinks their "Annual Planning Meeting" is personal time? They need to understand the why to trust the AI.
How I Fixed It:
- Every classified event shows a confidence score (0–100%)
- Every event shows the reason for classification (e.g., "External attendee + formal meeting pattern = business appointment")
- Users can toggle any classification and see the override badge
What I Learned
AI isn't magic; it's a starting point. Gemini is powerful, but it needs guardrails. The keyword fallback classifier often outperforms pure AI especially when the context is thin.
Silent failures kill trust. When Gemini fails silently, users have no idea. Explicit logging, fallbacks, and error messaging are non-negotiable.
Context is everything. A recovery plan for a repeat no-show looks different from a first-timer. A search for "Thompson" needs to understand appointment history, not just the client table.
Founders think in workflows, not APIs. The most important feature isn't the AI, it's the one-click "Execute" button that turns a plan into action and gives a satisfying peace of mind to the founder.
Google Calendar is the source of truth. Most appointment-based startups live in their calendar, not a formal CRM. Syncing Calendar smartly (with AI classification) unlocks massive value.
What's Next
Future roadmap:
- Predictive no-show scoring: Use historical patterns to flag high-risk appointments before they become no-shows
- Multi-channel recovery: WhatsApp, email, Instagram DMs to meet clients where they are
- ROI dashboard: Show founders exactly how much revenue SlotShield recovered
- Recurring patterns: "Every Tuesday at 2pm, this client no-shows" leads to automatic deposits or forced pre-payment requirements
- Team collaboration: Share recovery actions and insights across your team or with admins
SlotShield: Because every minute your startup is open and ready to provide a service is an opportunity to recover revenue. No-shows don't have to be final.
Built With
- date-fns
- drizzle-orm
- drizzle-zod
- elevenlabs
- express.js
- framer-motion
- gemini-ai
- google-calendar-api
- google-oauth-2.0
- lucide-react
- node.js
- postgresql
- react
- shadcn/ui
- twilio
- typescript
- vite
- zod
Log in or sign up for Devpost to join the conversation.