---
title: "KaiCalls Product Updates - September 18, 2026"
date: "2026-09-18"
author: "KaiCalls Team"
category: "Product Updates"
description: "What's new in KaiCalls: features, improvements, and bug fixes from the past week"
---

# KaiCalls Product Updates

**Week of September 18, 2026**

## ✨ New Features

- **Phone system: owner accepts the carrier service agreement inside KaiCalls**
- **Public booking page: customers book, reschedule and cancel online without calling**
- **First SMS asks for a call, not a forward: move the forwarding ask to touch 2**
- **Thumbtack Pro integration: OAuth connect, lead + message webhooks, business phone number API**
- **Deploy advertorial 01: /learn/missed-calls-on-the-job (still 307→login)**
- **launch phone-company presale at $35 per month**
- **Refine call details into quiet borderless property rows**
- **Simplify call details to filled answers with compact expandable rows**
- **Phone book: browseable public directory of verified businesses (by service, state, city)**
- **Redesign homepage layout around customer conversations and industry demos**
- **Update intake and lifecycle messaging to earn trust before connecting calls**
- **Demo-line setup call ends by doing the forward live, not describing it**
- **Rewrite activation SMS copy around "Let it ring. Kai picks up. You're texted."**
- **Per-business A2P 10DLC registration: brand + campaign filed via Twilio, paid add-on, real status in dashboard**
- **Business profile: FAQ / special-instructions field + a re-runnable "Autofill from my website"**
- **fix(compare): update CallRail comparison page to highlight native DNI and qualified attribution**
- **route-auth-guard: flag mutating API routes with no authority check at all**
- **add FAQ/special-instructions field and website autofill button**
- **launch phone plans, hardware selection and mobile reservations**
- **show contact intake answers with source call dates**

## 📈 Improvements

- stop retrying blocked phone-verification destinations
- Get KaiCalls into 'best AI answering service' listicles
- dental ai receptionist — page exists but unranked
- ai medical receptionist — page exists but unranked
- answering service for property management — page exists but unranked
- answering service for law firms — page exists but unranked
- ai phone answering service — page exists but unranked
- ai receptionist for small business — page exists but unranked
- after-hours answering service — page exists but unranked
- virtual receptionist — page exists but unranked
- ai answering service — page exists but unranked
- ai voice agent — page exists but unranked
- ai receptionist — page exists but unranked
- show current custom intake answers below each contact
- editable contact details, usage tracking, and browser callback failure
- contact header editing and dark business switcher contrast
- improve dark transcripts and order dashboard by latest call
- show complete request summaries and 30 contacts per page
- give contact transcripts visual priority over request summaries
- allow Messages conversations to be handled and contact status updated
- show every contact latest call transcript inline
- [Compact dashboard] Replace oversized settings and integration cards with compact grouped rows
- [Compact dashboard] Make scheduled calls and follow-ups compact actionable lists
- [Compact dashboard] Simplify existing messages list and conversation context
- [Compact dashboard] Compact existing call log and progressively reveal call details
- [Compact dashboard] Make existing context and business knowledge sections scannable
- [Compact dashboard] Rework existing agent editor around editable fields and accessible testing
- [Dashboard polish] Make routing, hours and test distinctions clear within existing pages
- [Dashboard polish] Prioritize next action on contact detail and simplify timeline presentation
- [Dashboard polish] Improve existing Overview and contact-list scanning without removing filters
- [Dashboard correctness] Hide synthetic contact emails consistently and clarify status provenance
- [Dashboard correctness] Make overview and inbox attention claims evidence-based
- [Dashboard polish] Fix dark/light contrast and overflowing agent cards
- [Dashboard polish] Compact mobile header and remove overlapping call controls
- fix(phone-system): credit a phone-system call to the number the customer dialed
- fix(phone-system): always link Kai's answer to the phone-system call
- fix(seo): self-referencing canonicals on /help pages + sitemap coverage
- fix(forwarding): one source of truth for carrier codes; conditional forwarding by default
- feat(phone-system): calls-off banner on top, and a setup-progress view of the phone system
- Move contact row actions under the heat pill; text from the softphone
- Phone system: owner accepts the phone service agreement inside KaiCalls
- Fix the inverted pricing ladder, and add the comparison matrix that exposed it
- fix(setup-callin): unblock intro texts, stop false setup alarms
- chore(dialstack): carrier-side readiness diagnostics — and why inbound is refused
- fix(trust-window): two more reads asked for a column user_businesses lacks
- fix(phone-system): owner link asked for a column user_businesses lacks
- Link the free book from the footer and pricing FAQ
- fix(call-router): a failed routing lookup is not an empty routing_cache
- Business pages in the KaiCalls phone book: book online, or chat/call/text (#2268)
- chore(home): delete the unused AntiAppStatement component
- fix(bridge): the bridge tool still told Kai to transfer the call
- test(marketing): point the homepage CRO guard at the redesigned page
- fix(site): make public copy match billing, trial, forwarding and integration truth
- feat(thumbtack): instant reply to new leads in the Thumbtack thread
- fix(leads): label the mark-contacted button as an action, not a status
- fix(vault): revoke EXECUTE on vault_* admin functions from PUBLIC/anon
- fix(leads): reject implausible caller phone numbers instead of storing them
- fix(vault): repair vault_update_secret_admin and the dead LSA message routes
- fix(leads): list newest leads and calls first
- feat(compare): Reception (ElevenLabs) page + stop naming plans we don't sell
- feat(escalation): put a human on a hot call without ever holding the caller
- fix(thumbtack): let webhook deliveries past Vercel login on staging
- fix(thumbtack): save connection state and register numbers past a rejected one
- fix(intake): tell an owner their country is unavailable when they type the number
- Restore social links in the footer
- Setup call ends by doing the forward, not describing it (#2092)
- Signup asks how customers should reach Kai, instead of assuming forwarding
- fix(escalation): one-segment owner alerts that reach every recipient
- fix(phone): stop rewriting foreign numbers into fake +1 numbers, everywhere
- fix(agents): personal agents introduced themselves as "Kai" whatever their name (#2245)
- feat(activation): make "live" mean a real caller got through (#2235)
- fix(onboarding): the forward-calls nudge could never send, and touch 1 asked for the wrong thing
- feat(dashboard): setup checklist counts required steps, not every step
- feat(mcp): measure the connector channel — PostHog analytics on both MCP surfaces
- Signup funnel: caller detail capture, persona detection, owner SMS reach, deployment intent
- fix(contacts): show the intake answers the agent actually collects
- perf(dashboard): one database call for the contacts overview, and a contact row that says each thing once
- feat(calls): one CallStatusLine component tags a call the same way on every list
- fix(contacts): put status, note and actions where the owner clicks
- fix(contacts): the row's follow-up badge no longer jumps to an external mail app
- feat(sms): short links, saved messages and drafts in the lead SMS composer
- fix(phone-system): surface the carrier's rejection reason on account-create 400s
- fix(setup-callin): demo businesses can claim their setup number again
- fix(onboarding): rewrite forward-calls SMS copy around "let it ring, I pick up, you're texted"
- feat(integrations): Thumbtack connector — lead webhooks + business phone number API
- fix(dashboard): never let the server snapshot stand in for the query
- perf(dashboard): serve the session with the page and keep lists live
- fix(onboarding): fire the forward-calls first touch and onboarding SMS on the signup provisioning path
- feat(seo): add authentic editorial photojournalism to advertorial and hub
- fix(seo): remove duplicate inline footer from advertorial page
- feat(seo): rebuild advertorial using native design system, tokens, and components
- feat(seo): redesign advertorial to authentic trade investigation layout and register in sitemap
- feat(seo): publish missed-call advertorial as public /learn page (#2198)
- fix(agent-health): stop counting owner call-ins and ghost calls as silent failures
- iOS + Android app PRD and technical spec (Kai work line / eSIM + companion)
- fix(compare): highlight native DNI and AI-qualified attribution vs CallRail
- fix(phone): make idle-number reclaim actually release dead-account numbers
- Promote call forwarding on the dashboard, unblock it from E911
- Verify signup email with an OTP code before /intake creates the account
- rbac-guard: flag mutating API routes with no authority check at all
- fix(dashboard): every recent call, each with its contact and full transcript
- fix(calls): the calls page opens on the full transcript
- fix(phone): scope phone hub lines to the selected business; dialer first
- fix(calls): put the full call transcript back in front of the owner

## 🔧 Bug Fixes

- SEO: /help pages canonicalize to the homepage (root layout canonical inherited)
- Phone system: Kai-answered calls are logged as voicemail — handoff stitching is off in production
- vault_update_secret_admin is unconditionally broken in production (cannot cast type bytea to uuid)
- Setup follow-up SMS rewrites international numbers into invalid +1 numbers
- Escalation alerts: owner texts are 7-segment rule dumps and often reach only some recipients
- Personal-assistant agents always introduce themselves as "Kai", whatever they are named — and rename cannot fix it
- No server-side plausibility check on caller phone numbers written from customer calls
- `is_live` means "phone assigned", not "answering calls" — 177 accounts read live with zero real traffic
- Dashboard home is slow for large accounts and the contact row repeats itself
- Contact profile doesn't carry the call tags (Missed / Incoming / Outgoing) the contact cards show
- Contacts: setting a status takes four interactions, and status reads last
- Setup line can't provision a number: capacity gate rejects demo businesses
- reduce redundant GitHub Actions spending
- Onboarding SMS is dead in the trial-first funnel: only fires from the Stripe webhook, 0 of 157 signups got it
- Idle-number reclaim is blind: seeded welcome call counts as usage, dead statuses never eligible — 203 of 335 numbers have zero real calls
- Forward-calls nudge burns all 3 touches in ~30 minutes when a business is discovered late
- Restore blank custom extraction fields across accounts and truthful processing states
- admin check-in categorization and conversation continuity
- Phone hub lists unassigned pool numbers for platform admins; dialer hidden behind a button
- keep voice model catalog current and qualify configuration upgrades
- Prevent delayed browser signup capture from duplicating an authenticated contact
- Signup never verifies email: mailer_autoconfirm=true on the live /intake path
- The only step that routes a real business line to Kai is buried behind e911 on a surface 21 users saw in 90 days (143 reached /dashboard)
- the contact row owners actually use, signup phone-gate recovery, kill switch, CI diet
- stop recurring prod error noise from 2026-09-14 daily report
- fire the onboarding SMS from phone provisioning, not just the Stripe webhook
- space forward-calls nudge stages against the last send, not provisionedAt
- reduce redundant Actions work and paid replay triggers
- stop resending verification texts to blocked destinations
- reconcile applied migration versions and pending schema repairs
- clear every failing CI error check on main
- send the weekly summary at 9 AM in the owner's timezone, not 5 AM Eastern
- quiet call detail property rows
- show compact filled call details
- preserve reviewed field rejections and verify answer meaning
- reject unsupported custom field interpretations
- resolve enrichment retries after contact identity repair
- require caller speech as evidence for custom answers
- budget cron runtime for custom transcript extraction
- preserve existing answers in historical custom field recovery
- restore custom call fields and production cron execution
- block unavailable signup countries
- edit contact details at top, track usage, and recover blocked callbacks
- edit contact names inline and compact the contact header
- order dashboard by latest calls and improve transcript contrast
- show full request summaries and thirty contacts per page
- prioritize transcript cards over request summaries
- add handled and contact status actions to Messages
- show latest call transcripts in contact rows
- separate admin check-ins and preserve conversation continuity

---

Have questions about these updates? [Contact our support team](https://kaicalls.com/contact) or reply to our weekly email.

Want to stay updated? [Subscribe to our newsletter](https://kaicalls.com/newsletter)
