Dashboard usage meter — see your approved minutes before calls pause
Orgs on a reviewer-set minute cap now see a usage meter on the dashboard (used vs limit), turning amber at 80% and red at 100%, with a one-line 'email us to raise it' nudge. It mirrors the dispatch gate exactly, so there's no surprise when calls stop. Orgs with no cap don't see it.
Usage limits now enforced at dispatch
The per-org minute cap a reviewer sets at approval now actually blocks calling once reached — across the REST API, test calls, and campaign launches. A capped org that exhausts its allowance is stopped with a clear 'contact us to raise the limit' message until an admin raises it. Closed a gap where campaign launch skipped the approval + usage gates. Free-tier limits (1 agent, no custom agents) were already enforced at agent creation.
Terms strengthened — sole call responsibility + indemnity
The Terms of Service now state explicitly that the customer bears sole responsibility for every call placed through their account, and that Cualify (a technology platform) isn't liable for escalations, complaints, regulatory notices, or penalties arising from those calls. Indemnity broadened to match. This is the language behind the responsibility checkbox in onboarding — the accepted version is recorded per org.
Onboarding now captures real KYC — registered vs unregistered, SPOC, consent
The onboarding 'Company details' step is now a proper Business verification step. Registered businesses must provide a GSTIN (no longer optional); unregistered ones provide promoter name + PAN. We also capture a named single-point-of-contact, the use-case, dialer/CRM posture (with an optional Cualify Dialer ₹5K/mo add-on for those without telephony), and an explicit consent block — terms acceptance plus a 'we take sole responsibility for every call' acknowledgement — recorded with timestamp + IP for a DPDP-grade audit trail. All of it surfaces in the admin review queue.
Admin roles — scoped staff access to the admin dashboard
Internal: super admins can now grant teammates a scoped role (onboarding / support / finance / viewer) from a new Team & roles page. The onboarding team sees ONLY the onboarding-review tab; finance sees billing/revenue; etc. Sensitive mutations (approve org, issue refund, adjust credits) are enforced server-side per role, not just hidden in the UI. Non-breaking: existing admins keep full access until explicitly scoped.
Onboarding review — every new org is manually approved before it can call
Internal: new admin 'Onboarding review' tab. Every new workspace now lands in a pending queue and cannot dispatch a single call (test, API, or campaign) until a Cualify reviewer reads its KYC and approves with a per-month usage cap + a written justification. Reject/suspend paths included, all audit-logged. An email fires to [email protected] the moment a new org signs up. This is the compliance backbone of an AI-calling platform — we don't let anyone dial Indian numbers until we've accepted the risk.
Customer-app mobile pass — calls + contacts + invoices + wizard + settings tabs
5 fixes across the customer app: wide tables on /calls and /contacts wrapped in ResponsiveTable (no more body-scroll), /billing/invoices upgraded to the helper for the swipe-hint, /campaigns/new wizard step pills collapse to number-only on the smallest phones with the active label showing, /settings tab-strip mask-image switches off on md+ and uses a tighter 6px fade on mobile so 'Compliance' doesn't get cropped.
REST API + webhooks docs (the developer surface)
Full reference for /api/v1: bearer-token auth (cuk_live_...), all shipped endpoints (calls POST/GET/GET-by-id, contacts POST/GET, webhooks POST/GET/DELETE), error envelope, rate limits, cURL quickstart. Webhooks doc covers the HMAC-SHA256 signature scheme (Stripe-style t=…,v1=…), Node + Python verification examples, per-event payload schemas, replay-attack guard, retry semantics.
Read API reference →
4 more docs filled in — compliance + billing + Exotel deep-dive
TRAI calling windows (09:00-21:00 explainer + when transactional bypasses), NDNC/DND scrub (how Cualify scrubs against TRAI's 85M-number registry + own suppression lists), manual-vs-autorenew billing (the trust-vs-friction trade-off), and Exotel App Bazaar setup (the App SID step every Exotel customer hits). All four were dead links from the docs index.
Read TRAI windows →
3 high-traffic docs filled in (bolna-numbers, DLT, credit-packs)
Previously dead links from the /docs index. Bolna number registration walkthrough (HowTo JSON-LD), DLT compliance handoff explainer (TechArticle), and credit-pack pricing + expiry + stack-with-plans guide (TechArticle + 4-question FAQ). All three were referenced from existing docs so the broken links were costing trust on setup.
Read DLT guide →
/admin dashboard fully usable on mobile
12-tab nav now scrolls horizontally on phones instead of wrapping into 3 rows. Every wide admin table (clients, audit log, recordings, invoices, refunds, calls, voice-ops, billing, system-health — 12 tables across 8 pages) wrapped in a ResponsiveTable helper with -mx-4 overflow-x-auto + min-width floor + 'swipe' hint shown only on mobile. Audit-log filter inputs stack to single-column on phones instead of crushing to illegibility.
Admin dashboard — Pusher real-time on live-calls counter
Every call.status transition through the Bolna webhook (started/failed/completed) now fires on a cross-org admin-global Pusher channel. The /admin dashboard subscribes and refetches on event, so the live-calls counter pulses within ~200ms instead of up to 30s. Falls back to pure polling when Pusher isn't configured.
HowTo JSON-LD on the Bolna trial-pool docs
Closes the JSON-LD sweep across every shipped /docs page. 3-step HowTo (₹0 cost, 2-minute total) targets 'free ai calling india' and 'how to test ai voice agent without setup' queries.
SoftwareApplication + Article JSON-LD across pricing and use-cases
/pricing now emits SoftwareApplication (with AggregateOffer ₹4,999–₹89,999) and BreadcrumbList on top of the existing Product + FAQ schemas. Each of the 4 /use-cases/* pages emits per-page Article JSON-LD so they can rank independently for long-tail intent queries.
Admin dashboard refresh feels live — no skeleton flicker
Set placeholderData=keepPreviousData on the executive-dashboard query so the cards don't blank out into skeletons every 30s. staleTime=25s means switching browser tabs no longer triggers an extra refetch on top of the polling cadence.
Admin dashboard — materialized views + 15-min refresh cron
Pre-computed the 4 most expensive /admin queries (revenue MTD/today/yesterday, calls today/yesterday/24h-completed, top-5 customers by revenue, 30-day revenue+calls+signups series) into Postgres materialized views, refreshed every 15 min by an Inngest cron. The live status counter (queued/dialing/in_progress) stays a live query. Combined with the cross-org indexes from batch C.1, dashboard load drops from 4-10s to sub-second.
Customer KYC section on /security + Organization JSON-LD on /about
/security now documents the 2-layer customer KYC story (GSTIN registry verify + cert upload) so procurement teams have one page to share. /about emits Organization + AboutPage JSON-LD so Google's Knowledge Graph can build the company panel for branded searches.
Mobile tables no longer trigger body horizontal scroll
The 19-row /vs-bolna comparison and the 4-plan /docs/billing/plans table both overflowed the viewport on phones, forcing the BODY to scroll horizontally. Both now use a local overflow-x-auto wrapper (same pattern as the pricing feature matrix) with a swipe-hint shown only on mobile.
PAN + GSTIN certificate uploads
Customers can now upload their PAN card and GSTIN certificate (PDF/JPG/PNG/WebP, max 5 MB) from /settings/organisation → Compliance documents. Storage is Vercel Blob, files live in our Mumbai region, URLs are unguessable. Pairs with the existing API-verified GSTIN badge for a complete procurement-trust story.
Upload your docs →
Onboarding funnel analytics — step-completed, back-clicks, time-in-step
Wizard now fires onboarding_step_completed on every advance (with time-in-step ms) and onboarding_back_clicked on back navigation. We added onboarding_first_call_dispatched on the wow-moment CTA so we can measure the activation funnel from signup to ringing phone.
SEO sweep — TechArticle + HowTo + FAQ across remaining docs
TechArticle JSON-LD on /docs/quickstart/voice-language, HowTo on /docs/quickstart/clone-template (4 steps, ₹0 cost), TechArticle + 4-question FAQ on /docs/billing/refunds. All eligible for Google's rich-result formats.
Twilio + Plivo telephony walkthroughs
Full HowTo-grade docs for Twilio (15 min, ~$10 first-call cost) and Plivo (15 min, often 20-40% cheaper than Twilio on APAC/LATAM). Each with rich-result-eligible HowTo JSON-LD so they appear in Google's expanded results.
Read Twilio guide →
Workspace email advisory on /settings/organisation
Founders on personal-email providers (gmail/yahoo/etc) now see a soft warning on the org settings page explaining the upgrade gate before they hit checkout — better UX than discovering it at the Razorpay step.
Workspace email enforcement on paid tiers
Starter, Growth, Scale, and Enterprise upgrades now require the org owner to be on a workspace email — gmail/yahoo/outlook etc are rejected at checkout. Pilot tier stays open to personal email. Helps procurement teams verify business legitimacy and matches DPDP grievance-officer requirements.
Read the policy →
Plivo telco adapter — third carrier in the multi-telco picker
Connect Plivo with just Auth ID + Auth Token. Verified live against Plivo's Account API before persisting, same atomic verify-before-save pattern as Exotel + Twilio. Useful for international outbound where Plivo's minute-rates beat Twilio.
Connect Plivo →
Rich SEO — TechArticle + FAQ + HowTo schema across docs
Added JSON-LD structured data to docs/billing/plans (TechArticle + 4-question FAQPage), docs/compliance/dpdp (TechArticle), and docs/telephony/exotel (HowTo, 6 steps, ₹500 cost). Pages qualify for Google's expanded rich-result formats.
Footer link audit — /vs-bolna + /changelog now discoverable
Marketing footer was missing the Bolna comparison page and the changelog — both now in the Company column alongside Pricing. Added /docs to the Product column too.