Every call summarised into the CRM, without anyone listening
CallIntell turns recorded phone calls into reviewed, structured CRM records without anyone listening to the call. A six-stage queue-backed pipeline fetches the recording, transcribes it with speaker labels and word-level timestamps on serverless GPU, strips personal identifiers before any text reaches a language model, matches the call to its CRM record, and generates a schema-validated synopsis — outcome, commitments, objections, price discussed — with every point linked to the second of audio it came from. Spoken follow-up phrases such as “call me in ten days” are resolved into dated CRM tasks in the customer's own time zone, with the verbatim wording kept alongside. Anything the system is not confident about routes to a human review queue rather than being guessed, and CRM writes are idempotent so a retry cannot duplicate a note or a task. Built on Next.js, BullMQ on Redis, PostgreSQL with Drizzle, WhisperX with diarization, Microsoft Presidio redaction and Claude, with passkey and TOTP sign-in, an append-only audit log, per-company isolation and usage metering. Deployed and running the first customer workflow; not yet opened as a public product.
On a floor of any size, summarising calls is a full-time job for a group of people. They listen at double speed, skim, and still cannot cover everything — so coverage quietly becomes a sample rather than the whole.
By the time a summary is typed, the detail has gone. What the customer actually committed to, the price that was quoted, the exact words they used about calling back — the specifics that matter are the first to be lost.
Follow-up dates live in the recording and in somebody's head. Unless a human converts the phrase into a dated task on the right record, the callback does not happen and nobody notices.
Customers read out card numbers, bank details and government identifiers on the phone. Sending raw transcripts to a language model is the easy way to build this, and the wrong one.
CallIntell does the listening. People check the few results the system is not sure about, and the rest is written to the CRM unattended.
The outcomes that actually move the needle
Coverage stops being a function of how many people are available to listen.
Confident results pass through untouched. The queue contains only the outcomes, dates, prices and commitments the system flagged as uncertain.
A spoken "in about ten days" is resolved against the call date and the customer's time zone and lands as a task on the right record, assigned to the right agent.
Every point in a synopsis links to the second of audio it came from, so verifying is a click rather than a re-listen.
Redaction happens in the transcription worker, before the text is sent anywhere else.
Minutes are metered as they are processed and invoices are generated from that record, not estimated.
What we designed, built and shipped
Six-stage retryable pipeline: ingest, transcribe, match, synopsise, review, CRM write-back
PII redacted in the transcription worker, before any text reaches a language model
Spoken follow-ups resolved to dated CRM tasks in the customer timezone
Low-confidence results queue for a human instead of being guessed
Chosen so the expensive part scales with usage and the rest costs nothing when idle.
| Layer | Technology | Why |
|---|---|---|
| Review app | Next.js, React, TypeScript | Server-rendered call queue, transcript-with-audio review, and the per-company settings screens. |
| Pipeline | BullMQ on Redis | Six independent stages with per-stage retries, so one bad call does not stall or re-run the others. |
| Database | PostgreSQL with Drizzle ORM | Typed schema and migrations shared by the worker and the web app from one package. |
| Transcription | WhisperX with diarization, on serverless GPU | Speaker labels and word-level timestamps; serverless means GPU cost follows audio minutes rather than wall-clock time. |
| Redaction | Microsoft Presidio with custom recognisers | Strips identifiers before the transcript leaves the worker — including numbers read aloud in groups, which speech recognition writes as digits separated by pauses. |
| Language model | Claude, with schema-validated output | The synopsis comes back as a validated object — outcome, commitments, dates — not as prose that cannot be reported on. |
| Audio storage | S3-compatible object storage | Stateless workers and pre-signed, expiring URLs instead of files on a server. |
| Telephony and CRM | Connector per system | Recording retrieval and CRM write-back sit behind one interface each, so a second telephony or CRM system is an addition, not a rewrite. |
| Dates and time zones | Luxon | Relative phrases resolve in the customer's zone, which is the whole difference between a useful callback and a missed one. |
| Authentication | WebAuthn passkeys and TOTP | The review app holds call recordings; password-only access was not adequate. |
| Hosting | Docker with Caddy, nightly backups | Runs on a single box or in a customer environment, with automatic certificate renewal. |
A webhook fires. A poller sweeps for anything the webhook missed, because recordings are not always ready immediately.
Audio is streamed into object storage. Already-seen calls are detected and skipped.
A GPU worker produces a speaker-labelled transcript with word timestamps, then strips personal identifiers — before any of it is sent onward.
The tenant's recording-naming pattern is parsed first, then the caller number. No confident match means the unmatched queue, not a guess.
The call type selects a template. The model returns a validated structure: outcome, next actions, objections, commitments, price discussed — each point carrying the timestamp it came from.
A spoken phrase becomes an absolute date in the customer's time zone, with the verbatim wording kept beside it. Anything vague is flagged.
Uncertain fields go to the review queue with the evidence attached. Everything else continues unattended.
A note on the record, the outcome fields, and a follow-up task on the resolved date assigned to the agent. The write is idempotent, so a retry changes nothing.
We host and operate the pipeline and the review app. Telephony and CRM credentials are held encrypted per company.
The whole stack is containerised and runs on a single machine, so it can sit inside your infrastructure where recordings must not leave it.
Synopsis templates, scorecards, roles, users and integration credentials are all configured per company within one deployment.
Send us a single recording and we will show you the transcript, the synopsis, the extracted commitments and the follow-up date it produces — with every claim linked to the moment it was said.
CallIntell turns recorded phone calls into reviewed, structured records in the CRM, without anyone listening to the call. A recording lands, it is transcribed with speaker labels, personal data is stripped before it reaches a language model, the call is matched to its CRM record, and a synopsis — outcome, commitments, follow-up date — is written back as a note and a scheduled task. Anything the system is unsure about goes to a human queue instead of being guessed. Here is everything it does today.
Six queue-backed stages, each retryable on its own. A call that fails at transcription does not have to be re-fetched, and nothing is written to the CRM twice.
The point of the product is to replace listening with checking. Confident results pass straight through; the rest arrive with the evidence already attached.
Let's discuss how we can help you achieve similar results for your business
Explore our other ai platform projects
A production-grade Linux appliance that boots straight into a full-screen Windows RDP session — no desktop, no shell, no login prompt — backed by a self-healing watchdog and an infinite reconnect loop. It ships as a reproducible BIOS+UEFI ISO and pairs with a Next.js cloud manager to provision, monitor and remotely control the device fleet.

eSparks IT Solutions built a browser-operated data platform for planning, running, monitoring, and validating real-time migrations between heterogeneous databases. Five relational engines (SQL Server, PostgreSQL, MySQL, Oracle, Db2) migrate in either direction; MongoDB is supported as a CDC source. Its Java 21 and Spring Boot 3 control plane orchestrates jobs, while a React interface supports operation through the browser. For real-time CDC, the data plane uses Debezium, Kafka, and a JDBC sink, with PostgreSQL in the stack and deployment via Docker Compose or Kubernetes (Strimzi). The platform includes end-to-end integrity validation with drift detection, custom Java SMTs, AES-GCM secret encryption, Prometheus/Grafana, and JWT/RBAC security. SQL Server, PostgreSQL, MySQL and MongoDB migrations are live-verified end-to-end — including a production programme that moved roughly 960 million rows across 405 tables from SQL Server to PostgreSQL with zero rows missing at validation; Oracle and Db2 connectors are implemented and tested at the unit/config level, pending live verification.
Sparks Business is a multi-tenant platform built by eSparks IT Solutions to run inventory, purchases, sales and GST invoicing from one system. It pairs a NestJS 11 API with an installable Next.js 15 PWA, backed by PostgreSQL 17 through Prisma 6 across 49 data models. Every query is scoped to its tenant through an AsyncLocalStorage-driven Prisma client extension, and an append-only audit table is enforced at the database level — even a direct update or delete against it is rejected by a trigger. GST math (CGST/SGST/IGST splitting, GSTIN validation) runs on decimal.js for exact, rounding-free results, and a real Tally XML importer lets a business bring in existing ledgers, vouchers and stock items instead of starting over. Redis and BullMQ handle background email and document generation, S3-compatible object storage holds product images, invoice PDFs and backups, and Microsoft Graph sends transactional email. Deploys are health-gated, so a broken build never reaches production.