Salesight scores every sales call against your own script
Salesight is AI software that scores recorded sales calls against your team's own script. Managers get coaching points for each sales representative (rep) without listening to the recordings.
CreditBuilt with Ante Digital (Canada). Our founder is the lead developer.
The product
What a manager sees in Salesight



About Salesight
Managers rely on sales calls to win business, but can listen to very few of them.
Salesight serves coaching programmes, agencies and business-to-business service firms that sell higher-priced offers on calls. Reps use Fathom or Fireflies, tools that record calls and turn speech into written transcripts. Each team supplies its own playbook: the script and guidance reps should follow.
- Product
- SalesightAI call review for teams selling higher-priced offers
- Industry
- Coaching and education programmes, agencies, business-to-business services
- How they sell
- Sales calls for higher-priced offers, 3 to 50 sales representatives
- Build time
- About 3 weeks to a first working version, then 9 months of further building
The problem
Managers cannot review most sales calls
Most calls go unheard
A manager can listen to a handful of calls a week. Hiring someone just to review calls costs too much for a small team.
Feedback feels random
Feedback is based on whichever call the manager happened to pick, so it feels random to the rep.
Repeated objections go unnoticed
Reps hear the same objections, like “it's too expensive” or “I need to think”, and nobody sees the pattern.
Problems show up too late
Managers may only notice a rep's falling performance after the month ends, when it is too late to help that month.
What we built
Salesight reviews calls using the team's own script
Your playbook becomes the scorecard
The manager adds the script and offer details. Salesight turns them into sections and criteria, then scores every call against them, offer by offer.
Calls arrive on their own
Each rep connects Fathom or Fireflies, or uses a personal link to send call transcripts from any other tool. Past calls can be imported.
Each call gets scores and coaching points
Each call gets a 0–100 score and a score for each section. The review lists objections and the rep’s answers. Each missed requirement links to the moment in the call and a way to improve.
Managers can track each rep's progress
Managers see how scores change and which sections each rep keeps missing. The view also shows streaks and badges.
Managers get summaries in Slack, Discord or email
Slack, Discord or email receives a daily or instant summary of calls reviewed, average scores, coaching needs and common objections. Weekly reports show the patterns.
Control and safety
The manager decides what “good” means.
The scorecard comes from the team's own playbook. Every change is saved as a new version, so old calls keep the scorecard they were scored against.
- People see only what they should. Reps see their own calls. Managers see the companies they are assigned to. Admins see everything.
- The AI does not decide what happens next. Coaching actions (rolling out) are created only when the manager asks, using four fixed rules.
- Each team has its own spending cap. Every team has a separate workspace and a monthly limit on AI spending. One team's usage does not reduce another team's budget.
- Failures are recorded and retried. Each failure is logged with a reference number, and a failed review is tried again. Internal meetings excluded from scoring stay visible; this feature is rolling out.
For technical readers
How the system works
A call transcript (the written text of the call) arrives from a recorder or a personal link. The server removes duplicates and queues a review that finds relevant playbook passages and scores each call section using AI. It saves the review and sends a summary to Slack, Discord or email.
Dashed lines show supporting connections, or parts that are paused or not yet built.
In more detail
Technology used (11 parts)Each part of the system, and why it was chosen.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Screens | Next.js 16 (App Router), React 19, Tailwind CSS 4, shadcn/Radix, English and German | Dashboards are rendered on the server so they load fast, and shared components keep screens consistent. |
| Software connections (API) | Hono with oRPC, Zod validation | Data types are checked from screen to database, and the API documentation is generated automatically. |
| Database | PostgreSQL on Supabase, Prisma 7, pgvector | One database holds the app data and the playbook search index. 80 data models, 72 migrations. |
| AI models | Gemini 3 Flash via OpenRouter for scoring, OpenAI text-embedding-3-small for playbook search | Flash is cheap enough to score every call. Structured output keeps scores readable by software. |
| Background jobs | Trigger.dev v4 | Reviews, hourly checks, summaries and history imports run outside the web request, with retries. |
| Integrations | Nango (account connections through OAuth) for Fathom, Fireflies and Slack; Discord webhooks (automatic messages); Resend email | Each rep connects their own account. Stored connection credentials are encrypted. |
| Billing | Stripe: tiers, extra seats, credit packs, a credit ledger, 7-day trials | Plans include user seats, monthly analysis hours and playbooks. A usage record tracks every credit spent. |
| Sign-in | Better Auth: organisations, roles, email-link and social sign-in, required email verification | Rep, manager and admin roles decide what each person can see. |
| Hosting | Vercel for the app, Trigger.dev cloud for jobs | Managed hosting keeps day-to-day running light for a small team. |
| Monitoring | Sentry (errors), Axiom (logs), PostHog (product analytics) | One request number links an error, its logs and the user's steps. |
| Testing | Vitest, Playwright, MSW, PGlite, GitHub Actions | Tests check individual functions, recorder connections in the browser, and simultaneous writes to a real database. |
5 engineering decisions that matteredThe problem, what was done, and what it changed.
Generic scoring does not fit every offer
The playbook is split into passages of about 1,000 characters, each stored with a numeric representation of its meaning (a 1,536-dimension vector in pgvector). For each call, the 7 closest passages are retrieved.
ResultEach team is judged on its own script. Scorecard changes are versioned, so old calls keep the version they were scored against.
One shared AI key hides who spends what
Every team gets its own AI key with a monthly cap. The key is created at sign-up and switched off when the subscription ends. If the key service is down at sign-up, the account is still created and the key is added later. Users see only a plain “monthly limit reached” message.
ResultEach team has a separate cost limit, which helps control the margin on each plan.
Reviews must not depend on one queue
A review job gets 3 attempts, with longer waits between them, and a 5-minute limit stops stuck jobs. Where the queue is not set up, the same review runs straight away. A final-failure step records the failure and raises an alert, and an hourly check fetches Fathom meetings that never arrived.
ResultA missed message from Fathom is picked up by the hourly check.
AI should not invent corrections (rolling out)
A rep's answer is checked only against an approved answer from the team's own library. The check has a 20-second timeout and a 64 KiB limit on the prompt sent to the model. When the match or the speaker is unclear, no correction is given.
ResultCoaching uses the team's approved guidance.
Internal meetings waste credits (rolling out)
A two-step check looks at the invite list (every attendee from the same company) and asks the model how sure it is, needing at least 80 out of 100. Held meetings stay visible and cost nothing, and the manager can click “Analyze anyway”.
ResultInternal team meetings do not affect sales-call scores.
Testing and build recordHow it was tested, and the build by the numbers.
Quality and reliability
- 323 automated test files with more than 2,400 test cases across unit and integration suites (Vitest), 57 Playwright browser specs, and stand-ins (MSW) for outside services.
- Stand-in recorder servers replace Fathom, Fireflies and Nango, so browser tests click “Import history” against a real backend and catch stuck imports.
- Integration tests run every database migration in an in-process Postgres (PGlite). A separate GitHub Actions job checks simultaneous writes against a throwaway PostgreSQL database.
- One release command (verify:release) runs formatting, lint, type checks, unit, integration, build and end-to-end tests. Biome checks every pull request. Before a pricing change ships, a script compares the Stripe prices with the pricing table.
- Duplicates are blocked: transcripts are matched by source ID, a setup link works only once, and a second click does not repeat a coaching action.
- Teams are kept apart: every query is limited to one team, the browser cannot reach the database directly, and connection secrets are encrypted at rest.
By the numbers (build)
- 1,669 commits across 124 working days, 7 January to 30 September 2026.
- About 3 weeks from first commit to Fathom and Fireflies intake.
- 13 packages in a Turborepo monorepo, plus the web app, with more than 25 background job files.
- 80 database models, 72 migrations, 34 enums.
- 3 transcript sources, 3 delivery channels, plus jobs that update customer records in a CRM (customer management system).
Is it a fit?
Could this work for your team?
- You sell higher-priced offers on recorded calls, and your reps use Fathom or Fireflies. This includes coaching, education, agencies and business-to-business services.
- You have 3 to 50 reps and cannot listen to most of their calls.
- You already have a script or offer outline that says what a good call sounds like. Salesight turns it into your scorecard.
- You run an agency and want call review for your own clients. We can build a version you sell under your own name.
Discuss call review for your sales team
Conducted by Apurva · Not a sales call