Conversation Lenses
How Insights assembles SPICED, BANT, MEDDIC, MAP, and team-specific perspectives so product, engineering, and GTM stay aligned on every interview.
Each lens is a structured snapshot of the interview. Think of it as a page in the deal playbook — a concise key takeaway, the supporting notes, and the evidence you can drill into when someone asks “where did that come from?”
Sales frameworks
- SPICEDSituation, Pain, Impact, Critical Event, Decision
- BANT / GPCTBudget, Authority, Need, Timeline / Goals, Plans, Challenges
- MEDDICMetrics, Economic Buyer, Decision Criteria & Process, Identify Pain, Champion
- MAPMutual action plan milestones, owners, and due dates
Team lenses
- Engineering Impactintegration work, API gaps, tech debt
- Customer Servicesupport expectations and service risks
- Pessimisticopen objections, blockers, worst-case scenarios
These lenses pull from empathy maps, open questions, and interview notes so non-sellers can see what matters without digging through the transcript.
When an interview finishes processing, Trigger.dev runs buildInitialSalesLensExtraction (app/utils/salesLens.server.ts). That task reads evidence, attendees, and observations, then persists the structured snapshot into the sales_lens_* tables:
- sales_lens_summaries – one row per framework with top-level metadata, attendee list, and hygiene flags.
- sales_lens_slots – the individual fields (Budget status, Champion, Timeline, etc.) with text, confidence, owners, and linked evidence.
- sales_lens_stakeholders – the people and influence labels resolved from the call.
- sales_lens_hygiene_events – gaps and alerts (missing owner, stale evidence) that show up as hygiene badges in the UI.
The new team-focused lenses load their defaults from interview context (high impact themes, empathy map signals, open questions) and store edits inside interviews.conversation_analysis → custom_lenses (same JSON blob that powers AI takeaways).
- Hover a lens header and click the inline text to edit the key takeaway. The editor updates the
custom_lenses.[lensId].summaryfield and saves throughPOST /api/update-lens. - The notes panel underneath each lens writes to
custom_lenses.[lensId].notes. These notes always win over auto-generated defaults. - The rest of the table (slots, stakeholders, hygiene) still comes from Supabase. When the AI reruns, new slot values appear but your manual lens notes remain intact.
Tip
If you want to version-control overrides, export the conversation_analysis.custom_lenses JSON — it is a lightweight, human-readable map of your manual tweaks.
- 1. Processing finishes. Trigger.dev writes new rows into the
sales_lens_*tables. - 2. Loader combines data.
loadInterviewSalesLensreads Supabase, merges hygiene, stakeholders, and slots, then the Remix loader augments it withconversation_analysis.custom_lenses. - 3. UI renders accordions.
SalesLensesSectiondisplays each lens with inline editing, highlight pills, and the slot table. - 4. Manual edits. Inline edits call
/api/update-lens, which updates the JSON column only — the AI can safely refresh without wiping human input.