Inspiration

AI agents are about to book things for us — haircuts, classes, appointments. But nobody wants an AI spending their money without asking. We built the missing safety layer: agents do the work, humans hold the wallet.

What it does

velvetAI is a booking and deposit platform for local services. An AI concierge (Google Gemini) or any MCP-connected agent can search live availability and place a 5-minute hold. The agent can never confirm or pay. It hands the customer an approval link; only the signed-in human reviews the exact service, time, deposit and cancellation policy, approves, and pays the deposit with PayPal. Merchants see everything on a live Bryntum schedule.

How we built it

  • PayPal Orders v2 + PayPal JS SDK v6 for deposits; bookings confirm only after a server-verified capture, with webhooks and an outbox worker reconciling uncertain outcomes
  • Google Gemini via the Vercel AI SDK, with tools that can only quote and hold — never commit or pay
  • Model Context Protocol (MCP) server so external agents get the same safe, limited tools
  • Auth0 for human login, roles and machine-to-machine agent credentials
  • PostgreSQL 17: GiST exclusion constraints make double-booking impossible; FORCE Row-Level Security isolates every tenant
  • ES256-signed booking intents so approved terms can't be altered
  • React 19 + Vite frontend (Vercel), Fastify 5 API (Render), Bryntum Scheduler for the merchant view

Challenges we ran into

Making payment confirmation trustworthy when replies get lost, preventing races when many agents hit the same slot, and keeping the AI accurate about dates and time zones (we resolve all dates server-side).

Accomplishments that we're proud of

  • 20 concurrent agents racing for one slot: exactly 1 wins, 19 are rejected — enforced by the database
  • 50+ automated attack scenarios (prompt injection, replayed approvals, forged payments, cross-tenant access), all blocked
  • A clean separation: AI prepares, human approves, PayPal settles

What we learned

Agentic commerce needs hard boundaries in the system itself, not just in prompts. Giving the AI no tool that can move money is safer than asking it not to.

What's next

Demand forecasting with smart deposits, a one-click judge/demo reset UI, a fault-injection demo, and onboarding real merchants.

Built With

Share this project:

Updates

Submission history