Skip to main content
Caleb AlvaradoWeb developer & technical partner home

Mobile auto repairStarted January 2026, ongoing

MyKanic

A ringing phone becomes a booked, calendar-synced, text-confirmed repair job, with no dispatcher in the loop.

Founded and built solo. I designed the product, wrote the platform and built the phone agent on Twilio and OpenAI.

LiveFounder and developerVisit MyKanic (opens in a new tab)
  • Next.js 16
  • React 19
  • TypeScript
  • OpenAI Realtime API
  • Twilio Voice, Media Streams and SMS
  • Node.js + Fastify (voice server)
  • Prisma + Neon Postgres
  • Stripe Checkout
  • Clerk
  • Google Maps Platform
  • Tailwind CSS v4 + shadcn/ui
  • Vercel
mykanic.com
MyKanic home page: a white hero with the headline and a call to action, followed by feature, how-it-works and FAQ sections.
Client
MyKanic
Industry
Mobile auto repair
My role
Founder and developer
Timeline
Started January 2026, ongoing
Stack
12 technologies
Status
Live

The problem

A mobile mechanic works alone, and usually under a car. When the phone rings mid-repair the call goes to voicemail, and the customer dials the next number on the list. Each missed call is a job that went to someone else, and the usual fix, a dispatcher or an answering service, costs money before there is enough work to pay for it.

Even a person answering the phone cannot book a job well. They cannot see whether the mechanic is free, where they will be that afternoon, or how long the repair takes. Every mechanic keeps their schedule somewhere different, in Google Calendar, Outlook, Jobber or ServiceTitan, so a central booker is always guessing, and a wrong time block is a problem the mechanic inherits on site.

The call itself is not simple either. Callers describe a symptom, not a repair. They want to know what is probably wrong, how long it will take and what it will cost, and a made-up quote is worse than no answer. And when more than one mechanic covers the same area, the work has to be handed out fairly, which a voicemail box cannot do.

What I built

I built MyKanic so the phone is always answered. Callers reach an AI service advisor built on Twilio Media Streams and the OpenAI Realtime API, and they talk to it like a person on a normal phone line, not a menu. It asks for a ZIP code, asks a few questions about the car, explains the likely problem in plain words with a realistic repair-time range, and then offers appointment times.

Those times are real, because the voice layer never decides anything on its own. It asks the MyKanic platform, which finds active mechanics within a set radius of the caller, checks their actual free time, including busy time pulled live from whatever calendar or field-service app they already use, and offers the next mechanic in a fair rotation. One booking saves the appointment, writes it to the mechanic's calendar, moves them to the back of the line and texts the customer a confirmation.

Mechanics join on their own: pay once through Stripe Checkout, verify a service address, connect a calendar if they want one, and go into rotation. Shop owners can invite their employees, who get their own calendar and connections. Price questions the advisor will not guess at land on an admin to-do list, where staff type a reply that is texted straight back to the caller. And I watch every booking, rotation move and text happen in a live Operations Center.

What it does

Features that pay for themselves

Each one in terms of what it does for the business, not what it is made of.

  1. An advisor that answers every call

    Callers hear a calm service advisor, not hold music or a phone menu. It asks one question at a time, works out the likely problem from the symptoms, gives a repair-time range from a built-in table of common jobs and steers the call toward a booking. The mechanic stays under the car and still gets the job.

    mykanic.com
    MyKanic home page: a white hero with the headline and a call to action, followed by feature, how-it-works and FAQ sections.
    The public landing page at mykanic.com.
  2. Mechanics sign up, pay and go live on their own

    A mechanic picks a one-time plan, pays through Stripe Checkout and lands in onboarding. Company details auto-save, the service address is verified against Google Maps so the service area is exact, and connecting a calendar is optional. Activating puts the company into the dispatch rotation without a call to me.

    mykanic.com
    MyKanic pricing page with one-time plans for mechanics, each with a buy button that opens Stripe Checkout.
    Mechanics buy in once; checkout runs through Stripe.
  • Booked with a nearby mechanic who is actually free

    The platform looks only at active mechanics within a set radius of the caller, checks their real free time, including busy time from their own calendar, and offers the next one in a fair rotation. One booking saves the appointment, puts it on the mechanic's calendar, moves them to the back of the line and texts the customer the time, service and address.

  • Works with the tools mechanics already use

    There are integrations for Google Calendar, Outlook and Microsoft 365, Apple iCloud, ICS feeds, Calendly, Acuity, Jobber, Housecall Pro, Square, Workiz, Setmore and ServiceTitan, connected with a one-click sign-in or an API key. Busy time blocks the schedule, phone bookings are written back as events or jobs, and the dashboard says when a sync failed, so nothing goes missing quietly.

  • Price questions go to a person, not a guess

    When a caller wants an exact price, the advisor logs the question with the vehicle and the issue instead of making a number up. It lands on an admin to-do list; staff type the quote, it is texted to the caller, and the task closes. Customers get a real answer and mechanics never have to walk back a price.

  • Seats for shops with a crew

    An owner creates single-use invite links for employees. Each employee joins the company's rotation and gets their own appointment calendar and calendar connections, so jobs land with the right person and the owner sees the whole team in one week view.

  • A live Operations Center

    One screen shows the day's numbers, the company and employee rotation queues with who is up next, a plain-English feed of bookings, texts, rotation moves and pricing questions, and the latest bookings with whether the confirmation text went out. It refreshes itself every 15 seconds.

How a call becomes a job

From hello to booked

Every box is a real hop. Open times and prices come from the MyKanic platform, never from the model.

How a MyKanic call becomes a booked jobCall flow in six steps. The caller phones the number. Twilio Media Streams carries the audio to the voice server, built on Fastify. The OpenAI Realtime agent runs the conversation. It asks the MyKanic API for availability, a booking or a pricing task. The booking lands on the mechanic's calendar and the customer gets a confirmation text.Callerphones the numberTwilioMedia StreamsVoice serverFastifyOpenAI RealtimeagentMyKanic APIavailability, booking,pricing taskMechanic calendar+ confirmation text
MyKanic
Today 10:14 AM

MyKanic: Your appointment is booked for Tue 10:30 AM, brake inspection at your address. Your mechanic will text you when on the way. Reply STOP to opt out.

Illustration of the confirmation text

Engineering

Under the hood

For the partner who reads code.

  1. The AI cannot invent a time or a price

    Each call runs two Realtime sessions back to back: a short one that only captures the caller's ZIP code, then the booking session with five narrow tools. The booking tool accepts just a start time, a duration and a title; customer details come from the server's own per-call memory, and the callback number falls back to caller ID. Open times come from the platform, never from the model, and a price question becomes a task instead of an answer. Bad arguments go back to the model as errors, so it recovers in conversation rather than claiming a booking that did not happen.

  2. The voice server owns only the conversation

    The phone layer is a small Node and Fastify service built on Twilio Media Streams and the OpenAI Realtime API, and it keeps no customer data. Everything it needs goes through four bearer-key endpoints on the web app (look up a caller, fetch open slots, book, log a price question), so scheduling, customer records and every side effect live in one system of record. Audio passes through untouched, because Twilio and OpenAI both speak 8 kHz mu-law, and when a caller interrupts, the AI's reply is trimmed to what was actually heard using Twilio's playback marks.

  3. Local dispatch with a two-level fair rotation

    Dispatch today keeps only active, address-verified companies within 15 miles of the caller's ZIP, using geocoded coordinates and a haversine distance. It walks the company queue in rotation order, then that company's employees in theirs, falling back to the owner when there is no crew. After every booking both the company and the mechanic move to the back of their lines, and an audit row records it. Addresses are verified twice, Places Autocomplete in the browser and then server-side geocoding by place ID, so the stored coordinates can be trusted.

  4. One adapter for 12 calendar and field-service platforms

    A single interface, get busy blocks and create an event, is routed to Google, Microsoft Graph, iCloud CalDAV, ICS feeds, Calendly, Acuity, Jobber, Housecall Pro, Square, Workiz, Setmore and ServiceTitan. A capability registry declares which providers are read-only or two-way and how each one connects, and it drives both the UI and the sync behavior, so adding a platform is one entry plus one adapter. Conflict checks merge MyKanic appointments with external busy time, apply a 30-minute travel buffer on both sides, and do every date calculation in the calendar's own time zone.

  5. A booking survives a flaky integration

    The booking routine always saves the appointment first. If a calendar write-back fails, the failure is recorded per connection and shown as a banner on the mechanic's dashboard with the last sync time and the error, so the job is never lost and the owner knows what to fix. A text that fails to send does not fail the booking, and the confirmation is sent exactly once, guarded by a timestamp on the appointment, so a retry can never double-text a customer.

  6. Signed state, hashed invites, verified webhooks

    OAuth callbacks for Google, Outlook, Jobber and Square carry an HMAC-signed state with the user ID and a timestamp, rejected after 30 minutes, which blocks tampering and cross-site request forgery. Employee invites are 256-bit tokens stored only as a SHA-256 hash and shown once; redeeming runs in a single database transaction that enforces single use, expiry and the seat cap, and assigns rotation order in the same step. Stripe's webhook signature is verified on the raw request body before anyone is promoted to a mechanic account.

Gallery

Screens

On a phone

  • The MyKanic home page hero on a phone.
  • The MyKanic pricing page on a phone.

Screens behind sign-in were captured with demo companies and customers, not real data.

Building something similar?

Tell me what your business needs. I will tell you what I would build, what it would take, and whether I am the right person for it.