惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
WordPress大学
WordPress大学
小众软件
小众软件
云风的 BLOG
云风的 BLOG
IT之家
IT之家
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
T
Tailwind CSS Blog
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
宝玉的分享
宝玉的分享
博客园 - Franky
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
D
Docker
博客园 - 聂微东
C
Check Point Blog
H
Help Net Security

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
The receptionist problem nobody's building for
Isaiah Kim · 2026-06-20 · via DEV Community
Cover image for The receptionist problem nobody's building for

Isaiah Kim

There's a specific kind of business I keep thinking about: the one-person salon, the barber booking 40 heads a week, the cleaner handling 15 jobs. Not underserved because they can't afford software — underserved because the software keeps assuming they have a spare hour to configure a booking portal and remind customers it exists.

The actual problem is simpler. Their customers text a phone number. Not a form, not an app — the number on the window or the Instagram bio. When that text comes in at 8pm asking about Saturday availability, there's nobody home to answer it. The appointment goes to whoever texts back first.

I got interested in this because the gap felt oddly specific. SMS is already the channel. The customers are already using it. The missing piece is purely presence — someone available at 9pm on a Tuesday.

What I built

Remi is an AI receptionist that mans a dedicated SMS line for a local service business and handles the full customer lifecycle: answering questions about hours, pricing, and services; collecting name, preferred service, and time in natural conversation; confirming the booking; sending automated reminders 24 hours and 1 hour before each visit; following up afterward to ask for a review.

The stack:

  • AI: Google Gemini 2.5 Flash
  • Messaging: Twilio SMS with 10DLC registration
  • Backend: Next.js 16 API routes on Vercel
  • Database: Supabase Postgres (three tables: conversations, bookings, businesses)
  • Payments: Stripe subscriptions — $99/month with a 7-day free trial

On every inbound SMS, the webhook fires, Gemini gets the full business context plus the entire conversation history, and either generates a reply or — when booking intent is clear — emits a BOOKING_JSON object that gets parsed and written to the database. Intent detection stayed accurate across multi-turn conversations, which was the thing I was most worried about going in.

What took longer than the code

Twilio 10DLC. Carrier-level compliance requirements for business SMS in the US. If you haven't navigated it: it's not a weekend task. Set aside time, expect back-and-forth with documentation that was clearly written for a different audience. Worth it — it's what makes delivery reliable — but it wasn't in the original estimate.

Also: Vercel Hobby doesn't support sub-daily cron jobs. Appointment reminders run via a cron-job.org job hitting /api/reminders every 15 minutes. Not elegant, but faster than standing up a separate scheduler, and it works.

What I'd do differently

Integrate a calendar on day one. Bookings live in Supabase and surface through the dashboard, which works, but confirmed appointments should sync to Google Calendar so the business owner isn't checking two places. That's the obvious next step I left out.

I'd also reduce onboarding friction earlier. Getting a Twilio number configured and 10DLC registered is still a manual step. For a one-person shop — the customer segment this is built for — that's meaningful friction to eliminate before charging anyone $99/month.

Where it landed

This started as a build for the Build with Gemini XPRIZE Hackathon and ended up going live.

Demo: Watch on YouTube

Live: remiai.vercel.app