| name | customer-feedback-sync |
| description | Sync customer tracking data from the local HTML interest tracker to the shared Google Sheet via the rhai-tracker MCP. Use when the user says "sync the tracker", "push to the sheet", "update the shared tracker", "sync customers to gdrive", "compare local vs remote tracker", "diff the trackers", or wants to review what's changed between the local HTML tracker and the team's centralized Google Sheet. Also use when the user has updated the local HTML tracker and wants those changes reflected in the shared sheet, or when they want to see which customers are in one tracker but not the other. |
Customer Feedback Sync
Compares the local HTML customer interest tracker against the shared Google Sheet (rhai-tracker MCP) and pushes new or updated customer data from local to remote.
Data Sources
- Local:
rhoai-restricted/customer-feedback/customer-interest-tracker.html — static HTML file with interest matrices, customer details, themes, and action items
- Remote: Google Sheet
1Mquc6DUWbtcFisCLDeVMsiPbpeVi-zbIwd4PGGH07mY — centralized team tracker using rhai-tracker MCP schema
Prerequisites
rhai-tracker MCP server connected (provides list_interactions, batch_import_interactions, etc.)
google-workspace MCP server connected (for reading sheet values directly if needed)
- Local HTML tracker exists at the path above
Workflow
Phase 1: Read Both Sources
-
Read the local HTML tracker — parse all customer rows from:
- Interest Matrix (
<tbody> rows with 20 capability columns)
- Extended Interest Areas (7 more columns)
- Customer Detail & Key Requirements (contacts, status, timeline, requirements, meetings)
- Cross-Customer Themes
- Open Action Items
-
Read the remote sheet — use list_interactions filtered to the target component (default: Agentic) to get all existing rows. This returns the rhai-tracker schema: customerCompany, contactName, fieldContactName, industryVertical, geo, customerType, mainAIUseCase, toolsOfChoice, environment, painPoints, featureFeedback, futureWishlist, pmComments, status.
Phase 2: Diff
Compare the two datasets by customerCompany name. Produce three categories:
| Category | Meaning |
|---|
| New | In local tracker but not in remote sheet (for this component) |
| Updated | In both, but local has newer/richer data |
| Remote-only | In remote sheet but not in local tracker (flag, don't delete) |
For Updated detection, compare these fields and flag when local has more content:
- contactName / fieldContactName — local has names not in remote
- painPoints — local has requirements not captured in remote
- featureFeedback — local has feedback not in remote
- futureWishlist — local has items not in remote list
- pmComments — local has meeting notes or context not in remote
- status — local status is different from remote
When detecting updates, the comparison is directional — local is the source of truth for MCP/agentic customer data. If local has more content than remote, that's an update. If remote has content that local doesn't, that's fine (another PM may have added it). The batch_import_interactions upsert merges on customerCompany + component, so pushing an update won't erase fields that only exist in the remote.
For text fields (painPoints, featureFeedback, pmComments), do a substring check — if the remote already contains the local text (or vice versa), it's not a meaningful update. Only flag changes where the local has substantively new information.
Phase 3: Present Diff to User
Show a clear summary table:
## Sync Summary: Local → Sheet (Agentic)
### New Customers (3)
| Customer | Industry | Status | Key Interests |
|----------|----------|--------|---------------|
| Dell | Mfg | Eval | MCP Registry, Zero Trust, Sandboxing |
| ... | ... | ... | ... |
### Updated Customers (2)
| Customer | Changed Fields | Details |
|----------|---------------|---------|
| Verizon | pmComments, painPoints | New meeting notes from 2026-06-08 |
| ... | ... | ... |
### Remote-Only (not in local tracker) (1)
| Customer | Component | Notes |
|----------|-----------|-------|
| Goldman | Agentic | May be tracked by another PM |
Ask the user: "Push all new/updated customers to the sheet? Or select specific ones?"
Phase 4: Push Approved Changes
Use batch_import_interactions with defaultComponent set to the target component. The MCP does upsert — it matches on customerCompany + component and merges, so existing data won't be lost.
Field Mapping: HTML → rhai-tracker
This is the core transformation. For each customer row in the HTML tracker:
| rhai-tracker Field | Source in HTML |
|---|
customerCompany | Customer name from first <td> (e.g., "Dell", "Brightly (Siemens)") |
contactName | <span class="client-detail"> text from Interest Matrix row |
fieldContactName | <span class="client-detail"> text from Customer Detail row (the "Account:" line) |
industryVertical | Infer from context or <span class="client-detail"> (map to enum — see below) |
geo | Infer from customer context (default NA for US companies, APAC for NZ/AU, EMEA for EU) |
customerType | Default "SSA" unless context says otherwise |
mainAIUseCase | Synthesize from Key Requirements — the 1-2 line summary of what they want |
toolsOfChoice | Extract tool/product names mentioned in requirements (Devon, Windsurf, Konveyor, etc.) |
environment | Infer if mentioned (air-gapped, GCP, AWS, Azure, on-prem) |
painPoints | Blockers, concerns, and problems from Key Requirements bullets |
featureFeedback | Capability interests with interest levels from the Interest Matrix (critical/primary areas) |
futureWishlist | Wishlist items — features they want that don't exist yet |
pmComments | Status/Timeline text + Meeting list + Action Items for this customer |
status | Map HTML tag → rhai-tracker status (see below) |
Status Mapping
| HTML Tag | rhai-tracker Status |
|---|
PROD | Evaluating |
PoC | Evaluating |
ENGAGED | Discovery |
EVAL (with substantive detail) | Evaluating |
EVAL (minimal context) | Lead |
Industry Mapping
| Context Clues | industryVertical |
|---|
| Bank, financial services, trading | Banking & Financial Services |
| Telco, carrier, network, 5G | Telco |
| Defense, aerospace, military, government | Federal |
| Manufacturing, hardware, facility mgmt | Manufacturing |
| Insurance, healthcare, pharma | Insurance & Healthcare |
| Retail, e-commerce | Retail |
| Media, entertainment, streaming | Media & Entertainment |
| University, research, education | Research & Education |
| Energy, utilities, oil & gas | Energy & Utilities |
Interest Level Symbols
When building featureFeedback, translate HTML symbols into readable text:
★ (★) → "(critical)" — blocking requirement
● (●) → "(primary)" — active requirement
○ (○) → "(secondary)" — mentioned interest
— (—) → omit — not discussed
Include only areas where the customer showed primary or critical interest. Secondary interests can go into futureWishlist if they represent future wants.
Component Selection
Default to Agentic for customers tracked in this HTML file (MCP/agentic use cases). If the user specifies a different component, use that instead. The valid components are:
- Project Navigator
- AutoX
- AI Platform
- D2MA
- Agentic
- Inferencing
If a customer's interests clearly span multiple components (e.g., AT&T has Inferencing interests alongside Agentic), note this in pmComments but only create one row per sync under the target component. The user can run a second sync for a different component if needed.
Error Handling
- If the local HTML tracker doesn't exist, tell the user and suggest using
customer-feedback-ingest to create it first
- If the rhai-tracker MCP isn't connected, fall back to
google-workspace MCP's read_sheet_values for reading and modify_sheet_values for writing (use the sheet ID above)
- If a customer name in the sheet has a slight variant (e.g., "Westpac" vs "Westpac (NZ)"), flag it for the user to confirm whether they're the same customer
Example Interaction
User: sync the tracker to the sheet
Claude: [Reads local HTML tracker — finds 9 customers]
[Reads remote sheet via list_interactions(component=Agentic) — finds 5 customers]
[Presents diff:]
## Sync Summary: Local → Sheet (Agentic)
### New Customers (4)
| Customer | Industry | Status |
|----------|----------|--------|
| Dell | Mfg | Evaluating |
| AT&T | Telco | Discovery |
| Brightly | Mfg | Discovery |
| Westpac | Banking | Discovery |
### Updated Customers (2)
| Customer | Changed Fields |
|----------|---------------|
| Verizon | New meeting notes |
Push all 6 changes? Or select specific ones?
User: push all
Claude: [Calls batch_import_interactions with 6 customers, defaultComponent=Agentic]
Done — 4 created, 2 updated.