OPENLINE AI - Always open. Always answering.

An AI phone agent with persistent memory, built for service businesses that can't staff their phones 24/7.


Inspiration

A homeowner's roof starts leaking. They search, find three local roofers, and call all three. Two go to voicemail. One picks up and wins the job, often just because they answered first, not because they were the best.

This happens constantly, and it's expensive for small service businesses:

  • 62% of small business calls go unanswered
  • 85% of missed callers never call back — they just call the next contractor
  • A small roofing contractor loses an estimated $45K–$120K a year to missed calls alone
  • These businesses are already paying $79–$228 per lead in marketing — they're winning the click and losing the job on the very next step: the phone

We talked directly with a roofing business owner about this problem, which is what pushed us toward roofing as our pilot industry - speed-to-lead is everything in home services, and the first contractor to respond wins 70–80% of jobs. We wanted to build something that closes that gap: an agent that never misses a call and never forgets a caller.

What It Does

The Front Desk That Never Sleeps answers every call to a roofing business, 24/7, and behaves like a real front-desk employee who remembers everyone who's ever called in:

  1. Answers instantly — day or night, no hold music, no voicemail.
  2. Has a real conversation — asks about the roofing problem, timeline, and severity, and stays on-topic (politely redirects unrelated questions and declines out-of-scope services like plumbing).
  3. Recognizes returning callers — looks the caller up by phone number and recalls their name, address, and prior conversations instead of starting over.
  4. Flags emergencies — detects urgent situations (active leaks, storm damage, structural risk) and prioritizes them.
  5. Captures everything — name, address, email, problem details, availability, and (in future work) photos/files the caller sends.
  6. Hands off cleanly — sends a follow-up SMS summarizing the call and creates action items (call back, schedule a visit) for the business owner.
  7. One-stop control for owners — Every call, customer, task, appointment, transcript, and file in one place, with Gmail connected directly to the dashboard.

Try the live demo

Experience OpenLine AI without installing anything: 1.Call the AI receptionist: (832) 648-1907 2.Open the application: https://18-224-114-80.sslip.io/ 3.Watch the operations dashboard: https://18-224-114-80.sslip.io/dashboard 4.Check system health: https://18-224-114-80.sslip.io/health 5.For the best demonstration, open the dashboard and then call the number. You can watch the call status and transcript update as the conversation happens; after the call disconnects, refresh the completed records to see the structured summary and follow-up tasks.

How We Built It

  • Telephony & voice: Twilio Programmable Voice + Media Streams to an AI agent running on AWS Lightsail.
  • Conversation intelligence: OpenAI's Realtime API (gpt-realtime) handles live, two-way audio conversation with mid-call interruption support, so the caller can talk over the agent naturally.
  • Persistent memory: CockroachDB Cloud is the core data layer, storing every customer, call, and transcript turn. Transcript text is embedded using OpenAI's text-embedding-3-small (1536 dimensions) and indexed with CockroachDB's Distributed Vector Indexing for semantic transcript search. During development, we leveraged the ccloud CLI (Agent-Ready) and the open-source CockroachDB Agent Skills Repo to manage and interact with our database through an AI-agent-friendly workflow.
  • Backend: Python + FastAPI, with a shared transcript_service module so both the live call path and REST API save transcripts through identical logic. A single call_id, generated from a CockroachDB sequence, ties every turn of a conversation together
  • Dashboard: a lightweight HTML/CSS/JS "Command Center" for the business owner — a calls table with filters and stats, a per-call drawer (transcript, to-dos, notes, search, files), and a client-level view of everyone who's ever called.

We split ownership across the team by focus area (frontend, backend, infra/deployment, research, presentation) with clear driver/passenger roles, and ran a weekly knowledge-sharing check-in to keep everyone synced.

Architecture at a Glance

A call begins when a caller dials the business number, which is answered by a Twilio Voice Application. Twilio opens a webhook and a bidirectional media stream, and forwards the call to the backend, which runs on an AWS Lightsail instance behind Caddy, serving as the HTTP and HTTPS reverse proxy. Caddy routes the incoming request to OpenLine AI, a FastAPI application served by Uvicorn that forms the core of the system.

Inside OpenLine AI, the Voice Stream Controller takes ownership of the live audio stream and hands it off to the Caller Memory component, which looks up the caller in CockroachDB to retrieve any prior history. That context is injected back into the live call, and the Voice Stream Controller streams audio to and from the OpenAI Realtime API, which provides the live speech-to-speech conversation the caller actually hears and speaks with. CockroachDB is accessed via the ccloud CLI and a set of CockroachDB Agent Skills, serving as the single source of truth for customers, calls, and caller history throughout the interaction.

Once the call ends, the Post-call Extraction component takes the completed transcript and sends it to Groq's Chat Completions API, which was chosen for this step because of its speed in producing structured output from unstructured conversation. The extracted data is then passed to the Domain API Routers, which validate it before writing the finalized records back to CockroachDB and pushing updates to the Operations Dashboard.

The Operations Dashboard is the interface through which human operators, working from a browser, observe live call activity and review the structured data produced after each call. It also connects out to the Google Calendar API, so that appointments identified during a call are synced automatically, with confirmation of that sync flowing back into the dashboard so staff can see it reflected in real time.

Taken together, the architecture cleanly separates two concerns: the live-call path, which runs through the Voice Stream Controller and the OpenAI Realtime API and is optimized for low-latency conversation, and the post-call path, which runs through Groq extraction and CockroachDB writes and is optimized for accuracy and structure rather than speed. Everything staff need to see, from live call state to synced appointments, converges on the Operations Dashboard as the single point of visibility into the system.

Challenges We Faced

  • Never worked with a voice agent before, setting up Twilio and AWS Lightsail
  • Spend a lot of time researching and scheduling meetings with stakeholders to understand the real business pain point to build an impactful product
  • Never use CockroachDB before
  • Team member with different experience with hackathon, technical skill, fast flow, chaotic (database design)
  • Configure the voice agent to end the call, control the flow, wrapping up the conversation
  • The team has never worked with each other before, so they have to learn how to cooperate on tasks and contribute code.
  • Creating mock data, understanding different scenarios.

What We Learned

  • How to design a schema around when data actually becomes available in a live system (transcripts arrive turn-by-turn; structured summaries only exist after the call ends) rather than assuming a clean, all-at-once write.
  • How CockroachDB's Distributed Vector Indexing fits into a real agentic memory pipeline — not just storing conversation history, but making it semantically searchable.
  • How much guardrail and prompt-engineering work goes into making a voice agent behave reliably in a live call versus a text chat?
  • The value of a shared "driver/passenger" ownership model for splitting fast-moving, interdependent work across a small team on a tight hackathon timeline.

Built With

  • agent-skills-repo
  • amazon-lightsail
  • amazon-web-services
  • ccloud-cli
  • cockroachdb
  • cockroachdb-distributed-vector-indexing
  • css
  • fastapi
  • groq
  • html
  • ngrok
  • openai-embeddings
  • openai-realtime-api
  • pytest
  • python
  • twilio
  • twilio-media-streams
  • twilio-programmable-voice
Share this project:

Updates