AI front desk and agency CRM

The AI receptionist on the agency's phone line, and the CRM each call lands in.

Built for
Your Wish Is Our Code LLC
Role
Founder
Status
Live
Stack
Next.js, React, TypeScript, Postgres, Telnyx, Claude, Fly.io
The agency CRM, on demo data.

Callers to the agency reach an AI receptionist first, at any hour. It takes down what they need, offers open times and books a call, or promises a callback, and when the call ends the CRM files it with a transcript, a summary and the facts the caller gave. I built both, and the agency runs on them.

The size of the build

commits to the agency CRM
187
lines of TypeScript
about 496,000
tests included

The AI front desk

The receptionist answers the agency's public number around the clock. It can look up a known client's project, file a new inquiry, book a discovery call from the open slots, take a callback or a support request, and flag a call for a person.

In posted hours a qualified caller can be put through to a person. Otherwise the caller gets a callback promise, and the CRM opens a task and sends a push to my phone.

The voice runs on Telnyx with a model hosted there, picked in a bake-off where reply speed came first. Claude reads each call once it ends.

A call record in the CRM, on demo data: the summary of what the caller wants, the transcript, and each fact with the caller's own words as its quote.The same call record on a phone, on demo data: its summary of what the caller wants, who they are and what was saved.

What lands in the CRM

When a call ends, the worker stores the recording, has it transcribed and has Claude read the call into a summary and a set of facts. Each fact carries the quote it rests on, and the CRM fills only fields that are still empty.

The call lands on the caller's timeline beside their deals, papers and tasks. A person can call back from the same page, recorded, with a wrap-up that closes the call.

A call record in the CRM, on demo data: the summary, the transcript and each fact with its quote.

The CRM the agency runs on

The CRM, live since Sep 2026, follows a client from the first call to handover, on Postgres and a Next.js app.

  • Organizations, contacts and deals, each with a single timeline of mail, calls, money, tasks and notes, and a next action with a date
  • Proposals, contracts and statements of work, sent and signed in the app, with the deposit
  • Projects with milestones, renewals and a build log a client can read
  • Invoices with a pay link, and a reminder ladder that runs by hand for now
  • A client portal behind a single-use sign-in link
  • A scheduler for discovery calls, and a weekly check of the agency's listings across the web
  • Owner and staff roles, with every change audited

Tested with scripted calls

The receptionist's script is graded against a written rubric, using my own scripted test calls. Its best runs passed every row: 11 of 11 scripted calls on the live line, then 15 of 15 on a later script.

The scripts that came after added the live transfer and a fixed answer on price, and have not passed in full: 14 of 18, then 16 of 21 for the script on the line since late October. A passing run is among the gates on the agency site's call-our-front-desk button, which stays off for now.

Timed by stopwatch on the first run's calls, its replies came after a median lag of about 1.4 s, and 90% of replies within 2,913 ms.

A switch on the CRM's calls page turns the AI receptionist off without a deploy.

Contact

For a role, a project or a question about anything here, email me.

An AI phone line that answers questions about my work.

Call my AI
(213) 635-1440