Customer evidence search tool that surfaces relevant signals from Zendesk tickets, Gong calls, Jira issues, and Salesforce tasks — ranked by intent relevance, customer ARR, recency, and source type.
PMs deal with thousands of customer artifacts spread across support tickets, sales calls, engineering issues, and CRM tasks. Compass lets you describe a feature or pain point in plain language and instantly surfaces the most relevant evidence, ranked by a composite score that weighs intent match, customer value, recency, and source priority.
┌─────────────────────────────────┐
│ Next.js Frontend (port 3000) │
│ React 19 · TypeScript · Tailwind│
└──────────────┬──────────────────┘
│ POST /api/search
┌──────────────▼──────────────────┐
│ Flask API (port 5001) │
│ 1. Expand query → AI keywords │
│ 2. Parallel BigQuery search │
│ 3. LLM intent scoring (Gemini) │
│ 4. ARR enrichment + composite │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ Google BigQuery │
│ Zendesk · Gong · Jira · SFDC │
└─────────────────────────────────┘
Each result gets a composite score (0-10) from four components:
| Component | Default Weight | What it measures |
|---|---|---|
| Relevance | 50% | LLM-evaluated intent match (Gemini 2.0 Flash) |
| ARR | 25% | Customer annual recurring revenue (log-scaled) |
| Recency | 15% | How recently the evidence was created (linear decay) |
| Source | 10% | Source type priority (Zendesk > Gong > Salesforce > Jira) |
All weights and parameters are user-configurable via the inline Scoring panel.
- Natural language search — describe a feature or pain point, AI expands into search terms
- Multi-source — queries Zendesk, Gong, Jira, and Salesforce in parallel
- Intent scoring — Gemini evaluates each result for semantic relevance (not just keyword match)
- Custom scoring — adjust weights, source priorities, recency window, and ARR scaling per search
- Network graph — visualize evidence clusters by customer with force-directed layout
- Service filtering — hard-filter results to a specific connector (e.g. "pendo", "hubspot")
- Search history — recent searches saved locally with replay
- Feedback loop — thumbs up/down on results for future improvement
- Claude Code skill —
/evidencecommand for CLI-based search
- Node.js 18+
- Python 3.9+
- Google Cloud project with BigQuery access
- Vertex AI API enabled (for Gemini)
cd api
pip install -r requirements.txt
python server.pyRuns on http://localhost:5001. Requires GCP credentials configured (gcloud auth application-default login).
npm install
npm run devRuns on http://localhost:3000.
Type /evidence in Claude Code followed by your query:
/evidence customers struggling with schema changes
/evidence pendo lookback feature --service pendo
Requires the API server to be running on port 5001.
├── api/
│ ├── server.py # Flask API endpoints
│ ├── bq_queries.py # BigQuery search queries
│ ├── llm.py # Vertex AI search expansion + scoring
│ ├── enrichment.py # ARR enrichment + composite scoring
│ └── config.py # Project constants
├── src/
│ ├── app/
│ │ ├── page.tsx # Main search page
│ │ └── layout.tsx # App layout
│ ├── components/
│ │ ├── EvidenceCard.tsx # Result card with score, rationale, feedback
│ │ ├── EvidenceGraph.tsx # Force-directed network graph (Canvas)
│ │ ├── ScoringConfig.tsx # Custom scoring panel
│ │ ├── SearchInput.tsx # Search bar with service filter
│ │ ├── ResultsToolbar.tsx # Source tabs, min score, sort
│ │ ├── JiraMock.tsx # Jira extension mockup
│ │ └── ChromeMock.tsx # Chrome extension mockup
│ └── hooks/
│ ├── useScoringConfig.ts # Scoring state + localStorage
│ ├── useSearchHistory.ts # Search history persistence
│ └── useFeedback.ts # Result feedback tracking
├── presentation.html # Reveal.js slide deck
└── .claude/ # Claude Code skill definitions