commit d5c77543e8c8b1863198e73d106d4fa692149dad Author: Chris Olson Date: Thu Sep 24 11:48:42 2026 -0400 Initial commit: Converge portfolio rationalization app Next.js app for mapping a customer's competitive tool landscape onto our portfolio and building the consolidation business case: assessment workbench, customer report and Word export, product catalog, competitive knowledge base, dossier import, shareable landscape questionnaires with a review inbox, tool-footprint and business-unit value analysis, and an implementation timeline. Co-Authored-By: Claude Opus 5.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25c46e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +node_modules +.next +out +*.tsbuildinfo +next-env.d.ts +.DS_Store +.run/ +.test-build/ +*.tmp diff --git a/data/assessments/guidewell.json b/data/assessments/guidewell.json new file mode 100644 index 0000000..9a6740f --- /dev/null +++ b/data/assessments/guidewell.json @@ -0,0 +1,1092 @@ +{ + "id": "guidewell", + "version": 1, + "customerName": "Guidewell", + "industry": "Health Care Equipment & Services", + "preparedBy": "", + "preparedFor": "", + "opportunityRef": "", + "executiveSummary": "", + "horizonYears": 3, + "weights": { + "capability": 35, + "switchEase": 25, + "timeToRoi": 25, + "spend": 15 + }, + "candidates": [ + { + "id": "c-muekmwo0-p3bry", + "incumbentVendor": "IBM", + "incumbentProduct": "RACF", + "domain": "mf-security", + "productIds": [ + "msd-acf2", + "msd-top-secret" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-hptfr", + "incumbentVendor": "Proofpoint", + "incumbentProduct": "Email Protection", + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "annualSpend": 250000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-9ewt3", + "incumbentVendor": "Okta", + "incumbentProduct": "Workforce Identity", + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "annualSpend": 1500000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-5qky9", + "incumbentVendor": "CyberArk", + "incumbentProduct": "PAM", + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "annualSpend": 1000000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-1zlfi", + "incumbentVendor": "Forcepoint", + "incumbentProduct": "DLP", + "domain": "data-sec", + "productIds": [ + "esg-dlp-core" + ], + "annualSpend": 750000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-mqnt0", + "incumbentVendor": "Zscaler", + "incumbentProduct": "Internet Access", + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "annualSpend": 1250000, + "units": 0, + "unitLabel": "users", + "renewalDate": "", + "capability": 4, + "switchEase": 2, + "timeToRoiMonths": 16, + "savingsPct": 45, + "migrationCost": 280000, + "strategicValue": 3, + "risks": "PAC file and certificate rollout across 24k endpoints and 60 branch sites.", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-0onwj", + "incumbentVendor": "Apigee", + "incumbentProduct": "(Google)", + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "annualSpend": 750000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-74d3q", + "incumbentVendor": "BMC", + "incumbentProduct": "Control-M", + "domain": "wla", + "productIds": [ + "aod-automic", + "aod-autosys" + ], + "annualSpend": 1500000, + "units": 0, + "unitLabel": "jobs/day", + "renewalDate": "", + "capability": 5, + "switchEase": 1, + "timeToRoiMonths": 12, + "savingsPct": 65, + "migrationCost": 190000, + "strategicValue": 3, + "risks": "Batch calendar conversion over a single quarter-end freeze window.", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-7sw2r", + "incumbentVendor": "Planview", + "incumbentProduct": "AgilePlace", + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "annualSpend": 2000000, + "units": 0, + "unitLabel": "", + "renewalDate": "2027-05-31", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwo0-u9cpw", + "incumbentVendor": "Delphix", + "incumbentProduct": "", + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "annualSpend": 750000, + "units": 0, + "unitLabel": "", + "renewalDate": "2027-06-30", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-fvbfn", + "incumbentVendor": "Rancher", + "incumbentProduct": "", + "domain": "app-platform", + "productIds": [ + "vcf-vks" + ], + "annualSpend": 550000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-eh34y", + "incumbentVendor": "SolarWinds", + "incumbentProduct": "", + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "annualSpend": 125000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-i3jxb", + "incumbentVendor": "LogicMonitor", + "incumbentProduct": "", + "domain": "observability", + "productIds": [ + "aod-dx-uim" + ], + "annualSpend": 250000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-nhcfy", + "incumbentVendor": "Dynatrace", + "incumbentProduct": "", + "domain": "observability", + "productIds": [ + "aod-dx-apm" + ], + "annualSpend": 2300000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-dodhr", + "incumbentVendor": "Datadog", + "incumbentProduct": "", + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "annualSpend": 1250000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-86c14", + "incumbentVendor": "Cisco", + "incumbentProduct": "ThousandEyes + Nexus Dashboard", + "domain": "observability", + "productIds": [ + "aod-net-observability" + ], + "annualSpend": 250000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-k4jd8", + "incumbentVendor": "Splunk", + "incumbentProduct": "Enterprise", + "domain": "observability", + "productIds": [ + "vcf-ops-logs", + "aod-dx-oi" + ], + "annualSpend": 2250000, + "units": 0, + "unitLabel": "GB/day", + "renewalDate": "", + "capability": 3, + "switchEase": 2, + "timeToRoiMonths": 18, + "savingsPct": 45, + "migrationCost": 480000, + "strategicValue": 3, + "risks": "SOC dashboards and 300+ saved searches must be rebuilt. Security team sign-off required.", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-cf4a5", + "incumbentVendor": "Puppet", + "incumbentProduct": "Enterprise", + "domain": "cloud-mgmt", + "productIds": [ + "tz-salt" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-qwqba", + "incumbentVendor": "Chef", + "incumbentProduct": "", + "domain": "cloud-mgmt", + "productIds": [ + "tz-salt" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-43w4j", + "incumbentVendor": "Cohesity", + "incumbentProduct": "", + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "annualSpend": 450000, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-gywdx", + "incumbentVendor": "F5", + "incumbentProduct": "BIG-IP", + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-snnoe", + "incumbentVendor": "NetApp/Pure", + "incumbentProduct": "external arrays", + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-gnxqt", + "incumbentVendor": "Dell", + "incumbentProduct": "PowerFlex", + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-y3wmt", + "incumbentVendor": "Nutanix", + "incumbentProduct": "Distributed Storage", + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-4872y", + "incumbentVendor": "Nutanix", + "incumbentProduct": "AHV", + "domain": "compute", + "productIds": [ + "vcf-vvf", + "vcf-vsphere" + ], + "annualSpend": 100000, + "units": 0, + "unitLabel": "", + "renewalDate": "2027-06-30", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwnz-hpdnq", + "incumbentVendor": "Red Hat", + "incumbentProduct": "OpenShift Telco", + "domain": "private-cloud", + "productIds": [ + "vcf-telco" + ], + "annualSpend": 500000, + "units": 0, + "unitLabel": "", + "renewalDate": "2027-03-31", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwny-4a31v", + "incumbentVendor": "Microsoft", + "incumbentProduct": "Azure Local", + "domain": "private-cloud", + "productIds": [ + "vcf-foundation" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-muekmwny-8ume9", + "incumbentVendor": "Nutanix", + "incumbentProduct": "Cloud Platform", + "domain": "private-cloud", + "productIds": [ + "vcf-foundation", + "vcf-vsan" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "nodes", + "renewalDate": "", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 8, + "savingsPct": 30, + "migrationCost": 400000, + "strategicValue": 3, + "risks": "AHV to ESXi conversion for 900 VMs; requires a rolling maintenance plan.", + "notes": "From questionnaire — John Doe, AD, Sep 23, 2026", + "included": true + }, + { + "id": "c-mue8670f-dkmq4", + "incumbentVendor": "SailPoint", + "incumbentProduct": "IdentityIQ", + "domain": "iam", + "productIds": [ + "esg-iga", + "esg-agentminder" + ], + "annualSpend": 1500000, + "units": 45000, + "unitLabel": "identities", + "renewalDate": "2026-12-31", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 14, + "savingsPct": 25, + "migrationCost": 350000, + "strategicValue": 3, + "risks": "Access certification campaigns must not lapse during cutover.", + "notes": "", + "included": true + }, + { + "id": "c-mue85gib-lust3", + "incumbentVendor": "F5", + "incumbentProduct": "BIG-IP LTM", + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "annualSpend": 1200000, + "units": 350, + "unitLabel": "", + "renewalDate": "", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "strategicValue": 3, + "risks": "iRules migration needs an audit; 6 legacy apps use custom TCL.", + "notes": "From account dossier — Load Balancer Vendor: F5", + "included": true + }, + { + "id": "c-mue85gia-y3ulu", + "incumbentVendor": "Cisco", + "incumbentProduct": "ACI", + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From account dossier — Network Vendor: Cisco", + "included": true + } + ], + "createdAt": "2026-09-23T14:53:09.178Z", + "updatedAt": "2026-09-23T21:02:11.240Z", + "accountIntel": { + "sourceUrl": "https://docs.google.com/document/d/1CK1jviElTaL1ZxT5ibA_XmLbIWquPxbrJ4ZQhUB12Kw/edit?usp=drivesdk", + "sourceTitle": "GUIDEWELL BLUE CROSS BLUE SHIELD OF FLORIDA — Strategic Account Dossier", + "importedAt": "2026-09-23T14:54:21.347Z", + "company": "GUIDEWELL BLUE CROSS BLUE SHIELD OF FLORIDA", + "industry": "Health Care Equipment & Services", + "classification": "Tier 1 / Strategic", + "accountStatus": "Active", + "sentiment": "Neutral", + "renewalTimeframe": "2028 Q 2", + "renewalRisk": "5", + "healthScore": "n/a/100", + "intelligenceScore": "98/100", + "tamValueScore": "39/100", + "vcf": [ + { + "label": "VCF Cores", + "value": "35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768 → 35768" + }, + { + "label": "VCF Version", + "value": "vSphere 8.x" + }, + { + "label": "VCF Cores Entitled", + "value": "35768" + }, + { + "label": "Cores by Version", + "value": "vSphere 8.x: 35768" + }, + { + "label": "Deployment Model", + "value": "Standard" + }, + { + "label": "VCF Path", + "value": "Brownfield" + }, + { + "label": "Adoption Stage", + "value": "No VCF Adoption" + }, + { + "label": "VCF 9 Plans", + "value": "VCF 9.1.x" + }, + { + "label": "VCF 9 Blockers", + "value": "No Blockers" + }, + { + "label": "VCF Value Assessment (Qualify) · Value Modeling · Owner", + "value": "Jarrett Keels" + }, + { + "label": "VCF 9.1 education sessions scheduled for 8 Jun", + "value": "Jarrett Keels and Aaron will meet with new leadership (Bob and Willie Anderson) to present the VCF platform strategy, focusing on hybrid cloud portability and cost rationalization." + }, + { + "label": "VCF 9 Session confirmed for today, 11 Aug at 2", + "value": "00 PM, focusing on cloud migration flexibility, workload portability, and Greenfield vs. Brownfield deployments." + } + ], + "infrastructure": [ + { + "label": "Compute Vendor", + "value": "HPE" + }, + { + "label": "Storage Platform", + "value": "Everpure (Pure)" + }, + { + "label": "Network Vendor", + "value": "Cisco" + }, + { + "label": "Firewall Vendor", + "value": "Zscaler" + }, + { + "label": "Load Balancer Vendor", + "value": "F5" + } + ], + "cloud": [ + { + "label": "Cloud Strategy", + "value": "Hybrid (Public+Private)" + }, + { + "label": "Primary Hyperscaler", + "value": "AWS, Azure" + }, + { + "label": "Workload Distribution", + "value": "25% Public Cloud, 50% Private Cloud, 25% Mainframe" + } + ], + "applications": [], + "consumption": [ + { + "product": "VSPHERE", + "entitled": 35768, + "deployed": 33400, + "adoption": "High" + }, + { + "product": "VSAN", + "entitled": 480, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "NSX", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VCF OPERATIONS", + "entitled": 10000, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VCF SDDC", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VCF AUTOMATION", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VKS", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "PRIVATE AI", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VMC or EVS", + "entitled": 0, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "AVI LOAD BALANCER", + "entitled": 0, + "deployed": 0, + "adoption": "" + }, + { + "product": "VDEFEND-DFW", + "entitled": 0, + "deployed": 0, + "adoption": "" + }, + { + "product": "VDEFEND-ATP", + "entitled": 0, + "deployed": 0, + "adoption": "" + }, + { + "product": "RALLY", + "entitled": 1500, + "deployed": 1255, + "adoption": "Partial" + }, + { + "product": "NETOPS", + "entitled": 8907, + "deployed": 8500, + "adoption": "Partial" + }, + { + "product": "SITEMINDER", + "entitled": 8513000, + "deployed": 6510000, + "adoption": "High" + }, + { + "product": "PAM", + "entitled": 10009, + "deployed": 5008, + "adoption": "Partial" + }, + { + "product": "OP OBSERVABILITY", + "entitled": 83751, + "deployed": 1501, + "adoption": "Shelfware" + }, + { + "product": "UIM", + "entitled": 6157, + "deployed": 4500, + "adoption": "High" + }, + { + "product": "MSD MF OBSERVABILITY", + "entitled": 5605, + "deployed": 0, + "adoption": "High" + }, + { + "product": "MSD DATA MGMT", + "entitled": 7847, + "deployed": 5605, + "adoption": "High" + }, + { + "product": "MSD DEVOPS APP DEV", + "entitled": 5605, + "deployed": 1121, + "adoption": "High" + }, + { + "product": "MF INFRASTRUCTURE PRODUCTS", + "entitled": 3363, + "deployed": 3363, + "adoption": "High" + } + ], + "deploymentRate": "76% (6574253 / 8691992)", + "narratives": [ + { + "heading": "Security Posture", + "body": "Subject to HIPAA, HITECH, Florida insurance regulations (OIR), CMS requirements. Health insurance is heavily regulated. No major known breaches but the volatile renewal status may involve security/compliance concerns. [WEB] Subject to HIPAA, state insurance regulations, ACA compliance. No known recent breaches. AI is never used to make denial decisions — manual validation of every AI-assisted decision by nurses, building trust for broader adoption." + }, + { + "heading": "App Count Discovered", + "body": "2" + }, + { + "heading": "New Apps (not in TD)", + "body": "[WEB] GuideWell Chat (internally-built GenAI employee tool) | Olive AI Prior Authorization Tool (first US payer to automate approvals)" + }, + { + "heading": "Org Contacts Found", + "body": "0" + }, + { + "heading": "Infra Confirmations", + "body": "HPE compute confirmed. OpenShift for containers confirmed. 80% public cloud confirmed by the aggressive cloud-first posture." + }, + { + "heading": "Infra Contradictions", + "body": "The 80% public cloud with only 5% private cloud is extreme for a health insurer handling PHI — suggests either aggressive modernization or that the 35K VCF cores serve a shrinking on-prem footprint. No storage, network, firewall, or LB vendors documented suggests significant data gaps or a minimal on-prem presence." + }, + { + "heading": "Data Validation Notes", + "body": "CRITICAL RISK. Renewal Risk 5, Volatile Renewal sentiment, Negative sponsors, yellow health, sponsor blocker for VCF 9 = the most at-risk health insurance account. The 80% cloud posture for a HIPAA-regulated entity is aggressive." + }, + { + "heading": "Tech Debt Signals", + "body": "Legacy health insurance claims systems. Mainframe at 15% for core claims processing. GuideWell subsidiary systems may be on separate infrastructure stacks." + }, + { + "heading": "Cloud Strategy Assessment", + "body": "80% public cloud is the highest ratio for any health insurance account in the portfolio. This extreme cloud adoption for a HIPAA-regulated entity suggests either a cloud-native modernization strategy or that most workloads are SaaS rather than IaaS. Only 5% private cloud means on-prem is minimal." + }, + { + "heading": "Cloud Strategic Partnerships", + "body": "No primary hyperscaler identified despite 80% cloud — may use multiple cloud providers or primarily SaaS solutions." + }, + { + "heading": "Cloud Repatriation Signals", + "body": "Unlikely. GuideWell is moving strongly toward cloud. The 35K core on-prem footprint is likely shrinking." + }, + { + "heading": "DevOps Platform Assessment", + "body": "OpenShift Pipelines for container CI/CD. Limited DevOps tooling documented." + }, + { + "heading": "AI Initiatives", + "body": "No AI usage or initiatives documented. Given the healthcare analytics opportunity, this suggests either early-stage planning or undocumented AI initiatives. [WEB] First US payer to automate prior authorization approvals using Olive AI clinical reviews tool. Pilot saw 10-day reduction in medical decision time and 27% decrease in unnecessary prior authorization requests. GuideWell Chat: internally-built regenerative AI tool for employee coding, writing, reports, summaries — significant time reduction and skill development. 80% member satisfaction rate with digital/AI-enabled tools." + }, + { + "heading": "Competitive Threats", + "body": "CRITICAL. Every indicator points to flight: Renewal Risk 5, Volatile Renewal, Negative exec and security sponsors, 80% cloud, yellow health, VCF 9 blocked by sponsor refusal. OpenShift for containers with no VMware container presence. This account may be in active migration planning." + }, + { + "heading": "Flight Risk Hiring Signals", + "body": "[{\"platform\":\"Cloud\",\"signal_type\":\"Migration\",\"evidence\":\"80% cloud adoption, aggressive migration\",\"risk\":\"Critical\"},{\"platform\":\"OpenShift\",\"signal_type\":\"Container Platform\",\"evidence\":\"OpenShift chosen over Tanzu\",\"risk\":\"High\"},{\"platform\":\"VMware\",\"signal_type\":\"Declining\",\"evidence\":\"Volatile renewal, no VCF 9 sponsor support\",\"risk\":\"Critical\"}]" + }, + { + "heading": "Flight Risk Migration Tracker", + "body": "[{\"from\":\"vSphere\",\"to\":\"Public Cloud\",\"evidence\":\"80% cloud, 5% private, Volatile Renewal, Negative sponsors\",\"confidence\":\"High\"}]" + }, + { + "heading": "Flight Risk Product Details", + "body": "[{\"product\":\"vSphere\",\"risk\":\"Critical\",\"competitor\":\"Cloud compute\",\"evidence\":\"80% cloud, volatile renewal, negative sponsors\"},{\"product\":\"vSAN\",\"risk\":\"Critical\",\"competitor\":\"Cloud storage\",\"evidence\":\"No storage vendor data, 5% private\"},{\"product\":\"NSX\",\"risk\":\"Critical\",\"competitor\":\"Cloud networking\",\"evidence\":\"No network vendor data\"},{\"product\":\"Tanzu\",\"risk\":\"Critical\",\"competitor\":\"OpenShift\",\"evidence\":\"OpenShift only, no VMware container presence\"}]" + }, + { + "heading": "Licensing Sentiment Detail", + "body": "Actively Seeking Alternatives. Volatile Renewal designation is the most severe renewal risk classification. Negative from exec AND security sponsors suggests fundamental relationship breakdown." + }, + { + "heading": "Regulatory Pressure", + "body": "[{\"framework\":\"HIPAA\",\"deadline\":\"Ongoing\",\"status\":\"Compliant\",\"gap\":\"PHI in public cloud\",\"opportunity\":\"ACC\"},{\"framework\":\"Florida OIR\",\"deadline\":\"Ongoing\",\"status\":\"Compliant\",\"opportunity\":\"ACC\"},{\"framework\":\"CMS\",\"deadline\":\"Ongoing\",\"status\":\"Compliant\",\"opportunity\":\"ACC\"}]" + }, + { + "heading": "Security Incidents", + "body": "[{\"date\": \"2021-06\", \"type\": \"Credential Stuffing\", \"description\": \"Brute force credential-stuffing attack on Florida Blue member portal. ~30,000 member accounts accessed using credentials from third-party breaches. Data accessed: names, contact info, claims, payment info, health insurance policy info. No evidence of data exfiltration confirmed.\", \"severity\": \"Medium\"}]" + }, + { + "heading": "Sales Campaign Intel", + "body": "RETENTION EMERGENCY. Must resolve the volatile renewal before any product conversation. The tech sponsor Jay Morgan (Somewhat Favorable) is the only non-hostile sponsor — he is the lifeline for this account. Any engagement must go through Morgan. The primary argument for retention is HIPAA compliance risk of moving PHI to cloud — but at 80% cloud they may have already addressed this." + }, + { + "heading": "Campaign Evidence", + "body": "{\"retention\":{\"competitive\":\"80% cloud, all sponsors negative\",\"priority\":\"Critical\"}}" + }, + { + "heading": "Broadcom Upsell Matrix", + "body": "RETENTION ONLY | Engage through Jay Morgan (only favorable sponsor) | ACC for HIPAA compliance as value proposition for remaining on-prem" + }, + { + "heading": "Gap Analysis", + "body": "CRITICAL: Must understand the root cause of Volatile Renewal. Is it pricing? Is it a service failure? Is it Broadcom acquisition related? Jay Morgan (Tech, Somewhat Favorable) is the only entry point. The 80% cloud with HIPAA workloads suggests GuideWell has already solved cloud compliance — removing a key VCF retention argument." + }, + { + "heading": "Source URLs", + "body": "guidewell.com | floridablue.com [WEB] bocaratontribune.com (GuideWell 2025 Impact Report) | floridablue.com/blog/how-florida-blue-prioritizes-safe-ai | techtarget.com (Florida Blue AI prior authorization) | prnewswire.com (GuideWell 2025 Impact Report)" + }, + { + "heading": "Hiring Trends Summary", + "body": "Cloud-first hiring. Health insurance technology modernization. Minimal traditional infrastructure roles." + }, + { + "heading": "Key Leadership Changes", + "body": "Brian Pieninck serves as President and CEO of GuideWell. Julia M. Brown appointed to Board of Directors. Technology leadership not publicly detailed but GuideWell investing heavily in AI and digital transformation." + }, + { + "heading": "IT Budget Signals", + "body": "$32.955B revenue 2024, added to Fortune 500 (#136). Revenue growth from $20B to $30B+ in two years. AI governance framework, GuideWell Chat (in-house gen AI), AI-powered prior authorization (80% automated). 360,000+ virtual assistant chats. Digital assistant since 2021 with 80% member satisfaction. CIO Gary Anderson." + }, + { + "heading": "SI Partners", + "body": "Amwell (BlueVirtualCare, effective Jan 2026) | Olive AI (prior authorization automation)" + }, + { + "heading": "Renewal Timing Signals", + "body": "BlueVirtualCare transitioning to Amwell platform Jan 1, 2026 (replacing Teladoc). Olive AI partnership for prior authorization. New CEO Brian Pieninck Aug 2025 — leadership transition may trigger vendor evaluation. Acquired Triple-S Management (Puerto Rico BCBS)." + }, + { + "heading": "Vendor Consolidation Intent", + "body": "In-house AI development — built GuideWell Chat internally so data never leaves org. Transitioning telehealth from Teladoc to Amwell. AI governance ensures all use cases reviewed. Focus on affordability through cost-saving tech. Integrated approach across multiple subsidiaries." + }, + { + "heading": "Industry Peer Signals", + "body": "Only 8 BCBS companies positive operating margins 2024 — GuideWell's Fortune 500 growth stands out. Healthcare private cloud: 84% use it, 62% building new workloads. Humana focused on Medicare Advantage. Cigna sold Medicare ops (Mar 2025). Florida Blue was first US payer to automate prior auth via AI." + }, + { + "heading": "Peer Platform Moves", + "body": "[{\"peer\":\"Humana\",\"platform\":\"Heavy Medicare Advantage focus\",\"evidence\":\"Industry reports\",\"relevance\":\"Health plan competitor with different strategy\"},{\"peer\":\"Cigna\",\"platform\":\"Sold Medicare operations to HCSC (Mar 2025)\",\"evidence\":\"Cigna announcement\",\"relevance\":\"Competitor restructuring, potential market shift\"},{\"peer\":\"Elevance Health\",\"platform\":\"Operating BCBS in 14 states\",\"evidence\":\"Industry reports\",\"relevance\":\"Largest BCBS operator, potential consolidation threat\"},{\"peer\":\"Healthcare sector\",\"platform\":\"92% trust private cloud for PHI compliance\",\"evidence\":\"VMware Healthcare 2025\",\"relevance\":\"Private cloud signal for healthcare\"}]" + }, + { + "heading": "Edge & IoT Strategy", + "body": "Livongo connected devices (blood glucose monitors) for members through Onlife Health. BlueVirtualCare telehealth via Amwell (Jan 2026). AI-powered digital assistant for member self-service. No large-scale edge infrastructure. Remote patient monitoring via third-party platforms." + }, + { + "heading": "Event & Conference Signals", + "body": "CEO Geraghty discussed AI in prior authorization with Modern Healthcare. Published 2024/2025 Impact Reports. Anne Hoverson VP Digital Transformation. HIMSS South Florida presence. New CEO Pieninck Aug 2025. WEF organization. No VMware Explore or AWS re:Invent." + }, + { + "heading": "Additional Account Fields", + "body": "Area: AM-SOUTHEAST EAR Tier: > $10M Est Annual Revenue: $32.9B (2024) Primary ERPs: 6015223, 6015223 Account Plan: https://docs.google.com/presentation/d/1R3k2A-_1RvcrX_u2weOCMIvRLGlc7wW9/edit Account Folder: https://drive.google.com/drive/folders/1d2eNXtTCs0ljsDAL7Boi57NzHnXqpQwy Account Website: guidewell.com VCF Entitled: No Exec Sponsorship Level: CIO-1 Broadcom Exec Sponsor Level: VP Last Engaged: 06/09/2026 Tech Sponsorship Level: CTO-2 Modern App Sponsor Level: CTO-2 Security Sponsor Level: CISO-2 Other Sponsor: Willie Anderson Other Sponsor Role: Principal Tech & Business Consultant Other Sponsor Sentiment: Advocate Cloud Strategy Comments: New CIO is cloud first but has not clarified private, public or hybrid --Heather Prediletto, 02/25/2026 VCF Telemetry: Not Collected TAM Artifact Folder: https://drive.google.com/drive/folders/12kpp8dmtLaOFxFGx-qhVmPktNEWBpBSS Datacenters: 2 Datacenter Cores: 35000 VCF Adoption Bottlenecks: Competing Priorities, Operational Maturity, Fragmented Tools Partner: NONE Container Platforms: OpenShift (Red Hat) App Platform Comments: Customer is currently evaluating Hyper-V, OpenShift and Nutanix as alternatives for VCF. After the last Broadcom renewal they are scared of staying on VMware. Production: Deployment Target Timeframe to VCF 9: FY27 Q1 Lab: Intended VCF 9 Version: VCF 9.0.x Lab: Deployment Target Timeframe to VCF 9: FY26 Q4 HW Blockers: No Blockers VCF 9 Enablement Activities: VCF 9 SA-Led Workshop, Hands On Lab Detailed 9.0 Software/Feature Gap: It's not a feature problem. Customer is working to get off of all Broadcom software due to 184% increase in CA renewal in March 2025. Refuses to evaluate VCF until they know what their renewal is going to look like VCF 9.x Comments: Currently evaluating OpenShift, Nutanix and Hyper-V as replacements for vSphere. Negotiating a \"what's new in VCF 9\" discussion pending approval. Update on 6/25/26: We have made great progress with Guidewell. We had our first VCF workshop on 6/8 and Executive to Executive meeting on 6/9. We had an architecture and PSO review on 6/15 and the next step is to have a VKS/Tanzu high level discussion with Ronak. We are also looking at a potential pull forward of the Mainframe and VCF --Heather Prediletto, 06/25/2026 Last Modified: 08/31/2026 Last Updated by: heather.prediletto@broadcom.com Generated 9/22/2026, 8:15:19 PM by TechDirector Living Dossier District: SE-SUNSHINE Source doc refreshed nightly by TechDirector; the Drive URL is stable, so this source never needs re-importing. Source counts — Apps: 30, Workstreams: 2, Activities: 43, Consumption rows: 49, PSO Projects: 0" + } + ] + } +} diff --git a/data/assessments/macy-s.json b/data/assessments/macy-s.json new file mode 100644 index 0000000..edcf7fb --- /dev/null +++ b/data/assessments/macy-s.json @@ -0,0 +1,418 @@ +{ + "id": "macy-s", + "version": 1, + "customerName": "Macy's", + "industry": "Retailing", + "preparedBy": "", + "preparedFor": "", + "opportunityRef": "", + "executiveSummary": "", + "horizonYears": 3, + "weights": { + "capability": 35, + "switchEase": 25, + "timeToRoi": 25, + "spend": 15 + }, + "candidates": [ + { + "id": "c-muea0k0k-g9e0z", + "incumbentVendor": "F5", + "incumbentProduct": "BIG-IP LTM", + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "strategicValue": 3, + "risks": "iRules migration needs an audit; 6 legacy apps use custom TCL.", + "notes": "From account dossier — Load Balancer Vendor: F5", + "included": true + }, + { + "id": "c-muea0k0k-cm854", + "incumbentVendor": "Cisco", + "incumbentProduct": "Secure Firewall", + "domain": "network-sec", + "productIds": [ + "ans-vdefend-gw" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From account dossier — Firewall Vendor: Cisco", + "included": true + }, + { + "id": "c-muea0k0k-fu2pl", + "incumbentVendor": "Cisco", + "incumbentProduct": "ACI", + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "annualSpend": 0, + "units": 0, + "unitLabel": "", + "renewalDate": "", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "strategicValue": 3, + "risks": "", + "notes": "From account dossier — Network Vendor: Cisco", + "included": true + } + ], + "createdAt": "2026-09-23T15:46:26.506Z", + "updatedAt": "2026-09-23T15:47:09.312Z", + "accountIntel": { + "sourceUrl": "https://docs.google.com/document/d/1BvYwjREVc5zw2EgIKdFmvQgNAHoz0FR68ver6wgIMTA/edit?usp=drivesdk", + "sourceTitle": "MACYS — Strategic Account Dossier", + "importedAt": "2026-09-23T15:46:40.492Z", + "company": "MACYS", + "industry": "Retailing", + "classification": "Tier 1 / Strategic", + "accountStatus": "Dormant", + "sentiment": "Negative (Legal)", + "renewalTimeframe": "2028 Q 3", + "renewalRisk": "2", + "healthScore": "n/a/100", + "intelligenceScore": "89/100", + "tamValueScore": "39/100", + "vcf": [ + { + "label": "VCF Cores", + "value": "27168 → 27168 → 27168 → 27168 → 27168 → 27168 → 27168 → 27168 → 27168 → 27168 → 16608 → 16608 → 16608" + }, + { + "label": "VCF Version", + "value": "VCF 9.1, vSphere 8.x, vSphere 7.x and below" + }, + { + "label": "VCF Cores Entitled", + "value": "16608" + }, + { + "label": "Cores by Version", + "value": "VCF 9.1: 128, vSphere 7.x and below: 3000, vSphere 8.x: 12544" + }, + { + "label": "Deployment Model", + "value": "Mix" + }, + { + "label": "VCF Path", + "value": "Brownfield" + }, + { + "label": "Adoption Stage", + "value": "Partial VCF Adoption" + }, + { + "label": "VCF 9 Plans", + "value": "VCF 9.1.x" + }, + { + "label": "VCF 9 Blockers", + "value": "Blocked - Hardware" + } + ], + "infrastructure": [ + { + "label": "Compute Vendor", + "value": "HPE" + }, + { + "label": "Storage Platform", + "value": "Everpure (Pure)" + }, + { + "label": "Network Vendor", + "value": "Cisco" + }, + { + "label": "Firewall Vendor", + "value": "Cisco" + }, + { + "label": "Load Balancer Vendor", + "value": "F5" + } + ], + "cloud": [ + { + "label": "Cloud Strategy", + "value": "Public Cloud First" + }, + { + "label": "Primary Hyperscaler", + "value": "GCP" + }, + { + "label": "Workload Distribution", + "value": "65% Public Cloud, 25% Private Cloud, 10% Mainframe" + } + ], + "applications": [], + "consumption": [ + { + "product": "VSPHERE", + "entitled": 16608, + "deployed": 15544, + "adoption": "High" + }, + { + "product": "VSAN", + "entitled": 16608, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "NSX", + "entitled": 16608, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VCF OPERATIONS", + "entitled": 16608, + "deployed": 15544, + "adoption": "Partial" + }, + { + "product": "VCF SDDC", + "entitled": 16608, + "deployed": 192, + "adoption": "Partial" + }, + { + "product": "VCF AUTOMATION", + "entitled": 16608, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "VKS", + "entitled": 16608, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "CLARITY", + "entitled": 4888, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "RALLY", + "entitled": 4800, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "CONNECTALL", + "entitled": 0, + "deployed": 800, + "adoption": "Shelfware" + }, + { + "product": "MSD MF OBSERVABILITY", + "entitled": 47900, + "deployed": 0, + "adoption": "Shelfware" + }, + { + "product": "MSD DATA MGMT", + "entitled": 19960, + "deployed": 0, + "adoption": "High" + }, + { + "product": "MSD DEVOPS APP DEV", + "entitled": 14970, + "deployed": 0, + "adoption": "Partial" + }, + { + "product": "MF INFRASTRUCTURE PRODUCTS", + "entitled": 12475, + "deployed": 0, + "adoption": "High" + } + ], + "deploymentRate": "14% (32080 / 221249)", + "narratives": [ + { + "heading": "Security Posture", + "body": "Subject to PCI-DSS for retail payments. SOX compliance. Macy's experienced a payment card breach in 2018 (online account compromise). The shift to GCP cloud-native architecture may partially be driven by security modernization post-breach. Cisco firewalls." + }, + { + "heading": "App Count Discovered", + "body": "2" + }, + { + "heading": "New Apps (not in TD)", + "body": "[WEB] In-House Warehouse Management Software (GCP-hosted, replacing legacy WMS) | Oracle E-Business Suite (EBS - enterprise platform, targeted in Cl0p breach)" + }, + { + "heading": "Org Contacts Found", + "body": "0" + }, + { + "heading": "Infra Confirmations", + "body": "GCP primary hyperscaler confirmed. HPE compute confirmed. Pure Storage confirmed. Cisco networking and firewalls confirmed. F5 confirmed." + }, + { + "heading": "Infra Contradictions", + "body": "VCF 'Not Deployed' status with 27K cores on vSphere-only suggests a bare vSphere environment that never adopted the full VCF stack. The GCP-first strategy at 65% public cloud may mean on-prem is actively shrinking. Store closures (150 by 2026) will further reduce on-prem footprint." + }, + { + "heading": "Data Validation Notes", + "body": "HIGHEST RISK ACCOUNT IN TIER 1. Negative sentiment at both exec and tech sponsor level + Legal designation + VCF Not Deployed + GCP-first migration = active churn risk. The 27K core on-prem footprint is likely in maintenance mode." + }, + { + "heading": "Tech Debt Signals", + "body": "Legacy department store systems. POS modernization ongoing with cloud-native architecture. Store closures reducing legacy infrastructure. Mainframe (10%) for financial and merchandising systems. [WEB] Oracle E-Business Suite (EBS) confirmed in technology stack — the specific platform targeted in Nov 2025 Cl0p breach. Legacy systems being migrated to GCP. In-house WMS development suggests replacing older warehouse systems." + }, + { + "heading": "Cloud Strategy Assessment", + "body": "GCP-dominant with 65% public cloud and growing. Anthos for hybrid management. Google Cloud Build for CI/CD. OSS K8s for non-Google container workloads. Macy's has been a Google Cloud retail showcase customer. The 25% private cloud is likely shrinking as stores close and workloads migrate." + }, + { + "heading": "Cloud Strategic Partnerships", + "body": "Google Cloud strategic partnership — Macy's is a GCP retail reference customer. Google Cloud presentations by Macy's technology leaders." + }, + { + "heading": "Cloud Repatriation Signals", + "body": "No repatriation signals — opposite trend. Macy's is actively migrating TO GCP." + }, + { + "heading": "Cloud Sustainability", + "body": "Cloud migration supports sustainability by reducing on-prem data center footprint. Store closures further reduce energy consumption." + }, + { + "heading": "DevOps Platform Assessment", + "body": "Google Cloud Build for GCP-native development. Ansible for configuration management. OpenShift Pipelines despite no OpenShift in container platforms — may be legacy or being phased out." + }, + { + "heading": "AI Initiatives", + "body": "Macy's uses AI for personalized marketing, demand forecasting, inventory optimization, dynamic pricing, and customer analytics. AI-powered styling recommendations in stores and online. Computer vision for store analytics. Heavy use of Google Cloud AI/ML services. [WEB] AI and automation central to retail revival strategy. Google Cloud partnership since 2015 for analytics, warehouse optimization, retail search. In-house developed warehouse management software on GCP. BigQuery for analytics. Retail Search integration. Moving more workloads to cloud for cost reduction." + }, + { + "heading": "AI Infrastructure Assessment", + "body": "GCP (Vertex AI, BigQuery ML) for AI/ML. Limited on-prem AI given cloud-first strategy. Edge AI at remaining stores for customer experience." + }, + { + "heading": "Competitive Threats", + "body": "CRITICAL: Macy's is actively migrating to GCP. VCF Not Deployed means they never bought into the full stack. Negative sentiment at all levels suggests relationship damage (possibly Broadcom pricing changes). Store closures will mechanically reduce the on-prem footprint. Anthos positions Google as the complete alternative." + }, + { + "heading": "Flight Risk Hiring Signals", + "body": "[{\"platform\":\"GCP\",\"signal_type\":\"Platform Expansion\",\"evidence\":\"Heavy Google Cloud hiring — Macys is GCP showcase\",\"risk\":\"Critical\"},{\"platform\":\"VMware\",\"signal_type\":\"Declining\",\"evidence\":\"Minimal VMware-specific hiring\",\"risk\":\"Critical\"}]" + }, + { + "heading": "Flight Risk Migration Tracker", + "body": "[{\"from\":\"On-prem/vSphere\",\"to\":\"GCP\",\"evidence\":\"65% cloud, GCP showcase customer, Negative sentiment\",\"confidence\":\"High\"}]" + }, + { + "heading": "Flight Risk Product Details", + "body": "[{\"product\":\"vSphere\",\"risk\":\"Critical\",\"competitor\":\"GCP Compute Engine\",\"evidence\":\"VCF Not Deployed, 65% cloud, active migration\"},{\"product\":\"vSAN\",\"risk\":\"Critical\",\"competitor\":\"GCP Persistent Disk, Pure Storage\",\"evidence\":\"Pure Storage + GCP displacing any VMware storage\"},{\"product\":\"NSX\",\"risk\":\"Critical\",\"competitor\":\"GCP VPC, Cisco ACI\",\"evidence\":\"Cisco networking and firewalls, GCP networking growing\"},{\"product\":\"Tanzu\",\"risk\":\"Critical\",\"competitor\":\"Anthos/OSS K8s\",\"evidence\":\"Anthos and OSS K8s — no Tanzu presence\"}]" + }, + { + "heading": "Licensing Sentiment Detail", + "body": "Actively Seeking Alternatives. Negative (Legal) designation on sentiment — suggests contract dispute, pricing disagreement, or legal proceedings. Both exec and tech sponsors are Negative. This is the most damaged relationship in Tier 1." + }, + { + "heading": "Regulatory Pressure", + "body": "[{\"framework\":\"PCI-DSS\",\"deadline\":\"Ongoing\",\"status\":\"Compliant\",\"gap\":\"Declining on-prem PCI scope as stores close\",\"opportunity\":\"vDefend\"},{\"framework\":\"SOX\",\"deadline\":\"Ongoing\",\"status\":\"Compliant\",\"opportunity\":\"ACC\"}]" + }, + { + "heading": "Security Incidents", + "body": "[{\"date\": \"2018-06\", \"type\": \"Data Breach\", \"description\": \"Online payment card compromise via Macys website. Customer payment information exposed.\", \"severity\": \"High\"}, {\"date\": \"2025-11\", \"type\": \"Ransomware/Extortion\", \"description\": \"Cl0p ransomware group listed Macy's on leak portal as part of coordinated campaign targeting Oracle E-Business Suite (EBS). Attackers exploited Oracle EBS vulnerabilities for unauthorized access. Customer PII, purchase history potentially compromised. Forensic firm hired to investigate.\", \"severity\": \"High\", \"regulatory_impact\": \"PCI-DSS implications, credit card company notifications\"}]" + }, + { + "heading": "Sales Campaign Intel", + "body": "RETENTION EMERGENCY. The primary objective is preventing complete VMware abandonment. Legal sentiment must be resolved first. Any product conversation is secondary to the commercial/legal relationship repair. If the relationship cannot be saved, this becomes a managed churn account where the goal is maintaining the remaining 27K core revenue for as long as possible." + }, + { + "heading": "Campaign Evidence", + "body": "{\"retention\":{\"competitive\":\"GCP full-stack migration underway\",\"regulatory\":\"\",\"priority\":\"Critical\"}}" + }, + { + "heading": "Broadcom Upsell Matrix", + "body": "RETENTION FOCUS ONLY | Resolve Legal sentiment | Prove VCF value for remaining on-prem workloads | vDefend for PCI on remaining stores" + }, + { + "heading": "Gap Analysis", + "body": "CRITICAL: Must resolve the Legal sentiment designation before any product conversation. What is the nature of the legal issue? Is it Broadcom pricing? Contract dispute? Until this is resolved, all other campaigns are irrelevant. Larry Del (Security, Neutral) may be the only non-hostile sponsor to engage." + }, + { + "heading": "Source URLs", + "body": "macysinc.com | macys.com/careers/technology [WEB] ciodive.com/news/macys-retail-AI-automation | ciodive.com/news/macys-draws-on-google-cloud | cloud.google.com/blog/topics/customers/macys-google-cloud | forthepeople.com/blog/macys-data-breach | retaildive.com/news/macys-retail-AI" + }, + { + "heading": "Hiring Trends Summary", + "body": "Heavily GCP-focused hiring. Minimal VMware roles. AI/ML hiring on Google Cloud. Digital commerce and e-commerce engineering." + }, + { + "heading": "Key Leadership Changes", + "body": "Keith Credendino promoted to CIO (elevated from within) to accelerate modernization. Naveen Krishna serves as CTO (formerly VP Technology at The Home Depot — notable cross-pollination with another GCP customer). Krishna accelerated cloud adoption since joining." + }, + { + "heading": "IT Budget Signals", + "body": "CapEx ~$1B annually 2025-2026. 2.5M sq ft automated fulfillment facility in NC. Q4 2025 earnings beat with upward 2026 forecast. 2026 guidance: net sales $21.4B-$21.65B, adjusted EPS $1.90-$2.10. AI inventory systems scaling. Supply chain savings target $235M annual run-rate by 2026." + }, + { + "heading": "SI Partners", + "body": "Google Cloud (primary cloud) | Striim (data integration/migration)" + }, + { + "heading": "Renewal Timing Signals", + "body": "Bold New Chapter strategy (2024) driving massive infrastructure refresh. Migrated mainframe/Oracle to GCP using Striim. New WMS on GCP. Closing 66 stores in 2025 — IT decommissioning opportunity. Reimagined store initiative covers 200 stores (~60% of go-forward fleet)." + }, + { + "heading": "Vendor Consolidation Intent", + "body": "Active: Consolidating vendor base explicitly stated. Moving most apps from on-prem to cloud. Rationalizing supply chain assets. First advanced WMS replacing legacy systems. Outsourcing and tech integration part of Bold New Chapter." + }, + { + "heading": "Industry Peer Signals", + "body": "Target uses cloud platforms for AI inventory/predictive analytics. Nordstrom investing $725M-$775M CapEx on digital/supply chain. VMware licensing disruption (Broadcom) forcing strategic review of private cloud across retail. Retail cloud market $39.6B by 2026 at 16.3% CAGR." + }, + { + "heading": "Peer Platform Moves", + "body": "[{\"peer\":\"Target\",\"platform\":\"Cloud + AI for inventory/predictive analytics\",\"evidence\":\"Industry reports\",\"relevance\":\"Retail peer accelerating cloud AI adoption\"},{\"peer\":\"Nordstrom\",\"platform\":\"$725-775M CapEx on digital/supply chain\",\"evidence\":\"Nordstrom filings\",\"relevance\":\"Department store peer investing in similar tech\"},{\"peer\":\"Retail sector\",\"platform\":\"VMware/Broadcom licensing disruption triggering cloud strategy changes\",\"evidence\":\"Industry analysis\",\"relevance\":\"Broadcom pricing driving cloud migration across retail\"}]" + }, + { + "heading": "Edge & IoT Strategy", + "body": "RFID tagging 100% of items. RFID + IoT sensors + video analytics + big data for inventory/loss prevention. RFID-enabled exit sensors for real-time theft detection. Personalized digital signage via edge computing. Cycle counts 25x faster with 20-30% inventory accuracy improvement." + }, + { + "heading": "Event & Conference Signals", + "body": "Bold New Chapter strategy announced Feb 2024 at investor event. NRF 2025 featured reimagined stores updates. Q4 2025 earnings call credited AI, reimagined stores, loyalty data. No VMware Explore, AWS re:Invent, or Nutanix .NEXT appearances." + }, + { + "heading": "Additional Account Fields", + "body": "Area: AM-SOUTHEAST EAR Tier: > $10M Est Annual Revenue: $23.9B (2024) Primary ERPs: 5224940 Account Plan: https://docs.google.com/presentation/d/1mStqs3Xx7VUtEaVJet8h6F9YkbwQK_bnHOKiiVO0Rx0/edit?usp=drive_link Account Folder: https://drive.google.com/drive/folders/1s0HmBfFiiuUDUkqgTjeKFkmUrVrk11D4 Account Website: macys.com VCF Entitled: Yes Exec Sponsorship Level: CIO-1 Broadcom Exec Sponsor Level: VP Last Engaged: 01/20/2026 Tech Sponsorship Level: CTO-1 Modern App Sponsor Level: CTO-1 Security Sponsor Level: CISO Other Sponsor: Bill Sway Other Sponsor Role: IT Director Other Sponsor Sentiment: Neutral Cloud Strategy Comments: GCP is primary target for all new workloads at this time --John Banerian, 02/09/2026 VCF Telemetry: RV Tools TAM Artifact Folder: https://drive.google.com/drive/folders/1e-Hz-E9bsfN5CFDMY5oh7AGj6SaTDFDR Datacenters: 1 Datacenter Cores: 16000 Edge Sites: 0 Edge Cores: 0 VCF Adoption Bottlenecks: Competing Priorities, Executive Sponsorship, Fragmented Tools, Operational Maturity, Hardware Contraints, Lack of Automation, Network Design Partner: NONE Container Platforms: Anthos , OSS K8s Production: Deployment Target Timeframe to VCF 9: FY26 Q2 Lab: Intended VCF 9 Version: VCF 9.1.x Lab: Deployment Target Timeframe to VCF 9: FY26 Q1 Lab Deployment Pilot?: Yes HW Blockers: Prod Environment VCF 9 Enablement Activities: VCF 9 SA-Led Workshop , Hands On Lab , VCF 9 Official Course , Compliance Scans Detailed 9.0 Software/Feature Gap: Right now there are no feature gaps that the account team is aware of customer is continuing to have VCF education and willingness to learn from the engineering level at Macy's. The executive level at Macy's is a different story and drags their feet in responding or engaging with Broadcom, there are still some legal challenges. Details are unknown from the account team and are being discussed at a higher level at Broadcom. VCF 9.x Comments: 08/06/2026 customer responded from procurement stating that they will not need the BU funded hundred and $50,000 worth of PSO to help them further their VCF test testing. This is very unfortunate because all we were able to complete is a basic VCF stand-up hundred percent believe this is a political move by Macy'sbecause of pricing and leadership being upset at the last couple of deals. 07/27/26 Macy's was about to lose all of their PSO credits in July 2026 at the last minute that they agreed to engage our PSO for a quick DCF 9.1 lab environment, install, and initial conversations on how to deploy this within their production environment. Chelsea from clear Bridge engaged with a customer as a consultant to install VCF in their lab environment. PSO was able to get approval to extend their PSO engagement until October 2026 and provide an additional BU funded $150,000.worth of PSO agreement will be sent to customer for signature. --Dan Palmer, 08/06/2026 Last Modified: 09/21/2026 Last Updated by: dan.palmer@broadcom.com Generated 9/22/2026, 9:17:06 PM by TechDirector Living Dossier District: SE-PEACHTREE Source doc refreshed nightly by TechDirector; the Drive URL is stable, so this source never needs re-importing. Source counts — Apps: 5, Workstreams: 6, Activities: 19, Consumption rows: 49, PSO Projects: 1" + } + ] + } +} diff --git a/data/assessments/northwind-financial.json b/data/assessments/northwind-financial.json new file mode 100644 index 0000000..9ad4e47 --- /dev/null +++ b/data/assessments/northwind-financial.json @@ -0,0 +1,247 @@ +{ + "id": "northwind-financial", + "version": 1, + "customerName": "Northwind Financial", + "industry": "Financial services", + "preparedBy": "Chris Olson", + "preparedFor": "CIO / Head of Infrastructure", + "opportunityRef": "OPP-40118", + "executiveSummary": "", + "horizonYears": 3, + "weights": { + "capability": 35, + "switchEase": 25, + "timeToRoi": 25, + "spend": 15 + }, + "candidates": [ + { + "id": "c-gnmpnbd", + "incumbentVendor": "F5", + "incumbentProduct": "BIG-IP LTM", + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "annualSpend": 1250000, + "units": 42, + "unitLabel": "appliances", + "renewalDate": "2027-03-31", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "strategicValue": 4, + "risks": "iRules migration needs an audit; 6 legacy apps use custom TCL.", + "notes": "", + "included": true + }, + { + "id": "c-mhfs3kf", + "incumbentVendor": "Splunk", + "incumbentProduct": "Enterprise", + "domain": "observability", + "productIds": [ + "vcf-ops-logs", + "aod-dx-oi" + ], + "annualSpend": 2100000, + "units": 1400, + "unitLabel": "GB/day", + "renewalDate": "2026-12-01", + "capability": 3, + "switchEase": 2, + "timeToRoiMonths": 18, + "savingsPct": 45, + "migrationCost": 480000, + "strategicValue": 5, + "risks": "SOC dashboards and 300+ saved searches must be rebuilt. Security team sign-off required.", + "notes": "", + "included": true + }, + { + "id": "c-5f805x6", + "incumbentVendor": "BMC", + "incumbentProduct": "Control-M", + "domain": "wla", + "productIds": [ + "aod-automic", + "aod-autosys" + ], + "annualSpend": 880000, + "units": 9500, + "unitLabel": "jobs/day", + "renewalDate": "2027-06-30", + "capability": 5, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 65, + "migrationCost": 190000, + "strategicValue": 4, + "risks": "Batch calendar conversion over a single quarter-end freeze window.", + "notes": "", + "included": true + }, + { + "id": "c-7zplvbf", + "incumbentVendor": "CrowdStrike", + "incumbentProduct": "Falcon", + "domain": "endpoint-sec", + "productIds": [ + "cb-cloud", + "esg-ses-complete" + ], + "annualSpend": 1450000, + "units": 24000, + "unitLabel": "endpoints", + "renewalDate": "2027-01-15", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 9, + "savingsPct": 40, + "migrationCost": 260000, + "strategicValue": 5, + "risks": "Parallel-run required for 60 days; EDR detection parity must be proven to the CISO.", + "notes": "", + "included": true + }, + { + "id": "c-nmte6kw", + "incumbentVendor": "ServiceNow", + "incumbentProduct": "ITSM", + "domain": "itsm", + "productIds": [ + "aod-sdm", + "aod-service-catalog" + ], + "annualSpend": 1900000, + "units": 3100, + "unitLabel": "fulfiller seats", + "renewalDate": "2028-02-28", + "capability": 3, + "switchEase": 1, + "timeToRoiMonths": 30, + "savingsPct": 35, + "migrationCost": 900000, + "strategicValue": 3, + "risks": "Deeply embedded workflows and 40+ integrations. Treat as a long-horizon option only.", + "notes": "", + "included": true + }, + { + "id": "c-j12ddgu", + "incumbentVendor": "SailPoint", + "incumbentProduct": "IdentityIQ", + "domain": "iam", + "productIds": [ + "esg-iga" + ], + "annualSpend": 720000, + "units": 38000, + "unitLabel": "identities", + "renewalDate": "2027-09-30", + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 14, + "savingsPct": 50, + "migrationCost": 170000, + "strategicValue": 4, + "risks": "Access certification campaigns must not lapse during cutover.", + "notes": "", + "included": true + }, + { + "id": "c-a84itug", + "incumbentVendor": "Nutanix", + "incumbentProduct": "Cloud Platform", + "domain": "private-cloud", + "productIds": [ + "vcf-foundation", + "vcf-vsan" + ], + "annualSpend": 2600000, + "units": 180, + "unitLabel": "nodes", + "renewalDate": "2027-04-30", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 8, + "savingsPct": 30, + "migrationCost": 400000, + "strategicValue": 5, + "risks": "AHV to ESXi conversion for 900 VMs; requires a rolling maintenance plan.", + "notes": "", + "included": true + }, + { + "id": "c-lsuangg", + "incumbentVendor": "Apptio", + "incumbentProduct": "Cloudability", + "domain": "finops", + "productIds": [ + "aod-cloudhealth" + ], + "annualSpend": 310000, + "units": 0, + "unitLabel": "", + "renewalDate": "2026-11-30", + "capability": 5, + "switchEase": 5, + "timeToRoiMonths": 4, + "savingsPct": 70, + "migrationCost": 25000, + "strategicValue": 3, + "risks": "", + "notes": "", + "included": true + }, + { + "id": "c-1krnhgi", + "incumbentVendor": "IBM", + "incumbentProduct": "Db2 Tools for z/OS", + "domain": "mf-database", + "productIds": [ + "msd-db2-suite", + "msd-db2-utility" + ], + "annualSpend": 1100000, + "units": 2400, + "unitLabel": "MSU", + "renewalDate": "2027-12-31", + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 10, + "savingsPct": 45, + "migrationCost": 150000, + "strategicValue": 4, + "risks": "Utility JCL conversion; run both suites in parallel for one reorg cycle.", + "notes": "", + "included": true + }, + { + "id": "c-g5v54bd", + "incumbentVendor": "Zscaler", + "incumbentProduct": "Internet Access", + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "annualSpend": 960000, + "units": 24000, + "unitLabel": "users", + "renewalDate": "2027-07-31", + "capability": 4, + "switchEase": 2, + "timeToRoiMonths": 16, + "savingsPct": 45, + "migrationCost": 280000, + "strategicValue": 4, + "risks": "PAC file and certificate rollout across 24k endpoints and 60 branch sites.", + "notes": "", + "included": true + } + ], + "createdAt": "2026-09-22T17:22:56.750Z", + "updatedAt": "2026-09-23T12:58:32.799Z" +} diff --git a/data/catalog.json b/data/catalog.json new file mode 100644 index 0000000..4f70d70 --- /dev/null +++ b/data/catalog.json @@ -0,0 +1,3054 @@ +{ + "version": 1, + "updatedAt": "2026-09-23", + "source": [ + "https://www.vmware.com/products", + "https://www.broadcom.com/products/enterprise-software", + "https://www.broadcom.com/products#mainframe-software", + "https://www.broadcom.com/products#cybersecurity" + ], + "businessUnits": [ + { + "id": "vcf", + "name": "VCF Division", + "short": "VCF", + "color": "#2a78d6" + }, + { + "id": "tanzu", + "name": "Tanzu Division", + "short": "Tanzu", + "color": "#1baf7a" + }, + { + "id": "ans", + "name": "Application Networking & Security", + "short": "ANS", + "color": "#4a3aa7" + }, + { + "id": "aod", + "name": "Agile Operations Division", + "short": "AOD", + "color": "#eb6834" + }, + { + "id": "esg", + "name": "Enterprise Security Group", + "short": "ESG", + "color": "#e34948" + }, + { + "id": "cb", + "name": "Carbon Black", + "short": "CB", + "color": "#e87ba4" + }, + { + "id": "msd", + "name": "Mainframe Software Division", + "short": "MSD", + "color": "#eda100" + }, + { + "id": "ims", + "name": "IMS", + "short": "IMS", + "color": "#898781" + } + ], + "domains": [ + { + "id": "private-cloud", + "name": "Private Cloud Platform", + "description": "The integrated platform that runs your on-premises or hosted private cloud — compute, storage and networking managed as one stack." + }, + { + "id": "compute", + "name": "Compute & Virtualization", + "description": "Hypervisors and virtualization platforms that host your servers and virtual machines." + }, + { + "id": "storage", + "name": "Storage & Data Services", + "description": "Software-defined storage, hyperconverged storage and data services for your virtualized workloads." + }, + { + "id": "networking", + "name": "Networking", + "description": "Data-center networking, network virtualization and software-defined networking." + }, + { + "id": "adc", + "name": "Load Balancing & ADC", + "description": "Load balancers and application delivery controllers in front of your applications." + }, + { + "id": "resiliency", + "name": "Resiliency & DR", + "description": "Disaster recovery, backup orchestration and ransomware recovery for your infrastructure." + }, + { + "id": "cloud-mgmt", + "name": "Cloud Management & Automation", + "description": "Tools that provision, automate and govern infrastructure across private and public clouds." + }, + { + "id": "observability", + "name": "Observability & AIOps", + "description": "Monitoring, APM, log analytics and AIOps across applications and infrastructure." + }, + { + "id": "app-platform", + "name": "App Platform & Kubernetes", + "description": "Kubernetes distributions and platforms your developers build and run applications on." + }, + { + "id": "data", + "name": "Data & Analytics", + "description": "Databases, data caching, messaging and analytics platforms." + }, + { + "id": "devops", + "name": "DevOps & Testing", + "description": "CI/CD, test automation, service virtualization and release tooling." + }, + { + "id": "finops", + "name": "FinOps & Cloud Cost", + "description": "Cloud cost visibility, optimization and chargeback." + }, + { + "id": "itsm", + "name": "ITSM & Endpoint Management", + "description": "IT service desk, asset management and endpoint / device management." + }, + { + "id": "vsm", + "name": "Value Stream, PPM & Agile", + "description": "Portfolio and project management, agile planning and value stream management." + }, + { + "id": "wla", + "name": "Workload Automation", + "description": "Job scheduling and workload automation across distributed systems." + }, + { + "id": "api", + "name": "API Management & Security", + "description": "API gateways, API management and API security." + }, + { + "id": "endpoint-sec", + "name": "Endpoint Security", + "description": "Antivirus, EDR and protection for laptops, desktops and servers." + }, + { + "id": "network-sec", + "name": "Network & Web Security", + "description": "Secure web gateways, CASB, ZTNA, firewalls and other network and web security." + }, + { + "id": "data-sec", + "name": "Data Security & Compliance", + "description": "Data loss prevention, data classification and compliance tooling." + }, + { + "id": "iam", + "name": "Identity & Access Management", + "description": "Identity governance, single sign-on, MFA and privileged access management." + }, + { + "id": "email-sec", + "name": "Email Security", + "description": "Email filtering, anti-phishing and email threat protection." + }, + { + "id": "payment-sec", + "name": "Payment Security", + "description": "Payment fraud prevention and 3-D Secure authentication." + }, + { + "id": "mf-security", + "name": "Mainframe Security", + "description": "Access control, auditing and compliance on the mainframe." + }, + { + "id": "mf-devops", + "name": "Mainframe DevOps", + "description": "Mainframe development, testing, source control and deployment tools." + }, + { + "id": "mf-database", + "name": "Mainframe Database", + "description": "Mainframe database administration and performance tools (e.g. Db2, IMS)." + }, + { + "id": "mf-observability", + "name": "Mainframe Observability", + "description": "Mainframe performance monitoring and operations automation." + }, + { + "id": "mf-storage", + "name": "Mainframe Storage & Output", + "description": "Mainframe storage management, tape, and output / report management." + }, + { + "id": "mf-wla", + "name": "Mainframe Workload Automation", + "description": "Job scheduling and workload automation on the mainframe." + }, + { + "id": "mf-foundation", + "name": "Mainframe Foundational", + "description": "Core mainframe utilities, operating-system add-ons and foundational software." + } + ], + "products": [ + { + "id": "vcf-foundation", + "name": "VMware Cloud Foundation (VCF 9)", + "bu": "vcf", + "domain": "private-cloud", + "description": "Unified private cloud platform: compute, storage, networking, automation and operations delivered as one integrated stack with a single control plane.", + "replaces": [ + "Nutanix Cloud Platform", + "Red Hat OpenShift Virtualization", + "Microsoft Azure Local", + "OpenStack", + "Public cloud IaaS (AWS/Azure/GCP)" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vmware-cloud-foundation", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-vvf", + "name": "VMware vSphere Foundation (VVF)", + "bu": "vcf", + "domain": "compute", + "description": "Enterprise workload platform for vSphere estates that need advanced ops and storage without the full VCF private cloud.", + "replaces": [ + "Nutanix AHV", + "Red Hat Virtualization", + "Proxmox VE", + "Hyper-V" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vsphere-foundation", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-vsphere", + "name": "VMware vSphere (ESXi)", + "bu": "vcf", + "domain": "compute", + "description": "Bare-metal hypervisor and virtualization platform for enterprise workloads.", + "replaces": [ + "Microsoft Hyper-V", + "Nutanix AHV", + "KVM", + "Proxmox VE", + "XCP-ng", + "Oracle VM" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vsphere", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-vcenter", + "name": "VMware vCenter Server", + "bu": "vcf", + "domain": "compute", + "description": "Centralized management plane for vSphere clusters, inventory, lifecycle and policy.", + "replaces": [ + "Microsoft SCVMM", + "Nutanix Prism Central", + "oVirt Manager" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcenter/future-overview", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-vsan", + "name": "VMware vSAN", + "bu": "vcf", + "domain": "storage", + "description": "Software-defined, hyperconverged storage native to the hypervisor with policy-based management.", + "replaces": [ + "Nutanix Distributed Storage", + "Dell PowerFlex", + "Ceph", + "StorMagic", + "Microsoft Storage Spaces Direct", + "NetApp/Pure external arrays" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vsan", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-automation", + "name": "VCF Automation", + "bu": "vcf", + "domain": "cloud-mgmt", + "description": "Self-service cloud provisioning, infrastructure-as-code, governance and multi-cloud orchestration (formerly Aria Automation / vRealize Automation).", + "replaces": [ + "Terraform Enterprise", + "Morpheus Data", + "ServiceNow Cloud Provisioning", + "Red Hat Ansible Automation Platform", + "Scalr" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-automation", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-operations", + "name": "VCF Operations", + "bu": "vcf", + "domain": "observability", + "description": "AI-driven capacity, cost, performance and configuration management for private and hybrid cloud (formerly Aria Operations).", + "replaces": [ + "Turbonomic", + "Nutanix Prism Ops", + "Datadog Infrastructure", + "SolarWinds VMAN", + "Veeam ONE", + "Zabbix" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-operations", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-ops-networks", + "name": "VCF Operations for Networks", + "bu": "vcf", + "domain": "observability", + "description": "Network visibility, flow analytics, micro-segmentation planning and troubleshooting across virtual and physical networks (formerly vRealize Network Insight).", + "replaces": [ + "Cisco Nexus Dashboard Insights", + "Gigamon", + "ExtraHop", + "Kentik", + "NetBrain" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-operations-for-networks", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-ops-logs", + "name": "VCF Operations for Logs", + "bu": "vcf", + "domain": "observability", + "description": "Scalable log aggregation, search and analytics for infrastructure and applications (formerly Aria Operations for Logs / Log Insight).", + "replaces": [ + "Splunk Enterprise", + "Elastic Stack", + "Graylog", + "Sumo Logic", + "Datadog Logs" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-operations", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-ops-mobility", + "name": "VCF Operations Workload Mobility (HCX)", + "bu": "vcf", + "domain": "cloud-mgmt", + "description": "Large-scale live workload migration and datacenter evacuation between sites and clouds.", + "replaces": [ + "Zerto Migration", + "Carbonite Migrate", + "RackWare", + "Cloud vendor migration services" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-operations-workload-mobility", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-usage-meter", + "name": "VCF Usage Meter", + "bu": "vcf", + "domain": "cloud-mgmt", + "description": "Consumption metering and reporting for VCF estates and service-provider billing.", + "replaces": [ + "Custom chargeback scripts", + "Cloud provider billing exports" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-usage-meter", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-live-recovery", + "name": "VMware Live Recovery", + "bu": "vcf", + "domain": "resiliency", + "description": "Unified disaster recovery, ransomware recovery and cyber-resilience across on-prem and cloud (Site Recovery Manager + VMware Cloud DR).", + "replaces": [ + "Zerto", + "Veeam Backup & Replication", + "Rubrik", + "Cohesity", + "Commvault", + "Azure Site Recovery" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/advanced-services/live-recovery", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-cloud-director", + "name": "VMware Cloud Director", + "bu": "vcf", + "domain": "private-cloud", + "description": "Multi-tenant cloud service delivery platform for service providers and large enterprise shared services.", + "replaces": [ + "OpenStack Horizon", + "Apache CloudStack", + "Virtuozzo", + "Custom tenant portals" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/cloud-director", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-edge", + "name": "VMware Cloud Foundation Edge", + "bu": "vcf", + "domain": "private-cloud", + "description": "Lightweight VCF footprint for edge, retail and remote sites with centralized lifecycle management.", + "replaces": [ + "Red Hat Device Edge", + "Azure Stack HCI Edge", + "Scale Computing", + "Nutanix Edge" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vmware-cloud-foundation-edge", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-dsm", + "name": "VMware Data Services Manager", + "bu": "vcf", + "domain": "data", + "description": "Database-as-a-service for Postgres and MySQL on VCF with automated provisioning, backup and lifecycle.", + "replaces": [ + "AWS RDS", + "Azure Database", + "Self-managed DB teams", + "EDB Postgres Enterprise" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/advanced-services/data-services-manager", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-private-ai", + "name": "VMware Private AI Services", + "bu": "vcf", + "domain": "data", + "description": "Private AI foundation on VCF: GPU pooling, model catalog, vector database and agent builder services for on-prem GenAI.", + "replaces": [ + "NVIDIA AI Enterprise standalone", + "Public cloud AI platforms", + "Run:ai" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-private-ai-services", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-vks", + "name": "vSphere Kubernetes Service (VKS)", + "bu": "vcf", + "domain": "app-platform", + "description": "Conformant Kubernetes runtime embedded in vSphere with declarative cluster lifecycle management.", + "replaces": [ + "Red Hat OpenShift", + "Rancher", + "Amazon EKS Anywhere", + "Google Anthos" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vsphere-kubernetes-service", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-telco", + "name": "VMware Telco Cloud Platform", + "bu": "vcf", + "domain": "private-cloud", + "description": "Carrier-grade NFV and cloud-native network function platform for 5G core and RAN.", + "replaces": [ + "Red Hat OpenShift Telco", + "Nokia CBIS", + "Ericsson CNIS", + "Wind River Studio" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/telco-cloud-platform", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-desktop-hypervisor", + "name": "VMware Workstation Pro & Fusion Pro", + "bu": "vcf", + "domain": "compute", + "description": "Desktop hypervisors for developers and IT running local VMs on Windows, Linux and macOS.", + "replaces": [ + "Parallels Desktop", + "Oracle VirtualBox", + "UTM", + "Hyper-V (client)" + ], + "url": "https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion", + "enabled": true, + "notes": "" + }, + { + "id": "vcf-antrea", + "name": "Antrea Container Networking", + "bu": "vcf", + "domain": "networking", + "description": "Kubernetes-native CNI with policy enforcement and observability, integrated with NSX.", + "replaces": [ + "Calico Enterprise", + "Cilium Enterprise", + "Weave Net" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/antrea-container-networking", + "enabled": true, + "notes": "" + }, + { + "id": "ans-nsx", + "name": "VCF Networking (NSX)", + "bu": "ans", + "domain": "networking", + "description": "Software-defined networking: overlay, routing, switching, VPN and multi-site networking for private cloud.", + "replaces": [ + "Cisco ACI", + "Arista CloudVision", + "Juniper Apstra", + "Nokia SR Linux", + "Native cloud VPC networking" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/vcf-networking", + "enabled": true, + "notes": "" + }, + { + "id": "ans-avi", + "name": "VMware Avi Load Balancer", + "bu": "ans", + "domain": "adc", + "description": "Software-defined application delivery: L4-L7 load balancing, GSLB, WAF and analytics on any cloud.", + "replaces": [ + "F5 BIG-IP", + "Citrix ADC / NetScaler", + "A10 Thunder", + "HAProxy Enterprise", + "AWS ALB/NLB", + "Nginx Plus", + "Radware Alteon" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/advanced-services/avi-load-balancer", + "enabled": true, + "notes": "" + }, + { + "id": "ans-vdefend-dfw", + "name": "VMware vDefend Distributed Firewall", + "bu": "ans", + "domain": "network-sec", + "description": "Hypervisor-embedded east-west firewall delivering micro-segmentation without hairpinning traffic to appliances.", + "replaces": [ + "Illumio Core", + "Guardicore (Akamai)", + "Cisco Secure Workload (Tetration)", + "Palo Alto VM-Series", + "Zero Networks" + ], + "url": "https://www.vmware.com/products/security/vdefend-distributed-firewall", + "enabled": true, + "notes": "" + }, + { + "id": "ans-vdefend-atp", + "name": "VMware vDefend Advanced Threat Prevention", + "bu": "ans", + "domain": "network-sec", + "description": "Lateral-movement detection: IDS/IPS, network sandboxing, network traffic analysis and NDR inside the datacenter.", + "replaces": [ + "Darktrace", + "Vectra AI", + "ExtraHop Reveal(x)", + "Cisco Secure IPS", + "Corelight" + ], + "url": "https://www.vmware.com/products/security/vdefend-advanced-threat-prevention", + "enabled": true, + "notes": "" + }, + { + "id": "ans-vdefend-gw", + "name": "VMware vDefend Gateway Firewall", + "bu": "ans", + "domain": "network-sec", + "description": "North-south firewalling at the virtual datacenter edge with URL filtering and TLS inspection.", + "replaces": [ + "Palo Alto NGFW", + "Fortinet FortiGate", + "Check Point Quantum", + "Cisco Secure Firewall" + ], + "url": "https://www.vmware.com/products/security/vdefend-gateway-firewall", + "enabled": true, + "notes": "" + }, + { + "id": "ans-acc", + "name": "VMware Advanced Cyber Compliance", + "bu": "ans", + "domain": "data-sec", + "description": "Continuous compliance assessment and remediation for VCF against PCI, HIPAA, NIST and CIS benchmarks.", + "replaces": [ + "Qualys Policy Compliance", + "Tenable Security Center", + "Rapid7 InsightVM", + "Chef InSpec" + ], + "url": "https://www.vmware.com/products/cloud-infrastructure/advanced-services/advanced-cyber-compliance", + "enabled": true, + "notes": "" + }, + { + "id": "ans-mdr", + "name": "VMware Managed Detection and Response", + "bu": "ans", + "domain": "network-sec", + "description": "24x7 managed threat hunting and response across workload and network telemetry.", + "replaces": [ + "CrowdStrike Falcon Complete", + "Arctic Wolf", + "Expel", + "Red Canary", + "SentinelOne Vigilance" + ], + "url": "https://www.vmware.com/products/security/managed-detection-and-response", + "enabled": true, + "notes": "" + }, + { + "id": "ans-sase", + "name": "VMware SASE / Secure Access Service Edge", + "bu": "ans", + "domain": "network-sec", + "description": "Cloud-delivered SD-WAN and secure access edge. Verify current ownership and availability before positioning.", + "replaces": [ + "Zscaler", + "Netskope", + "Cisco Umbrella", + "Fortinet Secure SD-WAN", + "Cato Networks" + ], + "url": "https://www.vmware.com/products/software-defined-edge/secure-access-service-edge-sase", + "enabled": false, + "notes": "Disabled by default — confirm current ownership/availability before positioning." + }, + { + "id": "tz-platform", + "name": "Tanzu Platform", + "bu": "tanzu", + "domain": "app-platform", + "description": "Opinionated application platform delivering a paved road to production for Kubernetes and Cloud Foundry apps.", + "replaces": [ + "Red Hat OpenShift", + "Heroku", + "Google Cloud Run", + "AWS App Runner", + "Internal DIY platforms" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu", + "enabled": true, + "notes": "" + }, + { + "id": "tz-tkg", + "name": "Tanzu Kubernetes Grid", + "bu": "tanzu", + "domain": "app-platform", + "description": "Multi-cloud conformant Kubernetes runtime with consistent lifecycle management across datacenter, edge and public cloud.", + "replaces": [ + "Red Hat OpenShift", + "SUSE Rancher", + "Amazon EKS Anywhere", + "Google Anthos", + "Mirantis Kubernetes Engine" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-kubernetes-grid", + "enabled": true, + "notes": "" + }, + { + "id": "tz-spring", + "name": "Tanzu Spring", + "bu": "tanzu", + "domain": "devops", + "description": "Commercial support, extended security maintenance and enterprise features for Spring Boot and the Spring ecosystem.", + "replaces": [ + "Red Hat JBoss EAP", + "Oracle WebLogic", + "IBM WebSphere Liberty", + "Unsupported community OSS" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-spring", + "enabled": true, + "notes": "" + }, + { + "id": "tz-data-intel", + "name": "Tanzu Data Intelligence", + "bu": "tanzu", + "domain": "data", + "description": "Unified data services portfolio spanning analytics, streaming, caching and operational databases on private cloud.", + "replaces": [ + "Databricks", + "Snowflake", + "Cloudera Data Platform", + "Confluent Platform" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence", + "enabled": true, + "notes": "" + }, + { + "id": "tz-greenplum", + "name": "Tanzu Greenplum", + "bu": "tanzu", + "domain": "data", + "description": "Massively parallel Postgres-based analytical data warehouse for on-premises and private cloud.", + "replaces": [ + "Teradata", + "Snowflake", + "Amazon Redshift", + "Oracle Exadata", + "Vertica", + "Cloudera" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/greenplum", + "enabled": true, + "notes": "" + }, + { + "id": "tz-gemfire", + "name": "Tanzu GemFire", + "bu": "tanzu", + "domain": "data", + "description": "In-memory data grid for low-latency, high-throughput transactional workloads.", + "replaces": [ + "Redis Enterprise", + "Hazelcast", + "Oracle Coherence", + "Apache Ignite" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/gemfire", + "enabled": true, + "notes": "" + }, + { + "id": "tz-postgres", + "name": "Tanzu Postgres", + "bu": "tanzu", + "domain": "data", + "description": "Enterprise-supported PostgreSQL distribution with operators for Kubernetes and VMs.", + "replaces": [ + "EDB Postgres Advanced Server", + "Amazon RDS for PostgreSQL", + "Crunchy Data", + "Oracle Database (migration target)" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/postgres", + "enabled": true, + "notes": "" + }, + { + "id": "tz-mysql", + "name": "Tanzu MySQL", + "bu": "tanzu", + "domain": "data", + "description": "Enterprise-supported MySQL with automated provisioning, HA and backup on Kubernetes.", + "replaces": [ + "Oracle MySQL Enterprise", + "Amazon RDS for MySQL", + "Percona" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/mysql", + "enabled": true, + "notes": "" + }, + { + "id": "tz-rabbitmq", + "name": "Tanzu RabbitMQ", + "bu": "tanzu", + "domain": "data", + "description": "Commercially supported RabbitMQ message broker with warm standby replication and Kubernetes operators.", + "replaces": [ + "IBM MQ", + "Confluent Platform", + "Apache ActiveMQ", + "Azure Service Bus", + "Solace" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/rabbitmq", + "enabled": true, + "notes": "" + }, + { + "id": "tz-valkey", + "name": "Tanzu Valkey", + "bu": "tanzu", + "domain": "data", + "description": "Supported Valkey (Redis-compatible) in-memory key-value store for caching and session state.", + "replaces": [ + "Redis Enterprise", + "Amazon ElastiCache", + "Memcached" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/valkey", + "enabled": true, + "notes": "" + }, + { + "id": "tz-data-lake", + "name": "Tanzu Data Lake", + "bu": "tanzu", + "domain": "data", + "description": "Open-format lakehouse storage and query layer for private cloud analytics.", + "replaces": [ + "Databricks Lakehouse", + "Snowflake", + "Cloudera", + "AWS Lake Formation" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu-data-intelligence/data-lake", + "enabled": true, + "notes": "" + }, + { + "id": "tz-observability", + "name": "Tanzu Observability", + "bu": "tanzu", + "domain": "observability", + "description": "High-cardinality metrics, traces and analytics platform for cloud-native applications (formerly Wavefront).", + "replaces": [ + "Datadog", + "New Relic", + "Dynatrace", + "Grafana Cloud", + "Splunk Observability Cloud" + ], + "url": "https://www.broadcom.com/products/software/aiops-observability/tanzu-observability", + "enabled": true, + "notes": "" + }, + { + "id": "tz-salt", + "name": "Tanzu Salt", + "bu": "tanzu", + "domain": "cloud-mgmt", + "description": "Event-driven configuration management, patching and compliance automation at scale.", + "replaces": [ + "Red Hat Ansible Automation Platform", + "Puppet Enterprise", + "Chef", + "Microsoft Intune/SCCM" + ], + "url": "https://www.vmware.com/products/app-platform/tanzu", + "enabled": true, + "notes": "" + }, + { + "id": "aod-dx-apm", + "name": "DX Application Performance Management", + "bu": "aod", + "domain": "observability", + "description": "Full-stack APM with distributed tracing, code-level diagnostics and business transaction analytics for enterprise and mainframe-connected apps.", + "replaces": [ + "Dynatrace", + "New Relic", + "AppDynamics", + "Datadog APM", + "Elastic APM" + ], + "url": "https://www.broadcom.com/products/software/aiops-observability/application-performance-management", + "enabled": true, + "notes": "" + }, + { + "id": "aod-dx-oi", + "name": "DX Operational Intelligence", + "bu": "aod", + "domain": "observability", + "description": "AIOps correlation, anomaly detection and noise reduction across monitoring, ticketing and event sources.", + "replaces": [ + "BigPanda", + "Moogsoft", + "ServiceNow ITOM Event Management", + "Splunk ITSI", + "PagerDuty AIOps" + ], + "url": "https://www.broadcom.com/products/software/aiops-observability/operational-intelligence", + "enabled": true, + "notes": "" + }, + { + "id": "aod-dx-uim", + "name": "DX Unified Infrastructure Management", + "bu": "aod", + "domain": "observability", + "description": "Unified monitoring for servers, storage, network, databases, virtualization and public cloud from one console.", + "replaces": [ + "SolarWinds", + "Zabbix", + "Nagios/op5", + "Datadog Infrastructure", + "Microsoft SCOM", + "LogicMonitor" + ], + "url": "https://www.broadcom.com/products/software/aiops-observability/infrastructure-management", + "enabled": true, + "notes": "" + }, + { + "id": "aod-dx-uim-msp", + "name": "DX UIM for Managed Service Providers", + "bu": "aod", + "domain": "observability", + "description": "Multi-tenant infrastructure monitoring packaged for MSP delivery and per-tenant billing.", + "replaces": [ + "LogicMonitor MSP", + "Auvik", + "N-able N-central", + "ConnectWise RMM" + ], + "url": "https://www.broadcom.com/products/software/aiops-observability/infrastructure-management/unified-infrastructure-management-for-managed-service-providers", + "enabled": true, + "notes": "" + }, + { + "id": "aod-netops", + "name": "DX NetOps", + "bu": "aod", + "domain": "observability", + "description": "Network fault, performance and configuration management at carrier scale with topology-aware root cause analysis.", + "replaces": [ + "SolarWinds NPM", + "Cisco Prime / Nexus Dashboard", + "Micro Focus NNMi", + "ScienceLogic", + "Zabbix" + ], + "url": "https://www.broadcom.com/products/software/network-management/netops", + "enabled": true, + "notes": "" + }, + { + "id": "aod-appneta", + "name": "AppNeta Network Performance Monitoring", + "bu": "aod", + "domain": "observability", + "description": "Active synthetic path monitoring of end-user experience across SaaS, internet and SD-WAN paths.", + "replaces": [ + "ThousandEyes", + "Catchpoint", + "NetScout nGeniusONE", + "Kentik" + ], + "url": "https://www.broadcom.com/products/software/network-management/appneta", + "enabled": true, + "notes": "" + }, + { + "id": "aod-net-observability", + "name": "Network Observability", + "bu": "aod", + "domain": "observability", + "description": "Combined NetOps and AppNeta network observability suite spanning owned and unowned networks.", + "replaces": [ + "Cisco ThousandEyes + Nexus Dashboard", + "NetScout", + "Broadcom competitors bundled NPM suites" + ], + "url": "https://www.broadcom.com/products/software/network-observability", + "enabled": true, + "notes": "" + }, + { + "id": "aod-layer7-gateway", + "name": "Layer7 API Gateway", + "bu": "aod", + "domain": "api", + "description": "High-performance API gateway for policy enforcement, mediation, throttling and protocol translation at enterprise scale.", + "replaces": [ + "Apigee (Google)", + "Kong Enterprise", + "MuleSoft Anypoint", + "IBM API Connect", + "AWS API Gateway", + "Axway" + ], + "url": "https://www.broadcom.com/products/software/api-management/layer7-api-gateways", + "enabled": true, + "notes": "" + }, + { + "id": "aod-layer7-portal", + "name": "Layer7 API Developer Portal", + "bu": "aod", + "domain": "api", + "description": "Developer onboarding, API catalog, documentation and key management portal.", + "replaces": [ + "Apigee Developer Portal", + "Kong Developer Portal", + "Postman Enterprise", + "Backstage" + ], + "url": "https://www.broadcom.com/products/software/api-management/layer7-developers", + "enabled": true, + "notes": "" + }, + { + "id": "aod-layer7-apisec", + "name": "Layer7 API Security", + "bu": "aod", + "domain": "api", + "description": "API discovery, posture management, threat protection and runtime API attack detection.", + "replaces": [ + "Salt Security", + "Noname Security", + "Traceable AI", + "42Crunch", + "Imperva API Security" + ], + "url": "https://www.broadcom.com/products/software/layer7-api-security", + "enabled": true, + "notes": "" + }, + { + "id": "aod-cloudhealth", + "name": "CloudHealth", + "bu": "aod", + "domain": "finops", + "description": "Multicloud FinOps: cost visibility, showback/chargeback, rightsizing, commitment management and governance policies.", + "replaces": [ + "Apptio Cloudability", + "Flexera One", + "CloudZero", + "Native AWS/Azure cost tools", + "Harness Cloud Cost" + ], + "url": "https://www.broadcom.com/products/software/finops/cloudhealth", + "enabled": true, + "notes": "" + }, + { + "id": "aod-cloudhealth-partner", + "name": "CloudHealth Partner Platform", + "bu": "aod", + "domain": "finops", + "description": "Multi-tenant FinOps and billing platform for cloud resellers and managed service providers.", + "replaces": [ + "Cloudability Partner", + "Tangoe", + "CloudBolt", + "Custom billing engines" + ], + "url": "https://www.broadcom.com/products/software/finops/cloudhealth-partner-platform", + "enabled": true, + "notes": "" + }, + { + "id": "aod-clarity", + "name": "Clarity", + "bu": "aod", + "domain": "vsm", + "description": "Enterprise strategic portfolio management: investment planning, capacity, financials and roadmapping tied to delivery.", + "replaces": [ + "Planview Portfolios", + "ServiceNow SPM", + "Microsoft Project/Planner Premium", + "Smartsheet", + "Workfront" + ], + "url": "https://www.broadcom.com/products/software/value-stream-management/clarity", + "enabled": true, + "notes": "" + }, + { + "id": "aod-rally", + "name": "Rally Software", + "bu": "aod", + "domain": "vsm", + "description": "Enterprise agile planning for SAFe and scaled agile: portfolio, program increments, team backlogs and flow metrics.", + "replaces": [ + "Atlassian Jira Align", + "Azure DevOps Boards", + "Planview AgilePlace", + "Targetprocess (Apptio)", + "Digital.ai Agility" + ], + "url": "https://www.broadcom.com/products/software/value-stream-management/rally", + "enabled": true, + "notes": "" + }, + { + "id": "aod-connectall", + "name": "ValueOps ConnectAll", + "bu": "aod", + "domain": "vsm", + "description": "Bi-directional integration fabric synchronizing work items across Jira, ServiceNow, Rally, Azure DevOps and more.", + "replaces": [ + "Tasktop / Planview Hub", + "Exalate", + "Getint", + "ZigiOps", + "Custom middleware" + ], + "url": "https://www.broadcom.com/products/software/value-stream-management/valueops-connectall", + "enabled": true, + "notes": "" + }, + { + "id": "aod-valueops-insights", + "name": "ValueOps Insights", + "bu": "aod", + "domain": "vsm", + "description": "Value stream management analytics: flow metrics, delivery predictability and investment-to-outcome traceability.", + "replaces": [ + "Planview Viz", + "Jellyfish", + "LinearB", + "Swarmia", + "Allstacks" + ], + "url": "https://www.broadcom.com/products/software/value-stream-management/valueops-insights", + "enabled": true, + "notes": "" + }, + { + "id": "aod-automic", + "name": "Automic Automation", + "bu": "aod", + "domain": "wla", + "description": "Enterprise service orchestration and workload automation across hybrid estates, SAP, cloud and data pipelines.", + "replaces": [ + "BMC Control-M", + "IBM Workload Automation", + "Stonebranch UAC", + "Redwood RunMyJobs", + "Tidal Automation" + ], + "url": "https://www.broadcom.com/products/software/automation/automic-automation", + "enabled": true, + "notes": "" + }, + { + "id": "aod-automic-ai", + "name": "Automic Automation Intelligence", + "bu": "aod", + "domain": "wla", + "description": "Predictive SLA analytics and business-service views over complex automation estates.", + "replaces": [ + "Control-M BIM", + "Stonebranch analytics", + "Custom SLA dashboards" + ], + "url": "https://www.broadcom.com/products/software/automation/automic-automation-intelligence", + "enabled": true, + "notes": "" + }, + { + "id": "aod-autosys", + "name": "AutoSys Workload Automation", + "bu": "aod", + "domain": "wla", + "description": "Distributed job scheduling and cross-platform batch orchestration with high-availability agents.", + "replaces": [ + "BMC Control-M", + "IBM Workload Scheduler", + "Stonebranch", + "Tidal", + "cron/Autosys DIY scripts" + ], + "url": "https://www.broadcom.com/products/software/automation/autosys", + "enabled": true, + "notes": "" + }, + { + "id": "aod-dollar-universe", + "name": "Dollar Universe Workload Automation", + "bu": "aod", + "domain": "wla", + "description": "Decentralized, peer-to-peer job scheduling for distributed and ERP-heavy environments.", + "replaces": [ + "BMC Control-M", + "Redwood RunMyJobs", + "SAP native scheduling", + "Stonebranch" + ], + "url": "https://www.broadcom.com/products/software/automation/dollar-universe", + "enabled": true, + "notes": "" + }, + { + "id": "aod-esp-dseries", + "name": "ESP dSeries Workload Automation", + "bu": "aod", + "domain": "wla", + "description": "Cross-platform enterprise scheduling bridging distributed and mainframe workloads.", + "replaces": [ + "BMC Control-M", + "IBM Workload Automation", + "Tidal" + ], + "url": "https://www.broadcom.com/products/software/automation/esp-dseries", + "enabled": true, + "notes": "" + }, + { + "id": "aod-appworx", + "name": "AppWorx Workload Automation", + "bu": "aod", + "domain": "wla", + "description": "Application-aware scheduling for Oracle E-Business Suite, PeopleSoft and Banner environments.", + "replaces": [ + "Redwood RunMyJobs", + "BMC Control-M for Oracle", + "Tidal", + "Oracle Concurrent Manager DIY" + ], + "url": "https://www.broadcom.com/products/software/automation/appworx", + "enabled": true, + "notes": "" + }, + { + "id": "aod-sdm", + "name": "Service Desk Manager", + "bu": "aod", + "domain": "itsm", + "description": "ITIL-aligned service desk: incident, problem, change, knowledge and CMDB.", + "replaces": [ + "ServiceNow ITSM", + "BMC Helix ITSM", + "Ivanti Neurons", + "Jira Service Management", + "Cherwell/Ivanti", + "Freshservice" + ], + "url": "https://www.broadcom.com/products/software/service-management/service-desk-manager", + "enabled": true, + "notes": "" + }, + { + "id": "aod-service-catalog", + "name": "Service Catalog", + "bu": "aod", + "domain": "itsm", + "description": "Self-service request catalog with approval workflow and fulfillment orchestration.", + "replaces": [ + "ServiceNow Service Catalog", + "BMC Digital Workplace", + "Jira Service Management portal" + ], + "url": "https://www.broadcom.com/products/software/service-management/service-catalog", + "enabled": true, + "notes": "" + }, + { + "id": "aod-apm-asset", + "name": "Asset Portfolio Management", + "bu": "aod", + "domain": "itsm", + "description": "IT asset and software license lifecycle management from procurement to disposal.", + "replaces": [ + "Flexera One ITAM", + "ServiceNow SAM Pro", + "Snow Software", + "Ivanti Asset Manager" + ], + "url": "https://www.broadcom.com/products/software/service-management/asset-portfolio-management", + "enabled": true, + "notes": "" + }, + { + "id": "aod-client-automation", + "name": "Client Automation", + "bu": "aod", + "domain": "itsm", + "description": "Endpoint discovery, software delivery, patch and OS deployment for managed desktops and servers.", + "replaces": [ + "Microsoft Intune/SCCM", + "Ivanti Endpoint Manager", + "Tanium", + "BigFix", + "ManageEngine" + ], + "url": "https://www.broadcom.com/products/software/service-management/client-automation", + "enabled": true, + "notes": "" + }, + { + "id": "aod-itpam", + "name": "IT Process Automation Manager", + "bu": "aod", + "domain": "itsm", + "description": "Low-code runbook and IT process automation engine for remediation and fulfillment workflows.", + "replaces": [ + "ServiceNow Flow Designer/Orchestration", + "Red Hat Ansible", + "Resolve Actions", + "BMC Helix Orchestration" + ], + "url": "https://www.broadcom.com/products/software/service-management/it-process-automation-manager", + "enabled": true, + "notes": "" + }, + { + "id": "aod-bsi", + "name": "Business Service Insight", + "bu": "aod", + "domain": "itsm", + "description": "SLA definition, measurement and reporting across internal and outsourced service providers.", + "replaces": [ + "ServiceNow Performance Analytics", + "Custom SLA reporting", + "Apptio" + ], + "url": "https://www.broadcom.com/products/software/service-management/business-service-insight", + "enabled": true, + "notes": "" + }, + { + "id": "aod-service-virtualization", + "name": "Service Virtualization", + "bu": "aod", + "domain": "devops", + "description": "Simulates unavailable or costly dependent services so teams can test continuously and in parallel.", + "replaces": [ + "Parasoft Virtualize", + "SmartBear ReadyAPI", + "WireMock Enterprise", + "Tricentis" + ], + "url": "https://www.broadcom.com/products/software/app-dev/service-virtualization", + "enabled": true, + "notes": "" + }, + { + "id": "aod-tdm", + "name": "Test Data Manager", + "bu": "aod", + "domain": "devops", + "description": "Synthetic and masked test data generation with privacy compliance for non-production environments.", + "replaces": [ + "Delphix", + "Informatica TDM", + "K2View", + "Tonic.ai", + "Redgate Test Data Manager" + ], + "url": "https://www.broadcom.com/products/software/app-dev/test-data-manager", + "enabled": true, + "notes": "" + }, + { + "id": "aod-ard", + "name": "Agile Requirements Designer", + "bu": "aod", + "domain": "devops", + "description": "Model-based requirements and automated test-case generation for maximum coverage with fewer tests.", + "replaces": [ + "Tricentis Tosca", + "Curiosity Modeller", + "Manual test design" + ], + "url": "https://www.broadcom.com/products/software/app-dev/agile-requirements-designer", + "enabled": true, + "notes": "" + }, + { + "id": "aod-harvest", + "name": "Harvest Software Change Manager", + "bu": "aod", + "domain": "devops", + "description": "Enterprise source control and change management with audited promotion across environments.", + "replaces": [ + "Git + custom governance", + "IBM Rational ClearCase", + "Micro Focus Dimensions CM", + "Perforce" + ], + "url": "https://www.broadcom.com/products/software/app-dev/harvest-software-change-manager", + "enabled": true, + "notes": "" + }, + { + "id": "aod-nolio", + "name": "Nolio Release Automation", + "bu": "aod", + "domain": "devops", + "description": "Application release orchestration across environments with reusable deployment models.", + "replaces": [ + "Digital.ai Deploy", + "Octopus Deploy", + "IBM UrbanCode Deploy", + "Harness CD", + "Red Hat Ansible" + ], + "url": "https://www.broadcom.com/products/software/app-dev/nolio-release-automation", + "enabled": true, + "notes": "" + }, + { + "id": "aod-2e", + "name": "CA 2E", + "bu": "aod", + "domain": "devops", + "description": "Model-driven development for IBM i applications with automated code generation.", + "replaces": [ + "Manual RPG/COBOL development", + "ARCAD", + "Fresche Solutions" + ], + "url": "https://www.broadcom.com/products/software/app-dev/2e", + "enabled": true, + "notes": "" + }, + { + "id": "aod-plex", + "name": "CA Plex", + "bu": "aod", + "domain": "devops", + "description": "Model-driven multi-platform application development generating Java, .NET and IBM i code.", + "replaces": [ + "Low-code platforms (OutSystems, Mendix)", + "Manual redevelopment" + ], + "url": "https://www.broadcom.com/products/software/app-dev/plex", + "enabled": true, + "notes": "" + }, + { + "id": "esg-ses-complete", + "name": "Symantec Endpoint Security Complete", + "bu": "esg", + "domain": "endpoint-sec", + "description": "Cloud-managed endpoint protection with attack surface reduction, EDR, threat hunting and Active Directory defence.", + "replaces": [ + "CrowdStrike Falcon", + "Microsoft Defender for Endpoint", + "SentinelOne Singularity", + "Trellix Endpoint", + "Sophos Intercept X", + "Trend Micro Vision One" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/end-user/complete", + "enabled": false, + "notes": "" + }, + { + "id": "esg-ses-enterprise", + "name": "Symantec Endpoint Security Enterprise", + "bu": "esg", + "domain": "endpoint-sec", + "description": "Core endpoint prevention with device control, application isolation and mobile threat defence.", + "replaces": [ + "Microsoft Defender for Business", + "Sophos Endpoint", + "Trend Micro Apex One", + "ESET PROTECT" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/end-user/enterprise", + "enabled": false, + "notes": "" + }, + { + "id": "esg-dcs", + "name": "Symantec Data Center Security", + "bu": "esg", + "domain": "endpoint-sec", + "description": "Hardening and application control for physical, virtual and legacy servers including unsupported OS shielding.", + "replaces": [ + "Trend Micro Deep Security", + "Carbon Black App Control", + "CIS hardening scripts", + "Tripwire" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/hybrid-cloud/data-center-security", + "enabled": false, + "notes": "" + }, + { + "id": "esg-protection-engine", + "name": "Symantec Protection Engine", + "bu": "esg", + "domain": "endpoint-sec", + "description": "Embeddable malware scanning engine for storage, web applications and content repositories.", + "replaces": [ + "Trend Micro ServerProtect", + "ClamAV", + "OPSWAT MetaDefender" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/hybrid-cloud/protection-engine", + "enabled": false, + "notes": "" + }, + { + "id": "esg-itms", + "name": "Symantec IT Management Suite", + "bu": "esg", + "domain": "itsm", + "description": "Unified endpoint discovery, inventory, software delivery, patching and imaging across Windows, macOS and Linux.", + "replaces": [ + "Microsoft Intune + SCCM", + "Ivanti Neurons UEM", + "Tanium", + "HCL BigFix", + "ManageEngine Endpoint Central" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/management/it-management-suite", + "enabled": true, + "notes": "" + }, + { + "id": "esg-cms", + "name": "Symantec Client Management Suite", + "bu": "esg", + "domain": "itsm", + "description": "Desktop lifecycle management: inventory, patch, software delivery and remote control.", + "replaces": [ + "Microsoft Intune", + "Ivanti Endpoint Manager", + "ManageEngine", + "Jamf (macOS)" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/management/client-management-suite", + "enabled": true, + "notes": "" + }, + { + "id": "esg-sms", + "name": "Symantec Server Management Suite", + "bu": "esg", + "domain": "itsm", + "description": "Server provisioning, patch, monitoring and compliance reporting for datacenter estates.", + "replaces": [ + "Red Hat Satellite", + "Microsoft SCCM", + "Ivanti Security Controls", + "Chef/Puppet" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/management/server-management-suite", + "enabled": true, + "notes": "" + }, + { + "id": "esg-ams", + "name": "Symantec Asset Management Suite", + "bu": "esg", + "domain": "itsm", + "description": "Hardware and software asset lifecycle, license compliance and contract management.", + "replaces": [ + "Flexera One", + "Snow Software", + "ServiceNow SAM Pro", + "Lansweeper" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/management/asset-management-suite", + "enabled": true, + "notes": "" + }, + { + "id": "esg-ghost", + "name": "Symantec Ghost Solution Suite", + "bu": "esg", + "domain": "itsm", + "description": "OS imaging, deployment and migration for large endpoint fleets.", + "replaces": [ + "Microsoft MDT/Autopilot", + "Acronis Snap Deploy", + "SmartDeploy", + "Clonezilla" + ], + "url": "https://www.broadcom.com/products/cybersecurity/endpoint/management/ghost-solutions-suite", + "enabled": true, + "notes": "" + }, + { + "id": "esg-dlp-core", + "name": "Symantec Data Loss Prevention Core", + "bu": "esg", + "domain": "data-sec", + "description": "Enterprise DLP across endpoint, network and storage with unified policy, discovery and incident workflow.", + "replaces": [ + "Forcepoint DLP", + "Microsoft Purview DLP", + "Trellix DLP", + "Digital Guardian", + "Zscaler DLP" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/data-loss-prevention-core", + "enabled": false, + "notes": "" + }, + { + "id": "esg-dlp-cloud", + "name": "Symantec Data Loss Prevention Cloud", + "bu": "esg", + "domain": "data-sec", + "description": "Cloud-delivered DLP enforcement for SaaS, email and web channels under one policy set.", + "replaces": [ + "Netskope DLP", + "Zscaler Cloud DLP", + "Microsoft Purview", + "Forcepoint ONE" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/data-loss-prevention-cloud", + "enabled": false, + "notes": "" + }, + { + "id": "esg-cloudsoc", + "name": "Symantec CloudSOC CASB", + "bu": "esg", + "domain": "data-sec", + "description": "Cloud access security broker: shadow IT discovery, SaaS posture, user behaviour analytics and inline controls.", + "replaces": [ + "Netskope", + "Microsoft Defender for Cloud Apps", + "Zscaler CASB", + "Palo Alto SaaS Security" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/data-loss-prevention-cloud/cloud-application-security-cloudsoc", + "enabled": false, + "notes": "" + }, + { + "id": "esg-dlp-cds", + "name": "Symantec DLP Cloud Detection Service", + "bu": "esg", + "domain": "data-sec", + "description": "Scalable cloud-hosted detection service extending DLP policies to cloud traffic without on-prem servers.", + "replaces": [ + "Netskope cloud DLP", + "Zscaler DLP", + "Google Cloud DLP" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/data-loss-prevention-cloud/data-loss-prevention-cloud-detection-service", + "enabled": false, + "notes": "" + }, + { + "id": "esg-encryption", + "name": "Symantec Encryption", + "bu": "esg", + "domain": "data-sec", + "description": "Endpoint, file, folder and email encryption with centralized key management (PGP heritage).", + "replaces": [ + "Microsoft BitLocker + Purview", + "Sophos SafeGuard", + "Thales CipherTrust", + "Virtru" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/encryption", + "enabled": false, + "notes": "" + }, + { + "id": "esg-ccs", + "name": "Symantec Control Compliance Suite", + "bu": "esg", + "domain": "data-sec", + "description": "Security posture assessment, policy compliance and risk reporting against regulatory frameworks.", + "replaces": [ + "Qualys Policy Compliance", + "Tenable", + "Rapid7 InsightVM", + "Archer", + "MetricStream" + ], + "url": "https://www.broadcom.com/products/cybersecurity/information-protection/control-compliance-suite", + "enabled": false, + "notes": "" + }, + { + "id": "esg-proxysg", + "name": "Symantec ProxySG & Advanced Secure Gateway", + "bu": "esg", + "domain": "network-sec", + "description": "On-premises secure web gateway with granular policy, caching, authentication and content inspection.", + "replaces": [ + "Zscaler Internet Access", + "Forcepoint SWG", + "Cisco Umbrella/WSA", + "McAfee/Skyhigh SWG", + "Palo Alto NGFW URL filtering" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/web-protection/proxy-sg-and-advanced-secure-gateway", + "enabled": false, + "notes": "" + }, + { + "id": "esg-cloud-swg", + "name": "Symantec Cloud Secure Web Gateway", + "bu": "esg", + "domain": "network-sec", + "description": "Cloud-delivered web security with full TLS inspection, isolation and DLP integration for hybrid workforces.", + "replaces": [ + "Zscaler Internet Access", + "Netskope NG-SWG", + "Cisco Umbrella", + "Cloudflare Gateway", + "iboss" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/web-protection/cloud-secure-web-gateway", + "enabled": false, + "notes": "" + }, + { + "id": "esg-ssl-visibility", + "name": "Symantec SSL Visibility Appliance", + "bu": "esg", + "domain": "network-sec", + "description": "Dedicated high-throughput TLS/SSL decryption broker feeding decrypted traffic to the security stack.", + "replaces": [ + "Gigamon SSL decryption", + "F5 SSL Orchestrator", + "A10 Thunder SSLi", + "Keysight Vision" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/encrypted-traffic-management/ssl-visibility-appliance", + "enabled": false, + "notes": "" + }, + { + "id": "esg-security-analytics", + "name": "Symantec Security Analytics", + "bu": "esg", + "domain": "network-sec", + "description": "Full-packet capture, network forensics and retrospective incident investigation.", + "replaces": [ + "Corelight", + "NetWitness", + "Arkime", + "Cisco Secure Network Analytics", + "ExtraHop" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/forensics-security-analytics", + "enabled": false, + "notes": "" + }, + { + "id": "esg-content-analysis", + "name": "Symantec Content Analysis & Sandboxing", + "bu": "esg", + "domain": "network-sec", + "description": "Multi-layer malware analysis with static inspection, reputation and dynamic detonation sandboxing.", + "replaces": [ + "Palo Alto WildFire", + "Check Point SandBlast", + "Trellix ATD", + "Joe Sandbox", + "VMRay" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/network-protection/sandboxing", + "enabled": false, + "notes": "" + }, + { + "id": "esg-web-isolation", + "name": "Symantec Web Isolation", + "bu": "esg", + "domain": "network-sec", + "description": "Remote browser isolation executing risky web content away from the endpoint.", + "replaces": [ + "Menlo Security", + "Zscaler Browser Isolation", + "Cloudflare Browser Isolation", + "Ericom" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/network-protection/web-isolation", + "enabled": false, + "notes": "" + }, + { + "id": "esg-ztna", + "name": "Symantec Zero Trust Network Access", + "bu": "esg", + "domain": "network-sec", + "description": "Application-level zero trust access replacing legacy remote-access VPN concentrators.", + "replaces": [ + "Zscaler Private Access", + "Palo Alto Prisma Access", + "Cloudflare Access", + "Netskope Private Access", + "Legacy VPN (Cisco AnyConnect, Pulse)" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/network-protection/zero-trust-network-access", + "enabled": false, + "notes": "" + }, + { + "id": "esg-dfi", + "name": "Symantec Deep File Inspection", + "bu": "esg", + "domain": "network-sec", + "description": "Deep inspection and unpacking of files traversing web and network channels for evasive threats.", + "replaces": [ + "OPSWAT MetaDefender", + "Votiro", + "Glasswall CDR" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/web-protection/deep-file-inspection", + "enabled": false, + "notes": "" + }, + { + "id": "esg-intelligence-services", + "name": "Symantec Intelligence Services (WebFilter)", + "bu": "esg", + "domain": "network-sec", + "description": "Global threat and URL intelligence feeds powering categorization and reputation across the security stack.", + "replaces": [ + "Webroot BrightCloud", + "zvelo", + "Recorded Future", + "Cisco Talos feeds" + ], + "url": "https://www.broadcom.com/products/cybersecurity/network/web-protection/intelligence-services", + "enabled": false, + "notes": "" + }, + { + "id": "esg-email-cloud", + "name": "Symantec Email Security.cloud", + "bu": "esg", + "domain": "email-sec", + "description": "Cloud email gateway with anti-phishing, impersonation controls, link protection and attachment detonation.", + "replaces": [ + "Proofpoint Email Protection", + "Mimecast", + "Microsoft Defender for Office 365", + "Abnormal Security", + "Barracuda" + ], + "url": "https://www.broadcom.com/products/cybersecurity/email/security-cloud", + "enabled": false, + "notes": "" + }, + { + "id": "esg-email-gateway", + "name": "Symantec Messaging Gateway", + "bu": "esg", + "domain": "email-sec", + "description": "On-premises email security gateway with content filtering, encryption and DLP integration.", + "replaces": [ + "Proofpoint on-prem", + "Cisco Secure Email Gateway", + "Trellix Email Security", + "Barracuda ESG" + ], + "url": "https://www.broadcom.com/products/cybersecurity/email/gateway", + "enabled": true, + "notes": "" + }, + { + "id": "esg-email-tdr", + "name": "Symantec Email Threat Detection and Response", + "bu": "esg", + "domain": "email-sec", + "description": "Deep email threat analytics, remediation and clawback for delivered malicious messages.", + "replaces": [ + "Proofpoint TRAP", + "Microsoft Defender AIR", + "Mimecast Threat Remediation", + "Abnormal" + ], + "url": "https://www.broadcom.com/products/cybersecurity/email/threat-detection-and-response", + "enabled": false, + "notes": "" + }, + { + "id": "esg-siteminder", + "name": "Symantec SiteMinder", + "bu": "esg", + "domain": "iam", + "description": "Web access management and SSO/federation for large-scale web and API estates.", + "replaces": [ + "Okta Workforce Identity", + "Microsoft Entra ID", + "Ping Identity", + "ForgeRock/Ping", + "IBM Verify", + "Oracle Access Manager" + ], + "url": "https://www.broadcom.com/products/identity/siteminder", + "enabled": true, + "notes": "" + }, + { + "id": "esg-vip", + "name": "Symantec VIP Authentication", + "bu": "esg", + "domain": "iam", + "description": "Cloud-based multi-factor authentication, passwordless and risk-based access with a broad authenticator ecosystem.", + "replaces": [ + "Duo Security (Cisco)", + "Okta MFA", + "Microsoft Entra MFA", + "RSA SecurID", + "Ping MFA" + ], + "url": "https://www.broadcom.com/products/identity/vip", + "enabled": true, + "notes": "" + }, + { + "id": "esg-iga", + "name": "Symantec Identity Governance & Administration", + "bu": "esg", + "domain": "iam", + "description": "Identity lifecycle, access certification, role mining and segregation-of-duties enforcement.", + "replaces": [ + "SailPoint IdentityIQ/IdentityNow", + "Saviynt", + "One Identity Manager", + "Microsoft Entra ID Governance", + "Omada" + ], + "url": "https://www.broadcom.com/products/identity/iga", + "enabled": true, + "notes": "" + }, + { + "id": "esg-pam", + "name": "Symantec Privileged Access Management", + "bu": "esg", + "domain": "iam", + "description": "Credential vaulting, session recording and least-privilege enforcement for privileged accounts.", + "replaces": [ + "CyberArk PAM", + "BeyondTrust", + "Delinea (Thycotic/Centrify)", + "One Identity Safeguard", + "HashiCorp Vault" + ], + "url": "https://www.broadcom.com/products/identity/pam", + "enabled": true, + "notes": "" + }, + { + "id": "esg-directory", + "name": "Symantec Directory", + "bu": "esg", + "domain": "iam", + "description": "High-performance LDAP/X.500 directory for large identity populations and telco-scale lookups.", + "replaces": [ + "Microsoft AD LDS", + "Ping Directory", + "Oracle Unified Directory", + "OpenLDAP", + "389 Directory Server" + ], + "url": "https://www.broadcom.com/products/identity/directory", + "enabled": true, + "notes": "" + }, + { + "id": "esg-agentminder", + "name": "Symantec AgentMinder", + "bu": "esg", + "domain": "iam", + "description": "Agent and policy-server management tooling for large SiteMinder deployments.", + "replaces": [ + "Custom scripts", + "Ping agent tooling" + ], + "url": "https://www.broadcom.com/products/identity/agentminder", + "enabled": true, + "notes": "" + }, + { + "id": "esg-identity-platform", + "name": "Symantec Identity Security Platform", + "bu": "esg", + "domain": "iam", + "description": "Converged identity platform unifying IGA, PAM, access management and MFA under shared policy and analytics.", + "replaces": [ + "Okta + SailPoint + CyberArk stack", + "Microsoft Entra Suite", + "Ping Identity Platform", + "Saviynt" + ], + "url": "https://www.broadcom.com/products/identity/identity-security-platform", + "enabled": true, + "notes": "" + }, + { + "id": "esg-identity-vcf", + "name": "Symantec Identity Security for VCF", + "bu": "esg", + "domain": "iam", + "description": "Identity security packaged and validated for VMware Cloud Foundation private cloud estates.", + "replaces": [ + "Point IAM tools bolted onto private cloud", + "CyberArk + Okta integrations" + ], + "url": "https://www.broadcom.com/products/identity/identity-security-vcf", + "enabled": true, + "notes": "" + }, + { + "id": "esg-payment-issuers", + "name": "Symantec Payment Security for Issuers", + "bu": "esg", + "domain": "payment-sec", + "description": "3-D Secure issuer authentication and risk-based transaction scoring for card-not-present fraud reduction.", + "replaces": [ + "Entrust 3DS", + "Modirum", + "Netcetera", + "Visa Consumer Authentication Service", + "RSA Adaptive Authentication" + ], + "url": "https://www.broadcom.com/products/software/payment-security/issuers", + "enabled": false, + "notes": "" + }, + { + "id": "esg-payment-merchants", + "name": "Symantec Payment Security for Merchants", + "bu": "esg", + "domain": "payment-sec", + "description": "3-D Secure merchant-side authentication to reduce chargebacks and meet PSD2 SCA requirements.", + "replaces": [ + "Cardinal Commerce (Visa)", + "Adyen 3DS", + "Stripe Radar", + "Entrust" + ], + "url": "https://www.broadcom.com/products/software/payment-security/merchants", + "enabled": false, + "notes": "" + }, + { + "id": "cb-cloud", + "name": "Carbon Black Cloud", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Cloud-native endpoint protection platform consolidating NGAV, behavioural EDR and threat hunting in one sensor.", + "replaces": [ + "CrowdStrike Falcon", + "SentinelOne Singularity", + "Microsoft Defender for Endpoint", + "Cybereason", + "Trellix" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-prevention/carbon-black-cloud", + "enabled": false, + "notes": "" + }, + { + "id": "cb-edr", + "name": "Carbon Black EDR", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Continuous endpoint recording and retrospective threat hunting for SOC teams, available on-prem.", + "replaces": [ + "CrowdStrike Falcon Insight", + "SentinelOne", + "Microsoft Defender XDR", + "Cybereason", + "Velociraptor (OSS)" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-detection-and-response/endpoint-detection-and-response", + "enabled": false, + "notes": "" + }, + { + "id": "cb-app-control", + "name": "Carbon Black App Control", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Application allowlisting and file integrity monitoring for fixed-function and high-risk systems.", + "replaces": [ + "Airlock Digital", + "ThreatLocker", + "Microsoft AppLocker/WDAC", + "Ivanti Application Control" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-prevention/app-control", + "enabled": false, + "notes": "" + }, + { + "id": "cb-endpoint-protection", + "name": "Carbon Black Endpoint Protection", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Next-generation antivirus and behavioural prevention for user endpoints.", + "replaces": [ + "Microsoft Defender Antivirus", + "Sophos Intercept X", + "Trend Micro Apex One", + "Bitdefender GravityZone" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-prevention/endpoint-protection", + "enabled": false, + "notes": "" + }, + { + "id": "cb-workload", + "name": "Carbon Black Workload", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Workload protection for virtual and container hosts with vSphere-native deployment and vulnerability context.", + "replaces": [ + "Trend Micro Cloud One Workload", + "Wiz Runtime", + "CrowdStrike Cloud Security", + "Prisma Cloud Compute", + "Aqua Security" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-prevention/endpoint-protection/workload", + "enabled": false, + "notes": "" + }, + { + "id": "cb-tdr", + "name": "Carbon Black Threat Detection and Response", + "bu": "cb", + "domain": "endpoint-sec", + "description": "Managed and integrated detection and response services layered over Carbon Black telemetry.", + "replaces": [ + "CrowdStrike Falcon Complete", + "Arctic Wolf MDR", + "Red Canary", + "Expel", + "Sophos MDR" + ], + "url": "https://www.broadcom.com/products/carbon-black/threat-detection-and-response", + "enabled": false, + "notes": "" + }, + { + "id": "msd-acf2", + "name": "ACF2", + "bu": "msd", + "domain": "mf-security", + "description": "Comprehensive z/OS external security manager controlling access to datasets, resources and privileged functions.", + "replaces": [ + "IBM RACF", + "Top Secret (internal alternative)" + ], + "url": "https://www.broadcom.com/products/mainframe/security/acf2", + "enabled": true, + "notes": "" + }, + { + "id": "msd-top-secret", + "name": "Top Secret", + "bu": "msd", + "domain": "mf-security", + "description": "z/OS external security manager with granular resource rules, delegation and audit.", + "replaces": [ + "IBM RACF", + "ACF2 (internal alternative)" + ], + "url": "https://www.broadcom.com/products/mainframe/security/top-secret", + "enabled": true, + "notes": "" + }, + { + "id": "msd-cleanup", + "name": "Cleanup", + "bu": "msd", + "domain": "mf-security", + "description": "Automatically identifies and removes unused, obsolete and excessive mainframe entitlements.", + "replaces": [ + "Manual entitlement reviews", + "Vanguard Administrator", + "IBM zSecure Admin" + ], + "url": "https://www.broadcom.com/products/mainframe/security/cleanup", + "enabled": true, + "notes": "" + }, + { + "id": "msd-auditor", + "name": "Auditor", + "bu": "msd", + "domain": "mf-security", + "description": "Automated mainframe security auditing and exposure reporting against baselines and regulations.", + "replaces": [ + "IBM zSecure Audit", + "Vanguard Analyzer", + "Manual audit scripts" + ], + "url": "https://www.broadcom.com/products/mainframe/security/auditor", + "enabled": true, + "notes": "" + }, + { + "id": "msd-cem", + "name": "Compliance Event Manager", + "bu": "msd", + "domain": "mf-security", + "description": "Real-time mainframe compliance monitoring and SIEM-ready event streaming.", + "replaces": [ + "IBM zSecure Alert", + "Vanguard Active Alerts", + "Custom SMF-to-SIEM feeds" + ], + "url": "https://www.broadcom.com/products/mainframe/security/compliance-event-manager", + "enabled": true, + "notes": "" + }, + { + "id": "msd-tamz", + "name": "Trusted Access Manager for Z", + "bu": "msd", + "domain": "mf-security", + "description": "Privileged access management for the mainframe: just-in-time elevation, session recording and credential removal.", + "replaces": [ + "CyberArk (limited z coverage)", + "IBM zSecure", + "Shared privileged IDs (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/security/trusted-access-manager-for-z", + "enabled": true, + "notes": "" + }, + { + "id": "msd-aam", + "name": "Advanced Authentication Mainframe", + "bu": "msd", + "domain": "mf-security", + "description": "Multi-factor authentication for z/OS logon integrated with enterprise MFA providers.", + "replaces": [ + "IBM Z MFA", + "RSA SecurID for z", + "Password-only access (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/security/advanced-authentication-mainframe", + "enabled": true, + "notes": "" + }, + { + "id": "msd-msip", + "name": "Mainframe Security Insights Platform", + "bu": "msd", + "domain": "mf-security", + "description": "Risk scoring and posture visibility for the mainframe, surfaced to enterprise security teams.", + "replaces": [ + "IBM zSecure Visual", + "Manual risk assessments", + "Consulting engagements" + ], + "url": "https://www.broadcom.com/products/mainframe/security/security-insights-platform", + "enabled": true, + "notes": "" + }, + { + "id": "msd-mf-security-suite", + "name": "Mainframe Security Suite", + "bu": "msd", + "domain": "mf-security", + "description": "Integrated bundle of mainframe security, compliance, PAM and MFA capabilities.", + "replaces": [ + "IBM zSecure Suite", + "Vanguard Security Solutions", + "Point-tool patchwork" + ], + "url": "https://www.broadcom.com/products/mainframe/security/mainframe-security-suite", + "enabled": true, + "notes": "" + }, + { + "id": "msd-endevor", + "name": "Endevor Software Change Manager", + "bu": "msd", + "domain": "mf-devops", + "description": "Mainframe source control, build and release management with full audit and rollback.", + "replaces": [ + "IBM Engineering Workflow Management", + "Micro Focus ChangeMan ZMF", + "Panvalet/Librarian (legacy)", + "Git-only DIY" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/endevor", + "enabled": true, + "notes": "" + }, + { + "id": "msd-code4z", + "name": "Code4z", + "bu": "msd", + "domain": "mf-devops", + "description": "Open-source VS Code extension pack bringing modern IDE workflows to COBOL, JCL, HLASM and z/OS.", + "replaces": [ + "IBM Developer for z/OS (IDz)", + "ISPF green screen (status quo)", + "Micro Focus Enterprise Developer" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/code4z", + "enabled": true, + "notes": "" + }, + { + "id": "msd-file-master", + "name": "File Master Plus", + "bu": "msd", + "domain": "mf-devops", + "description": "Mainframe test data management: browse, edit, extract and mask VSAM, Db2 and IMS data.", + "replaces": [ + "IBM File Manager", + "Compuware File-AID (BMC)", + "Manual data staging" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/file-master-plus", + "enabled": true, + "notes": "" + }, + { + "id": "msd-intertest", + "name": "InterTest", + "bu": "msd", + "domain": "mf-devops", + "description": "Interactive source-level debugging for COBOL, PL/I and Assembler in batch and CICS.", + "replaces": [ + "IBM Debug for z/OS", + "Compuware Xpediter (BMC)", + "Display statements (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/intertest", + "enabled": true, + "notes": "" + }, + { + "id": "msd-symdump", + "name": "SymDump", + "bu": "msd", + "domain": "mf-devops", + "description": "Automated abend analysis and symbolic dump interpretation for faster incident resolution.", + "replaces": [ + "IBM Fault Analyzer", + "Compuware Abend-AID (BMC)", + "Manual dump reading" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/symdump", + "enabled": true, + "notes": "" + }, + { + "id": "msd-gen", + "name": "Gen", + "bu": "msd", + "domain": "mf-devops", + "description": "Model-driven application development and code generation for multi-platform enterprise applications.", + "replaces": [ + "Manual redevelopment", + "Low-code platforms", + "CA Plex" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/gen", + "enabled": true, + "notes": "" + }, + { + "id": "msd-hostbridge", + "name": "HostBridge", + "bu": "msd", + "domain": "mf-devops", + "description": "API-enables CICS transactions and mainframe assets for REST/JSON consumption without rewriting.", + "replaces": [ + "IBM z/OS Connect", + "OpenLegacy", + "Custom MQ/screen-scraping middleware" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/hostbridge", + "enabled": true, + "notes": "" + }, + { + "id": "msd-team-build", + "name": "Team Build for Endevor", + "bu": "msd", + "domain": "mf-devops", + "description": "Parallel and isolated developer builds on z/OS for concurrent mainframe development.", + "replaces": [ + "Serialized shared builds (status quo)", + "IBM Dependency Based Build" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/team-build", + "enabled": true, + "notes": "" + }, + { + "id": "msd-panvalet", + "name": "Panvalet & Librarian", + "bu": "msd", + "domain": "mf-devops", + "description": "Legacy mainframe source library management systems; common migration source to Endevor.", + "replaces": [ + "IBM SCLM", + "ChangeMan ZMF", + "Endevor (internal modernization path)" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/panvalet", + "enabled": true, + "notes": "" + }, + { + "id": "msd-sbomz", + "name": "SBOM for z", + "bu": "msd", + "domain": "mf-devops", + "description": "Generates software bills of materials for mainframe applications to satisfy supply-chain mandates.", + "replaces": [ + "Manual inventory spreadsheets", + "Anchore/Syft (distributed only)" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/sbomz", + "enabled": true, + "notes": "" + }, + { + "id": "msd-devops-suite", + "name": "Mainframe DevOps Suite", + "bu": "msd", + "domain": "mf-devops", + "description": "Integrated mainframe DevOps toolchain spanning source control, build, test, debug and deployment.", + "replaces": [ + "BMC AMI DevX", + "IBM Z DevOps portfolio", + "Fragmented point tools" + ], + "url": "https://www.broadcom.com/products/mainframe/application-development-testing-devops/mainframe-devops-suite", + "enabled": true, + "notes": "" + }, + { + "id": "msd-jcl-check", + "name": "JCL Check", + "bu": "msd", + "domain": "mf-devops", + "description": "Validates JCL syntax and runtime dependencies before submission to prevent failed batch runs.", + "replaces": [ + "IBM JCL utilities", + "Manual review", + "ASG-JOB/SCAN" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/jcl-check", + "enabled": true, + "notes": "" + }, + { + "id": "msd-datacom", + "name": "Datacom", + "bu": "msd", + "domain": "mf-database", + "description": "High-performance mainframe database with SQL and native access, used for extreme-throughput transactional systems.", + "replaces": [ + "IBM Db2 for z/OS", + "Migration to distributed RDBMS", + "Adabas (Software AG)" + ], + "url": "https://www.broadcom.com/products/mainframe/databases/datacom", + "enabled": true, + "notes": "" + }, + { + "id": "msd-idms", + "name": "IDMS", + "bu": "msd", + "domain": "mf-database", + "description": "Network-model mainframe database and transaction server with modern SQL, REST and web access.", + "replaces": [ + "IBM IMS", + "IBM Db2 for z/OS", + "Rehost/rewrite programs" + ], + "url": "https://www.broadcom.com/products/mainframe/databases/idms", + "enabled": true, + "notes": "" + }, + { + "id": "msd-db2-suite", + "name": "Database Management for Db2 for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "Full Db2 tools suite: administration, utilities (load, unload, reorg, copy), performance and recovery management.", + "replaces": [ + "IBM Db2 Tools for z/OS", + "BMC AMI Data for Db2", + "Native IBM utilities (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/database-management/db2-zos-suite", + "enabled": true, + "notes": "" + }, + { + "id": "msd-db2-performance", + "name": "Performance Suite for Db2 for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "Db2 subsystem and SQL performance monitoring, tuning and workload analysis.", + "replaces": [ + "IBM OMEGAMON for Db2", + "BMC AMI Ops for Db2", + "Manual EXPLAIN analysis" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/performance-suite-db2-for-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-db2-utility", + "name": "Utility Suite for Db2 for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "High-speed Db2 utilities for load, unload, reorg, copy and recovery with reduced outage windows.", + "replaces": [ + "IBM Db2 Utilities Suite", + "BMC AMI Utilities", + "IBM native utilities" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/utility-suite-db2-for-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-db2-admin", + "name": "Administration Suite for Db2 for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "Db2 object change management, schema migration, compare and secure administration tooling.", + "replaces": [ + "IBM Db2 Administration Tool", + "BMC AMI Change Manager", + "Hand-written DDL scripts" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/administration-suite-db2-for-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ims-suite", + "name": "Database Management for IMS for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "IMS database administration, reorganization, recovery, index and performance tooling.", + "replaces": [ + "IBM IMS Tools", + "BMC AMI Data for IMS", + "Native IMS utilities" + ], + "url": "https://www.broadcom.com/products/mainframe/database-management/ims-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-log-analyzer", + "name": "Log Analyzer for Db2 for z/OS", + "bu": "msd", + "domain": "mf-database", + "description": "Db2 log analysis for auditing, undo/redo SQL generation and data replication feeds.", + "replaces": [ + "IBM Db2 Log Analysis Tool", + "BMC AMI Log Master", + "Manual log parsing" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/log-analyzer-for-db2-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-watchtower", + "name": "Watchtower Platform", + "bu": "msd", + "domain": "mf-observability", + "description": "Unified mainframe observability platform with dashboards, ML insights and enterprise telemetry integration.", + "replaces": [ + "IBM Z Operations Analytics", + "BMC AMI Ops", + "Splunk with custom SMF feeds" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/watchtower-platform-dashboards", + "enabled": true, + "notes": "" + }, + { + "id": "msd-sysview", + "name": "SYSVIEW Performance Management", + "bu": "msd", + "domain": "mf-observability", + "description": "Real-time z/OS performance monitoring across CICS, Db2, MQ, IMS, storage and network from one interface.", + "replaces": [ + "IBM OMEGAMON", + "BMC AMI Ops Monitors", + "ASG-TMON", + "Multiple single-subsystem monitors" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/sysview", + "enabled": true, + "notes": "" + }, + { + "id": "msd-netmaster", + "name": "NetMaster Network Management", + "bu": "msd", + "domain": "mf-observability", + "description": "Mainframe network management for TCP/IP and SNA with automation and problem isolation.", + "replaces": [ + "IBM OMEGAMON for Networks", + "IBM NetView", + "BMC AMI Ops for Networks" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/netmaster", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ops-mvs", + "name": "OPS/MVS Event Management & Automation", + "bu": "msd", + "domain": "mf-observability", + "description": "Rules-based z/OS event automation and systems programming automation replacing manual console operations.", + "replaces": [ + "IBM System Automation for z/OS", + "BMC AMI Ops Automation", + "IBM NetView", + "REXX console scripts" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/ops-mvs", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ap4z", + "name": "Application Performance for z (AP4Z)", + "bu": "msd", + "domain": "mf-observability", + "description": "Application-level mainframe performance visibility connected to distributed APM traces.", + "replaces": [ + "IBM Application Performance Analyzer", + "BMC AMI Strobe", + "Compuware Strobe" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/ap4z", + "enabled": true, + "notes": "" + }, + { + "id": "msd-app-tuner", + "name": "Mainframe Application Tuner", + "bu": "msd", + "domain": "mf-observability", + "description": "Code-level CPU profiling to find and remove the most expensive mainframe instructions and reduce MSU spend.", + "replaces": [ + "IBM Application Performance Analyzer", + "BMC AMI Strobe", + "Manual tuning" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/application-tuner", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ml-insights", + "name": "ML Insights & Alert Insights", + "bu": "msd", + "domain": "mf-observability", + "description": "Machine-learning anomaly detection and alert noise reduction for mainframe operational data.", + "replaces": [ + "IBM Z Anomaly Analytics", + "BMC AMI Ops Insight", + "Static thresholds (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/ml-insights", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ziris", + "name": "zIRIS", + "bu": "msd", + "domain": "mf-observability", + "description": "Streams z/OS performance and health telemetry into enterprise observability platforms such as Splunk, Elastic and Datadog.", + "replaces": [ + "IBM Common Data Provider for z Systems", + "Custom SMF export jobs" + ], + "url": "https://www.broadcom.com/products/mainframe/watchtower-observability/ziris", + "enabled": true, + "notes": "" + }, + { + "id": "msd-mics", + "name": "MICS Resource Management", + "bu": "msd", + "domain": "mf-observability", + "description": "Long-term capacity and chargeback data warehouse built from SMF for trend analysis and planning.", + "replaces": [ + "IBM Tivoli Decision Support for z/OS", + "MXG + SAS", + "Custom SMF warehouses" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/mics-resource-mgmt", + "enabled": true, + "notes": "" + }, + { + "id": "msd-smf-director", + "name": "SMF Director", + "bu": "msd", + "domain": "mf-observability", + "description": "Efficient collection, offload and routing of SMF data to analytics and security platforms.", + "replaces": [ + "IBM Common Data Provider", + "Custom SMF dump/transfer jobs" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/smf-director", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ca7", + "name": "CA 7 Workload Automation", + "bu": "msd", + "domain": "mf-wla", + "description": "Mission-critical z/OS batch scheduling with dependency management, forecasting and recovery.", + "replaces": [ + "IBM Workload Scheduler for z/OS (TWS)", + "BMC Control-M for z/OS", + "Native JES scheduling" + ], + "url": "https://www.broadcom.com/products/mainframe/workload-automation/ca7", + "enabled": true, + "notes": "" + }, + { + "id": "msd-esp-edition", + "name": "ESP Workload Automation", + "bu": "msd", + "domain": "mf-wla", + "description": "Event-driven mainframe scheduling with cross-platform reach and calendar-based workload planning.", + "replaces": [ + "IBM Workload Scheduler for z/OS", + "BMC Control-M", + "Tidal" + ], + "url": "https://www.broadcom.com/products/mainframe/workload-automation/esp-edition", + "enabled": true, + "notes": "" + }, + { + "id": "msd-wla-agents", + "name": "Workload Automation Agents & Integrations", + "bu": "msd", + "domain": "mf-wla", + "description": "Agents and packaged integrations extending mainframe scheduling to SAP, Hadoop, distributed and cloud endpoints.", + "replaces": [ + "BMC Control-M agents", + "Stonebranch", + "Custom scripting and FTP triggers" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/workload-automation-agents", + "enabled": true, + "notes": "" + }, + { + "id": "msd-wla-restart", + "name": "Workload Automation Restart Option", + "bu": "msd", + "domain": "mf-wla", + "description": "Automated batch restart and recovery reducing manual intervention on failed jobs.", + "replaces": [ + "IBM Workload Scheduler restart", + "BMC Control-M/Restart", + "Manual restart procedures" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/workload-automation-restart-option-zos-schedulers", + "enabled": true, + "notes": "" + }, + { + "id": "msd-ca1", + "name": "CA 1 Flexible Storage (Tape Management)", + "bu": "msd", + "domain": "mf-storage", + "description": "Tape volume and dataset lifecycle management with retention, vaulting and audit for z/OS.", + "replaces": [ + "IBM DFSMSrmm", + "BMC AMI Tape (Control-M/Tape)", + "Manual tape registers" + ], + "url": "https://www.broadcom.com/products/mainframe/storage-management/ca-1-flexible-storage", + "enabled": true, + "notes": "" + }, + { + "id": "msd-tlms", + "name": "TLMS Tape Management", + "bu": "msd", + "domain": "mf-storage", + "description": "Alternative tape management system for z/OS retention, vault rotation and media control.", + "replaces": [ + "IBM DFSMSrmm", + "BMC AMI Tape", + "CA 1 (internal alternative)" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/tlms-tape-management", + "enabled": true, + "notes": "" + }, + { + "id": "msd-vantage", + "name": "Vantage Storage Resource Manager", + "bu": "msd", + "domain": "mf-storage", + "description": "Mainframe storage performance, capacity and health monitoring with automated policy enforcement.", + "replaces": [ + "IBM Tivoli Storage Productivity Center", + "BMC AMI Storage", + "Manual DASD reporting" + ], + "url": "https://www.broadcom.com/products/mainframe/storage-management/vantage", + "enabled": true, + "notes": "" + }, + { + "id": "msd-storagepoint", + "name": "Vantage StoragePoint", + "bu": "msd", + "domain": "mf-storage", + "description": "Single pane of glass for mainframe and distributed storage estate reporting.", + "replaces": [ + "IBM Storage Insights", + "Custom storage dashboards" + ], + "url": "https://www.broadcom.com/products/mainframe/storage-management/vantage-storagepoint", + "enabled": true, + "notes": "" + }, + { + "id": "msd-allocate", + "name": "Allocate DASD Space and Placement", + "bu": "msd", + "domain": "mf-storage", + "description": "Intelligent DASD allocation, placement and space failure prevention.", + "replaces": [ + "IBM DFSMS ACS routines", + "Manual volume management" + ], + "url": "https://www.broadcom.com/products/mainframe/storage-management/allocate", + "enabled": true, + "notes": "" + }, + { + "id": "msd-disk-backup", + "name": "Disk Backup and Restore", + "bu": "msd", + "domain": "mf-storage", + "description": "High-speed volume and dataset backup/restore for z/OS DASD.", + "replaces": [ + "IBM DFSMSdss/DFSMShsm", + "Innovation FDR", + "BMC AMI Recovery" + ], + "url": "https://www.broadcom.com/products/mainframe/storage-management/disk-backup-restore", + "enabled": true, + "notes": "" + }, + { + "id": "msd-vtape", + "name": "VTAPE Virtual Tape System", + "bu": "msd", + "domain": "mf-storage", + "description": "Software virtual tape reducing physical tape handling and shortening batch windows.", + "replaces": [ + "IBM TS7700", + "Luminex", + "EMC DLm", + "Physical tape (status quo)" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/vtape-virtual-tape-system", + "enabled": true, + "notes": "" + }, + { + "id": "msd-tape-encryption", + "name": "Tape Encryption", + "bu": "msd", + "domain": "mf-storage", + "description": "Software-based encryption of mainframe tape data at rest with centralized key handling.", + "replaces": [ + "IBM Encryption Facility for z/OS", + "Hardware tape drive encryption", + "Unencrypted tape (risk)" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/tape-encryption", + "enabled": true, + "notes": "" + }, + { + "id": "msd-output-suite", + "name": "Output Management Suite (Deliver, Spool, View, Web Viewer)", + "bu": "msd", + "domain": "mf-storage", + "description": "Enterprise report capture, archival, indexing, distribution and web-based retrieval for mainframe output.", + "replaces": [ + "IBM Content Manager OnDemand", + "Rocket Mobius", + "LRS VPSX", + "Physical print and distribution" + ], + "url": "https://www.broadcom.com/products/mainframe/output-management/output-management-suite", + "enabled": true, + "notes": "" + }, + { + "id": "msd-easytrieve", + "name": "Easytrieve Report Generator", + "bu": "msd", + "domain": "mf-foundation", + "description": "Fourth-generation reporting and data-extract language used widely across mainframe business reporting.", + "replaces": [ + "SAS on z/OS", + "COBOL rewrite", + "Modern BI extract pipelines" + ], + "url": "https://www.broadcom.com/products/mainframe/foundational-and-open-mainframe/easytrieve-report-generator", + "enabled": true, + "notes": "" + }, + { + "id": "msd-zowe", + "name": "Zowe (Open Mainframe)", + "bu": "msd", + "domain": "mf-foundation", + "description": "Open-source mainframe framework providing CLI, APIs and web desktop; Broadcom is a principal contributor and supports enterprise distributions.", + "replaces": [ + "IBM z/OSMF only", + "Proprietary green-screen access", + "Custom REST wrappers" + ], + "url": "https://www.broadcom.com/products/mainframe/foundational-and-open-mainframe/open-source-mainframe-zowe", + "enabled": true, + "notes": "" + }, + { + "id": "msd-tpx", + "name": "TPX Session Management for z/OS", + "bu": "msd", + "domain": "mf-foundation", + "description": "Multi-session VTAM session management with single sign-on across mainframe applications.", + "replaces": [ + "IBM Session Manager", + "CL/SuperSession (Rocket)", + "Multiple separate logons" + ], + "url": "https://www.broadcom.com/products/mainframe/foundational-and-open-mainframe/tpx-session-management-for-zos", + "enabled": true, + "notes": "" + }, + { + "id": "msd-xcom", + "name": "XCOM Data Transport", + "bu": "msd", + "domain": "mf-foundation", + "description": "Secure, managed file transfer between mainframe, distributed and cloud endpoints with restart and audit.", + "replaces": [ + "IBM Connect:Direct (Sterling)", + "Axway", + "GoAnywhere MFT", + "Unsecured FTP scripts" + ], + "url": "https://www.broadcom.com/products/mainframe/foundational-and-open-mainframe/xcom-data-transport", + "enabled": true, + "notes": "" + }, + { + "id": "msd-mim", + "name": "MIM Resource Sharing", + "bu": "msd", + "domain": "mf-foundation", + "description": "Cross-system resource, tape and console sharing for multi-LPAR and sysplex environments.", + "replaces": [ + "IBM GRS", + "Native sysplex serialization", + "Manual coordination" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/mim-resource-sharing", + "enabled": true, + "notes": "" + }, + { + "id": "msd-mri", + "name": "Mainframe Resource Intelligence (MRI)", + "bu": "msd", + "domain": "mf-foundation", + "description": "Automated assessment of mainframe estate usage, risk and modernization opportunities.", + "replaces": [ + "Consulting-led assessments", + "Manual inventory" + ], + "url": "https://www.broadcom.com/products/mainframe/foundational-and-open-mainframe/mri", + "enabled": true, + "notes": "" + }, + { + "id": "msd-vm-manager", + "name": "VM Manager Suite & VM:Secure for z/VM", + "bu": "msd", + "domain": "mf-foundation", + "description": "z/VM management, security, directory maintenance, backup and operations automation.", + "replaces": [ + "IBM z/VM native utilities", + "Manual DIRMAINT administration" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/vm-manager-suite", + "enabled": true, + "notes": "" + }, + { + "id": "msd-server-automation", + "name": "Server Automation", + "bu": "msd", + "domain": "mf-foundation", + "description": "Cross-platform server provisioning and configuration automation reaching mainframe-connected estates.", + "replaces": [ + "Red Hat Ansible", + "HPE Server Automation", + "Puppet/Chef" + ], + "url": "https://www.broadcom.com/products/mainframe/product-portfolio/server-automation", + "enabled": true, + "notes": "" + } + ] +} diff --git a/data/knowledge-base.json b/data/knowledge-base.json new file mode 100644 index 0000000..69c2d1e --- /dev/null +++ b/data/knowledge-base.json @@ -0,0 +1,16625 @@ +{ + "version": 1, + "updatedAt": "2026-09-23T21:02:11.252Z", + "entries": [ + { + "id": "389-directory-server", + "label": "389 Directory Server", + "vendor": "389", + "product": "Directory Server", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-directory" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "42crunch", + "label": "42Crunch", + "vendor": "42Crunch", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-apisec" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "a10-thunder", + "label": "A10 Thunder", + "vendor": "A10", + "product": "Thunder", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "a10-thunder-ssli", + "label": "A10 Thunder SSLi", + "vendor": "A10", + "product": "Thunder SSLi", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ssl-visibility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "abnormal", + "label": "Abnormal", + "vendor": "Abnormal", + "product": "", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "abnormal-security", + "label": "Abnormal Security", + "vendor": "Abnormal Security", + "product": "", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "acf2-internal-alternative", + "label": "ACF2 (internal alternative)", + "vendor": "ACF2", + "product": "(internal alternative)", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-top-secret" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "acronis-snap-deploy", + "label": "Acronis Snap Deploy", + "vendor": "Acronis", + "product": "Snap Deploy", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-ghost" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "adabas-software-ag", + "label": "Adabas (Software AG)", + "vendor": "Adabas", + "product": "(Software AG)", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-datacom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "adyen-3ds", + "label": "Adyen 3DS", + "vendor": "Adyen", + "product": "3DS", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-merchants" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "airlock-digital", + "label": "Airlock Digital", + "vendor": "Airlock Digital", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-app-control" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "allstacks", + "label": "Allstacks", + "vendor": "Allstacks", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-valueops-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "amazon-eks-anywhere", + "label": "Amazon EKS Anywhere", + "vendor": "Amazon", + "product": "EKS Anywhere", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "vcf-vks", + "tz-tkg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "amazon-elasticache", + "label": "Amazon ElastiCache", + "vendor": "Amazon", + "product": "ElastiCache", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-valkey" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "amazon-rds-for-mysql", + "label": "Amazon RDS for MySQL", + "vendor": "Amazon", + "product": "RDS for MySQL", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-mysql" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "amazon-rds-for-postgresql", + "label": "Amazon RDS for PostgreSQL", + "vendor": "Amazon", + "product": "RDS for PostgreSQL", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-postgres" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "amazon-redshift", + "label": "Amazon Redshift", + "vendor": "Amazon", + "product": "Redshift", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-greenplum" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "anchore-syft-distributed-only", + "label": "Anchore/Syft (distributed only)", + "vendor": "Anchore/Syft", + "product": "(distributed only)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-sbomz" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apache-activemq", + "label": "Apache ActiveMQ", + "vendor": "Apache", + "product": "ActiveMQ", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-rabbitmq" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apache-cloudstack", + "label": "Apache CloudStack", + "vendor": "Apache", + "product": "CloudStack", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-cloud-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apache-ignite", + "label": "Apache Ignite", + "vendor": "Apache", + "product": "Ignite", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-gemfire" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apigee-google", + "label": "Apigee (Google)", + "vendor": "Apigee", + "product": "(Google)", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-0onwj", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 750000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-layer7-gateway" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "apigee-developer-portal", + "label": "Apigee Developer Portal", + "vendor": "Apigee", + "product": "Developer Portal", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-portal" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "appdynamics", + "label": "AppDynamics", + "vendor": "AppDynamics", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-apm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apptio", + "label": "Apptio", + "vendor": "Apptio", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-bsi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "apptio-cloudability", + "label": "Apptio Cloudability", + "vendor": "Apptio", + "product": "Cloudability", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth" + ], + "capability": 5, + "switchEase": 5, + "timeToRoiMonths": 4, + "savingsPct": 70, + "migrationCost": 25000, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-lsuangg", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 310000, + "units": 0, + "capability": 5, + "switchEase": 5, + "timeToRoiMonths": 4, + "savingsPct": 70, + "migrationCost": 25000, + "productIds": [ + "aod-cloudhealth" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.807Z" + }, + { + "id": "aqua-security", + "label": "Aqua Security", + "vendor": "Aqua Security", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-workload" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "arcad", + "label": "ARCAD", + "vendor": "ARCAD", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-2e" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "archer", + "label": "Archer", + "vendor": "Archer", + "product": "", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-ccs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "arctic-wolf", + "label": "Arctic Wolf", + "vendor": "Arctic Wolf", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-mdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "arctic-wolf-mdr", + "label": "Arctic Wolf MDR", + "vendor": "Arctic Wolf", + "product": "MDR", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "arista-cloudvision", + "label": "Arista CloudVision", + "vendor": "Arista", + "product": "CloudVision", + "aliases": [], + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "arkime", + "label": "Arkime", + "vendor": "Arkime", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-security-analytics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "asg-job-scan", + "label": "ASG-JOB/SCAN", + "vendor": "ASG-JOB/SCAN", + "product": "", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-jcl-check" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "asg-tmon", + "label": "ASG-TMON", + "vendor": "ASG-TMON", + "product": "", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-sysview" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "atlassian-jira-align", + "label": "Atlassian Jira Align", + "vendor": "Atlassian", + "product": "Jira Align", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "auvik", + "label": "Auvik", + "vendor": "Auvik", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim-msp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "aws-alb-nlb", + "label": "AWS ALB/NLB", + "vendor": "AWS", + "product": "ALB/NLB", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "aws-api-gateway", + "label": "AWS API Gateway", + "vendor": "AWS", + "product": "API Gateway", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "aws-app-runner", + "label": "AWS App Runner", + "vendor": "AWS", + "product": "App Runner", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "aws-lake-formation", + "label": "AWS Lake Formation", + "vendor": "AWS", + "product": "Lake Formation", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-lake" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "aws-rds", + "label": "AWS RDS", + "vendor": "AWS", + "product": "RDS", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-dsm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "axway", + "label": "Axway", + "vendor": "Axway", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway", + "msd-xcom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "azure-database", + "label": "Azure Database", + "vendor": "Azure", + "product": "Database", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-dsm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "azure-devops-boards", + "label": "Azure DevOps Boards", + "vendor": "Azure", + "product": "DevOps Boards", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "azure-service-bus", + "label": "Azure Service Bus", + "vendor": "Azure", + "product": "Service Bus", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-rabbitmq" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "azure-site-recovery", + "label": "Azure Site Recovery", + "vendor": "Azure", + "product": "Site Recovery", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "azure-stack-hci-edge", + "label": "Azure Stack HCI Edge", + "vendor": "Azure", + "product": "Stack HCI Edge", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-edge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "backstage", + "label": "Backstage", + "vendor": "Backstage", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-portal" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "barracuda", + "label": "Barracuda", + "vendor": "Barracuda", + "product": "", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "barracuda-esg", + "label": "Barracuda ESG", + "vendor": "Barracuda", + "product": "ESG", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "beyondtrust", + "label": "BeyondTrust", + "vendor": "BeyondTrust", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bigfix", + "label": "BigFix", + "vendor": "BigFix", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-client-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bigpanda", + "label": "BigPanda", + "vendor": "BigPanda", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bitdefender-gravityzone", + "label": "Bitdefender GravityZone", + "vendor": "Bitdefender", + "product": "GravityZone", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-endpoint-protection" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-change-manager", + "label": "BMC AMI Change Manager", + "vendor": "BMC", + "product": "AMI Change Manager", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-admin" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-data-for-db2", + "label": "BMC AMI Data for Db2", + "vendor": "BMC", + "product": "AMI Data for Db2", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-data-for-ims", + "label": "BMC AMI Data for IMS", + "vendor": "BMC", + "product": "AMI Data for IMS", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-ims-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-devx", + "label": "BMC AMI DevX", + "vendor": "BMC", + "product": "AMI DevX", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-devops-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-log-master", + "label": "BMC AMI Log Master", + "vendor": "BMC", + "product": "AMI Log Master", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-log-analyzer" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops", + "label": "BMC AMI Ops", + "vendor": "BMC", + "product": "AMI Ops", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-watchtower" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops-automation", + "label": "BMC AMI Ops Automation", + "vendor": "BMC", + "product": "AMI Ops Automation", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ops-mvs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops-for-db2", + "label": "BMC AMI Ops for Db2", + "vendor": "BMC", + "product": "AMI Ops for Db2", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-performance" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops-for-networks", + "label": "BMC AMI Ops for Networks", + "vendor": "BMC", + "product": "AMI Ops for Networks", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-netmaster" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops-insight", + "label": "BMC AMI Ops Insight", + "vendor": "BMC", + "product": "AMI Ops Insight", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ml-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-ops-monitors", + "label": "BMC AMI Ops Monitors", + "vendor": "BMC", + "product": "AMI Ops Monitors", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-sysview" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-recovery", + "label": "BMC AMI Recovery", + "vendor": "BMC", + "product": "AMI Recovery", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-disk-backup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-storage", + "label": "BMC AMI Storage", + "vendor": "BMC", + "product": "AMI Storage", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vantage" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-strobe", + "label": "BMC AMI Strobe", + "vendor": "BMC", + "product": "AMI Strobe", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ap4z", + "msd-app-tuner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-tape", + "label": "BMC AMI Tape", + "vendor": "BMC", + "product": "AMI Tape", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-tlms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-tape-control-m-tape", + "label": "BMC AMI Tape (Control-M/Tape)", + "vendor": "BMC", + "product": "AMI Tape (Control-M/Tape)", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-ca1" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-ami-utilities", + "label": "BMC AMI Utilities", + "vendor": "BMC", + "product": "AMI Utilities", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-utility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-control-m", + "label": "BMC Control-M", + "vendor": "BMC", + "product": "Control-M", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic", + "aod-autosys" + ], + "capability": 5, + "switchEase": 2, + "timeToRoiMonths": 12, + "savingsPct": 65, + "migrationCost": 190000, + "unitLabel": "jobs/day", + "risks": "Batch calendar conversion over a single quarter-end freeze window.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-5f805x6", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 880000, + "units": 9500, + "capability": 5, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 65, + "migrationCost": 190000, + "productIds": [ + "aod-automic", + "aod-autosys" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "guidewell::c-muekmwo0-74d3q", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1500000, + "units": 0, + "capability": 5, + "switchEase": 1, + "timeToRoiMonths": 12, + "savingsPct": 65, + "migrationCost": 190000, + "productIds": [ + "aod-automic", + "aod-autosys" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "bmc-control-m-agents", + "label": "BMC Control-M agents", + "vendor": "BMC", + "product": "Control-M agents", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-wla-agents" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-control-m-for-oracle", + "label": "BMC Control-M for Oracle", + "vendor": "BMC", + "product": "Control-M for Oracle", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-appworx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-control-m-for-z-os", + "label": "BMC Control-M for z/OS", + "vendor": "BMC", + "product": "Control-M for z/OS", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-ca7" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-control-m-restart", + "label": "BMC Control-M/Restart", + "vendor": "BMC", + "product": "Control-M/Restart", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-wla-restart" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-digital-workplace", + "label": "BMC Digital Workplace", + "vendor": "BMC", + "product": "Digital Workplace", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-service-catalog" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-helix-itsm", + "label": "BMC Helix ITSM", + "vendor": "BMC", + "product": "Helix ITSM", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "bmc-helix-orchestration", + "label": "BMC Helix Orchestration", + "vendor": "BMC", + "product": "Helix Orchestration", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-itpam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "broadcom-competitors-bundled-npm-suites", + "label": "Broadcom competitors bundled NPM suites", + "vendor": "Broadcom", + "product": "competitors bundled NPM suites", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-net-observability" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ca-1-internal-alternative", + "label": "CA 1 (internal alternative)", + "vendor": "CA", + "product": "1 (internal alternative)", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-tlms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ca-plex", + "label": "CA Plex", + "vendor": "CA", + "product": "Plex", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-gen" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "calico-enterprise", + "label": "Calico Enterprise", + "vendor": "Calico", + "product": "Enterprise", + "aliases": [], + "domain": "networking", + "productIds": [ + "vcf-antrea" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "carbon-black-app-control", + "label": "Carbon Black App Control", + "vendor": "Carbon", + "product": "Black App Control", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-dcs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "carbonite-migrate", + "label": "Carbonite Migrate", + "vendor": "Carbonite", + "product": "Migrate", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-ops-mobility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cardinal-commerce-visa", + "label": "Cardinal Commerce (Visa)", + "vendor": "Cardinal Commerce", + "product": "(Visa)", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-merchants" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "catchpoint", + "label": "Catchpoint", + "vendor": "Catchpoint", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-appneta" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cato-networks", + "label": "Cato Networks", + "vendor": "Cato Networks", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-sase" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ceph", + "label": "Ceph", + "vendor": "Ceph", + "product": "", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "changeman-zmf", + "label": "ChangeMan ZMF", + "vendor": "ChangeMan", + "product": "ZMF", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-panvalet" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "check-point-quantum", + "label": "Check Point Quantum", + "vendor": "Check Point", + "product": "Quantum", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-gw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "check-point-sandblast", + "label": "Check Point SandBlast", + "vendor": "Check Point", + "product": "SandBlast", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-content-analysis" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "chef", + "label": "Chef", + "vendor": "Chef", + "product": "", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "tz-salt" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-qwqba", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "tz-salt" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "chef-inspec", + "label": "Chef InSpec", + "vendor": "Chef", + "product": "InSpec", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "ans-acc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "chef-puppet", + "label": "Chef/Puppet", + "vendor": "Chef/Puppet", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-sms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cherwell-ivanti", + "label": "Cherwell/Ivanti", + "vendor": "Cherwell/Ivanti", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cilium-enterprise", + "label": "Cilium Enterprise", + "vendor": "Cilium", + "product": "Enterprise", + "aliases": [], + "domain": "networking", + "productIds": [ + "vcf-antrea" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cis-hardening-scripts", + "label": "CIS hardening scripts", + "vendor": "CIS", + "product": "hardening scripts", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-dcs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-aci", + "label": "Cisco ACI", + "vendor": "Cisco", + "product": "ACI", + "aliases": [], + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "macy-s::c-muea0k0k-fu2pl", + "assessmentId": "macy-s", + "customerName": "Macy's", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "ans-nsx" + ], + "recordedAt": "2026-09-23T15:47:09.320Z" + }, + { + "sourceKey": "guidewell::c-mue85gia-y3ulu", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "ans-nsx" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "cisco-nexus-dashboard-insights", + "label": "Cisco Nexus Dashboard Insights", + "vendor": "Cisco", + "product": "Nexus Dashboard Insights", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-networks" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-prime-nexus-dashboard", + "label": "Cisco Prime / Nexus Dashboard", + "vendor": "Cisco", + "product": "Prime / Nexus Dashboard", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-secure-email-gateway", + "label": "Cisco Secure Email Gateway", + "vendor": "Cisco", + "product": "Secure Email Gateway", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-secure-firewall", + "label": "Cisco Secure Firewall", + "vendor": "Cisco", + "product": "Secure Firewall", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-gw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "macy-s::c-muea0k0k-cm854", + "assessmentId": "macy-s", + "customerName": "Macy's", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "ans-vdefend-gw" + ], + "recordedAt": "2026-09-23T15:47:09.320Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T15:47:09.320Z" + }, + { + "id": "cisco-secure-ips", + "label": "Cisco Secure IPS", + "vendor": "Cisco", + "product": "Secure IPS", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-atp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-secure-network-analytics", + "label": "Cisco Secure Network Analytics", + "vendor": "Cisco", + "product": "Secure Network Analytics", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-security-analytics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-secure-workload-tetration", + "label": "Cisco Secure Workload (Tetration)", + "vendor": "Cisco", + "product": "Secure Workload (Tetration)", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-dfw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-talos-feeds", + "label": "Cisco Talos feeds", + "vendor": "Cisco", + "product": "Talos feeds", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-intelligence-services" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-thousandeyes-nexus-dashboard", + "label": "Cisco ThousandEyes + Nexus Dashboard", + "vendor": "Cisco", + "product": "ThousandEyes + Nexus Dashboard", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-net-observability" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-86c14", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 250000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-net-observability" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "cisco-umbrella", + "label": "Cisco Umbrella", + "vendor": "Cisco", + "product": "Umbrella", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-sase", + "esg-cloud-swg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cisco-umbrella-wsa", + "label": "Cisco Umbrella/WSA", + "vendor": "Cisco", + "product": "Umbrella/WSA", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-proxysg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "citrix-adc-netscaler", + "label": "Citrix ADC / NetScaler", + "vendor": "Citrix", + "product": "ADC / NetScaler", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cl-supersession-rocket", + "label": "CL/SuperSession (Rocket)", + "vendor": "CL/SuperSession", + "product": "(Rocket)", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-tpx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "clamav", + "label": "ClamAV", + "vendor": "ClamAV", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-protection-engine" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "clonezilla", + "label": "Clonezilla", + "vendor": "Clonezilla", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-ghost" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloud-provider-billing-exports", + "label": "Cloud provider billing exports", + "vendor": "Cloud", + "product": "provider billing exports", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-usage-meter" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloud-vendor-migration-services", + "label": "Cloud vendor migration services", + "vendor": "Cloud", + "product": "vendor migration services", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-ops-mobility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudability-partner", + "label": "Cloudability Partner", + "vendor": "Cloudability", + "product": "Partner", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth-partner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudbolt", + "label": "CloudBolt", + "vendor": "CloudBolt", + "product": "", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth-partner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudera", + "label": "Cloudera", + "vendor": "Cloudera", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-greenplum", + "tz-data-lake" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudera-data-platform", + "label": "Cloudera Data Platform", + "vendor": "Cloudera", + "product": "Data Platform", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-intel" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudflare-access", + "label": "Cloudflare Access", + "vendor": "Cloudflare", + "product": "Access", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ztna" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudflare-browser-isolation", + "label": "Cloudflare Browser Isolation", + "vendor": "Cloudflare", + "product": "Browser Isolation", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-web-isolation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudflare-gateway", + "label": "Cloudflare Gateway", + "vendor": "Cloudflare", + "product": "Gateway", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cloudzero", + "label": "CloudZero", + "vendor": "CloudZero", + "product": "", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cobol-rewrite", + "label": "COBOL rewrite", + "vendor": "COBOL", + "product": "rewrite", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-easytrieve" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cohesity", + "label": "Cohesity", + "vendor": "Cohesity", + "product": "", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-43w4j", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 450000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-live-recovery" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "commvault", + "label": "Commvault", + "vendor": "Commvault", + "product": "", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "compuware-abend-aid-bmc", + "label": "Compuware Abend-AID (BMC)", + "vendor": "Compuware", + "product": "Abend-AID (BMC)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-symdump" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "compuware-file-aid-bmc", + "label": "Compuware File-AID (BMC)", + "vendor": "Compuware", + "product": "File-AID (BMC)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-file-master" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "compuware-strobe", + "label": "Compuware Strobe", + "vendor": "Compuware", + "product": "Strobe", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ap4z" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "compuware-xpediter-bmc", + "label": "Compuware Xpediter (BMC)", + "vendor": "Compuware", + "product": "Xpediter (BMC)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-intertest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "confluent-platform", + "label": "Confluent Platform", + "vendor": "Confluent", + "product": "Platform", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-intel", + "tz-rabbitmq" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "connectwise-rmm", + "label": "ConnectWise RMM", + "vendor": "ConnectWise", + "product": "RMM", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim-msp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "consulting-engagements", + "label": "Consulting engagements", + "vendor": "Consulting", + "product": "engagements", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-msip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "consulting-led-assessments", + "label": "Consulting-led assessments", + "vendor": "Consulting-led", + "product": "assessments", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-mri" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "control-m-bim", + "label": "Control-M BIM", + "vendor": "Control-M", + "product": "BIM", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "corelight", + "label": "Corelight", + "vendor": "Corelight", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-atp", + "esg-security-analytics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cron-autosys-diy-scripts", + "label": "cron/Autosys DIY scripts", + "vendor": "cron/Autosys", + "product": "DIY scripts", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-autosys" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "crowdstrike-cloud-security", + "label": "CrowdStrike Cloud Security", + "vendor": "CrowdStrike", + "product": "Cloud Security", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-workload" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "crowdstrike-falcon", + "label": "CrowdStrike Falcon", + "vendor": "CrowdStrike", + "product": "Falcon", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-cloud", + "esg-ses-complete" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 9, + "savingsPct": 40, + "migrationCost": 260000, + "unitLabel": "endpoints", + "risks": "Parallel-run required for 60 days; EDR detection parity must be proven to the CISO.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-7zplvbf", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 1450000, + "units": 24000, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 9, + "savingsPct": 40, + "migrationCost": 260000, + "productIds": [ + "cb-cloud", + "esg-ses-complete" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.807Z" + }, + { + "id": "crowdstrike-falcon-complete", + "label": "CrowdStrike Falcon Complete", + "vendor": "CrowdStrike", + "product": "Falcon Complete", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-mdr", + "cb-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "crowdstrike-falcon-insight", + "label": "CrowdStrike Falcon Insight", + "vendor": "CrowdStrike", + "product": "Falcon Insight", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-edr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "crunchy-data", + "label": "Crunchy Data", + "vendor": "Crunchy Data", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-postgres" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "curiosity-modeller", + "label": "Curiosity Modeller", + "vendor": "Curiosity", + "product": "Modeller", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-ard" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-billing-engines", + "label": "Custom billing engines", + "vendor": "Custom", + "product": "billing engines", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth-partner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-chargeback-scripts", + "label": "Custom chargeback scripts", + "vendor": "Custom", + "product": "chargeback scripts", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-usage-meter" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-middleware", + "label": "Custom middleware", + "vendor": "Custom", + "product": "middleware", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-connectall" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-mq-screen-scraping-middleware", + "label": "Custom MQ/screen-scraping middleware", + "vendor": "Custom", + "product": "MQ/screen-scraping middleware", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-hostbridge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-rest-wrappers", + "label": "Custom REST wrappers", + "vendor": "Custom", + "product": "REST wrappers", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-zowe" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-scripting-and-ftp-triggers", + "label": "Custom scripting and FTP triggers", + "vendor": "Custom", + "product": "scripting and FTP triggers", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-wla-agents" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-scripts", + "label": "Custom scripts", + "vendor": "Custom", + "product": "scripts", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-agentminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-sla-dashboards", + "label": "Custom SLA dashboards", + "vendor": "Custom", + "product": "SLA dashboards", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-sla-reporting", + "label": "Custom SLA reporting", + "vendor": "Custom", + "product": "SLA reporting", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-bsi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-smf-dump-transfer-jobs", + "label": "Custom SMF dump/transfer jobs", + "vendor": "Custom", + "product": "SMF dump/transfer jobs", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-smf-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-smf-export-jobs", + "label": "Custom SMF export jobs", + "vendor": "Custom", + "product": "SMF export jobs", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ziris" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-smf-warehouses", + "label": "Custom SMF warehouses", + "vendor": "Custom", + "product": "SMF warehouses", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-mics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-smf-to-siem-feeds", + "label": "Custom SMF-to-SIEM feeds", + "vendor": "Custom", + "product": "SMF-to-SIEM feeds", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cem" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-storage-dashboards", + "label": "Custom storage dashboards", + "vendor": "Custom", + "product": "storage dashboards", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-storagepoint" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "custom-tenant-portals", + "label": "Custom tenant portals", + "vendor": "Custom", + "product": "tenant portals", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-cloud-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cyberark-limited-z-coverage", + "label": "CyberArk (limited z coverage)", + "vendor": "CyberArk", + "product": "(limited z coverage)", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-tamz" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cyberark-okta-integrations", + "label": "CyberArk + Okta integrations", + "vendor": "CyberArk", + "product": "+ Okta integrations", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-identity-vcf" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "cyberark-pam", + "label": "CyberArk PAM", + "vendor": "CyberArk", + "product": "PAM", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-5qky9", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1000000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "esg-pam" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "cybereason", + "label": "Cybereason", + "vendor": "Cybereason", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-cloud", + "cb-edr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "darktrace", + "label": "Darktrace", + "vendor": "Darktrace", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-atp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "databricks", + "label": "Databricks", + "vendor": "Databricks", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-intel" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "databricks-lakehouse", + "label": "Databricks Lakehouse", + "vendor": "Databricks", + "product": "Lakehouse", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-lake" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "datadog", + "label": "Datadog", + "vendor": "Datadog", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-dodhr", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1250000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-dx-oi" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "datadog-apm", + "label": "Datadog APM", + "vendor": "Datadog", + "product": "APM", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-apm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "datadog-infrastructure", + "label": "Datadog Infrastructure", + "vendor": "Datadog", + "product": "Infrastructure", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations", + "aod-dx-uim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "datadog-logs", + "label": "Datadog Logs", + "vendor": "Datadog", + "product": "Logs", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-logs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "delinea-thycotic-centrify", + "label": "Delinea (Thycotic/Centrify)", + "vendor": "Delinea", + "product": "(Thycotic/Centrify)", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "dell-powerflex", + "label": "Dell PowerFlex", + "vendor": "Dell", + "product": "PowerFlex", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-gnxqt", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-vsan" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "delphix", + "label": "Delphix", + "vendor": "Delphix", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-u9cpw", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 750000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-tdm" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "digital-guardian", + "label": "Digital Guardian", + "vendor": "Digital Guardian", + "product": "", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-core" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "digital-ai-agility", + "label": "Digital.ai Agility", + "vendor": "Digital.ai", + "product": "Agility", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "digital-ai-deploy", + "label": "Digital.ai Deploy", + "vendor": "Digital.ai", + "product": "Deploy", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-nolio" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "display-statements-status-quo", + "label": "Display statements (status quo)", + "vendor": "Display", + "product": "statements (status quo)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-intertest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "duo-security-cisco", + "label": "Duo Security (Cisco)", + "vendor": "Duo Security", + "product": "(Cisco)", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-vip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "dynatrace", + "label": "Dynatrace", + "vendor": "Dynatrace", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-apm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-nhcfy", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 2300000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-dx-apm" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "edb-postgres-advanced-server", + "label": "EDB Postgres Advanced Server", + "vendor": "EDB", + "product": "Postgres Advanced Server", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-postgres" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "edb-postgres-enterprise", + "label": "EDB Postgres Enterprise", + "vendor": "EDB", + "product": "Postgres Enterprise", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-dsm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "elastic-apm", + "label": "Elastic APM", + "vendor": "Elastic", + "product": "APM", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-apm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "elastic-stack", + "label": "Elastic Stack", + "vendor": "Elastic", + "product": "Stack", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-logs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "emc-dlm", + "label": "EMC DLm", + "vendor": "EMC", + "product": "DLm", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vtape" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "endevor-internal-modernization-path", + "label": "Endevor (internal modernization path)", + "vendor": "Endevor", + "product": "(internal modernization path)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-panvalet" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "entrust", + "label": "Entrust", + "vendor": "Entrust", + "product": "", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-merchants" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "entrust-3ds", + "label": "Entrust 3DS", + "vendor": "Entrust", + "product": "3DS", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-issuers" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ericom", + "label": "Ericom", + "vendor": "Ericom", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-web-isolation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ericsson-cnis", + "label": "Ericsson CNIS", + "vendor": "Ericsson", + "product": "CNIS", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-telco" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "eset-protect", + "label": "ESET PROTECT", + "vendor": "ESET", + "product": "PROTECT", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-enterprise" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "exalate", + "label": "Exalate", + "vendor": "Exalate", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-connectall" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "expel", + "label": "Expel", + "vendor": "Expel", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-mdr", + "cb-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "extrahop", + "label": "ExtraHop", + "vendor": "ExtraHop", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-networks", + "esg-security-analytics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "extrahop-reveal-x", + "label": "ExtraHop Reveal(x)", + "vendor": "ExtraHop", + "product": "Reveal(x)", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-atp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "f5-big-ip", + "label": "F5 BIG-IP", + "vendor": "F5", + "product": "BIG-IP", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-gywdx", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "ans-avi" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "f5-big-ip-ltm", + "label": "F5 BIG-IP LTM", + "vendor": "F5", + "product": "BIG-IP LTM", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "unitLabel": "appliances", + "risks": "iRules migration needs an audit; 6 legacy apps use custom TCL.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "learned", + "observations": [ + { + "sourceKey": "northwind-financial::c-gnmpnbd", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 1250000, + "units": 42, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "productIds": [ + "ans-avi" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "macy-s::c-muea0k0k-g9e0z", + "assessmentId": "macy-s", + "customerName": "Macy's", + "annualSpend": 0, + "units": 0, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "productIds": [ + "ans-avi" + ], + "recordedAt": "2026-09-23T15:47:09.320Z" + }, + { + "sourceKey": "guidewell::c-mue85gib-lust3", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1200000, + "units": 350, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 6, + "savingsPct": 55, + "migrationCost": 220000, + "productIds": [ + "ans-avi" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.807Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "f5-ssl-orchestrator", + "label": "F5 SSL Orchestrator", + "vendor": "F5", + "product": "SSL Orchestrator", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ssl-visibility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "flexera-one", + "label": "Flexera One", + "vendor": "Flexera", + "product": "One", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth", + "esg-ams" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "flexera-one-itam", + "label": "Flexera One ITAM", + "vendor": "Flexera", + "product": "One ITAM", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-apm-asset" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "forcepoint-dlp", + "label": "Forcepoint DLP", + "vendor": "Forcepoint", + "product": "DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-core" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-1zlfi", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 750000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "esg-dlp-core" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "forcepoint-one", + "label": "Forcepoint ONE", + "vendor": "Forcepoint", + "product": "ONE", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "forcepoint-swg", + "label": "Forcepoint SWG", + "vendor": "Forcepoint", + "product": "SWG", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-proxysg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "forgerock-ping", + "label": "ForgeRock/Ping", + "vendor": "ForgeRock/Ping", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "fortinet-fortigate", + "label": "Fortinet FortiGate", + "vendor": "Fortinet", + "product": "FortiGate", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-gw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "fortinet-secure-sd-wan", + "label": "Fortinet Secure SD-WAN", + "vendor": "Fortinet", + "product": "Secure SD-WAN", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-sase" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "fragmented-point-tools", + "label": "Fragmented point tools", + "vendor": "Fragmented", + "product": "point tools", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-devops-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "fresche-solutions", + "label": "Fresche Solutions", + "vendor": "Fresche", + "product": "Solutions", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-2e" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "freshservice", + "label": "Freshservice", + "vendor": "Freshservice", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "getint", + "label": "Getint", + "vendor": "Getint", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-connectall" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "gigamon", + "label": "Gigamon", + "vendor": "Gigamon", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-networks" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "gigamon-ssl-decryption", + "label": "Gigamon SSL decryption", + "vendor": "Gigamon", + "product": "SSL decryption", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ssl-visibility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "git-custom-governance", + "label": "Git + custom governance", + "vendor": "Git", + "product": "+ custom governance", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-harvest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "git-only-diy", + "label": "Git-only DIY", + "vendor": "Git-only", + "product": "DIY", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-endevor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "glasswall-cdr", + "label": "Glasswall CDR", + "vendor": "Glasswall", + "product": "CDR", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-dfi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "goanywhere-mft", + "label": "GoAnywhere MFT", + "vendor": "GoAnywhere", + "product": "MFT", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-xcom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "google-anthos", + "label": "Google Anthos", + "vendor": "Google", + "product": "Anthos", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "vcf-vks", + "tz-tkg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "google-cloud-dlp", + "label": "Google Cloud DLP", + "vendor": "Google Cloud", + "product": "DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cds" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "google-cloud-run", + "label": "Google Cloud Run", + "vendor": "Google Cloud", + "product": "Run", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "grafana-cloud", + "label": "Grafana Cloud", + "vendor": "Grafana", + "product": "Cloud", + "aliases": [], + "domain": "observability", + "productIds": [ + "tz-observability" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "graylog", + "label": "Graylog", + "vendor": "Graylog", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-logs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "guardicore-akamai", + "label": "Guardicore (Akamai)", + "vendor": "Guardicore", + "product": "(Akamai)", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-dfw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hand-written-ddl-scripts", + "label": "Hand-written DDL scripts", + "vendor": "Hand-written", + "product": "DDL scripts", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-admin" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "haproxy-enterprise", + "label": "HAProxy Enterprise", + "vendor": "HAProxy", + "product": "Enterprise", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hardware-tape-drive-encryption", + "label": "Hardware tape drive encryption", + "vendor": "Hardware", + "product": "tape drive encryption", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-tape-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "harness-cd", + "label": "Harness CD", + "vendor": "Harness", + "product": "CD", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-nolio" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "harness-cloud-cost", + "label": "Harness Cloud Cost", + "vendor": "Harness", + "product": "Cloud Cost", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hashicorp-vault", + "label": "HashiCorp Vault", + "vendor": "HashiCorp", + "product": "Vault", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hazelcast", + "label": "Hazelcast", + "vendor": "Hazelcast", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-gemfire" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hcl-bigfix", + "label": "HCL BigFix", + "vendor": "HCL", + "product": "BigFix", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-itms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "heroku", + "label": "Heroku", + "vendor": "Heroku", + "product": "", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hpe-server-automation", + "label": "HPE Server Automation", + "vendor": "HPE", + "product": "Server Automation", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-server-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hyper-v", + "label": "Hyper-V", + "vendor": "Hyper-V", + "product": "", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vvf" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "hyper-v-client", + "label": "Hyper-V (client)", + "vendor": "Hyper-V", + "product": "(client)", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-desktop-hypervisor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-api-connect", + "label": "IBM API Connect", + "vendor": "IBM", + "product": "API Connect", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-application-performance-analyzer", + "label": "IBM Application Performance Analyzer", + "vendor": "IBM", + "product": "Application Performance Analyzer", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ap4z", + "msd-app-tuner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-common-data-provider", + "label": "IBM Common Data Provider", + "vendor": "IBM", + "product": "Common Data Provider", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-smf-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-common-data-provider-for-z-systems", + "label": "IBM Common Data Provider for z Systems", + "vendor": "IBM", + "product": "Common Data Provider for z Systems", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ziris" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-connect-direct-sterling", + "label": "IBM Connect:Direct (Sterling)", + "vendor": "IBM", + "product": "Connect:Direct (Sterling)", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-xcom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-content-manager-ondemand", + "label": "IBM Content Manager OnDemand", + "vendor": "IBM", + "product": "Content Manager OnDemand", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-output-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-db2-administration-tool", + "label": "IBM Db2 Administration Tool", + "vendor": "IBM", + "product": "Db2 Administration Tool", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-admin" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-db2-for-z-os", + "label": "IBM Db2 for z/OS", + "vendor": "IBM", + "product": "Db2 for z/OS", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-datacom", + "msd-idms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-db2-log-analysis-tool", + "label": "IBM Db2 Log Analysis Tool", + "vendor": "IBM", + "product": "Db2 Log Analysis Tool", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-log-analyzer" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-db2-tools-for-z-os", + "label": "IBM Db2 Tools for z/OS", + "vendor": "IBM", + "product": "Db2 Tools for z/OS", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-suite", + "msd-db2-utility" + ], + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 10, + "savingsPct": 45, + "migrationCost": 150000, + "unitLabel": "MSU", + "risks": "Utility JCL conversion; run both suites in parallel for one reorg cycle.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-1krnhgi", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 1100000, + "units": 2400, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 10, + "savingsPct": 45, + "migrationCost": 150000, + "productIds": [ + "msd-db2-suite", + "msd-db2-utility" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.807Z" + }, + { + "id": "ibm-db2-utilities-suite", + "label": "IBM Db2 Utilities Suite", + "vendor": "IBM", + "product": "Db2 Utilities Suite", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-utility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-debug-for-z-os", + "label": "IBM Debug for z/OS", + "vendor": "IBM", + "product": "Debug for z/OS", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-intertest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-dependency-based-build", + "label": "IBM Dependency Based Build", + "vendor": "IBM", + "product": "Dependency Based Build", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-team-build" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-developer-for-z-os-idz", + "label": "IBM Developer for z/OS (IDz)", + "vendor": "IBM", + "product": "Developer for z/OS (IDz)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-code4z" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-dfsms-acs-routines", + "label": "IBM DFSMS ACS routines", + "vendor": "IBM", + "product": "DFSMS ACS routines", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-allocate" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-dfsmsdss-dfsmshsm", + "label": "IBM DFSMSdss/DFSMShsm", + "vendor": "IBM", + "product": "DFSMSdss/DFSMShsm", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-disk-backup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-dfsmsrmm", + "label": "IBM DFSMSrmm", + "vendor": "IBM", + "product": "DFSMSrmm", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-ca1", + "msd-tlms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-encryption-facility-for-z-os", + "label": "IBM Encryption Facility for z/OS", + "vendor": "IBM", + "product": "Encryption Facility for z/OS", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-tape-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-engineering-workflow-management", + "label": "IBM Engineering Workflow Management", + "vendor": "IBM", + "product": "Engineering Workflow Management", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-endevor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-fault-analyzer", + "label": "IBM Fault Analyzer", + "vendor": "IBM", + "product": "Fault Analyzer", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-symdump" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-file-manager", + "label": "IBM File Manager", + "vendor": "IBM", + "product": "File Manager", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-file-master" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-grs", + "label": "IBM GRS", + "vendor": "IBM", + "product": "GRS", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-mim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-ims", + "label": "IBM IMS", + "vendor": "IBM", + "product": "IMS", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-idms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-ims-tools", + "label": "IBM IMS Tools", + "vendor": "IBM", + "product": "IMS Tools", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-ims-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-jcl-utilities", + "label": "IBM JCL utilities", + "vendor": "IBM", + "product": "JCL utilities", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-jcl-check" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-mq", + "label": "IBM MQ", + "vendor": "IBM", + "product": "MQ", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-rabbitmq" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-native-utilities", + "label": "IBM native utilities", + "vendor": "IBM", + "product": "native utilities", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-utility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-netview", + "label": "IBM NetView", + "vendor": "IBM", + "product": "NetView", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-netmaster", + "msd-ops-mvs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-omegamon", + "label": "IBM OMEGAMON", + "vendor": "IBM", + "product": "OMEGAMON", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-sysview" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-omegamon-for-db2", + "label": "IBM OMEGAMON for Db2", + "vendor": "IBM", + "product": "OMEGAMON for Db2", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-performance" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-omegamon-for-networks", + "label": "IBM OMEGAMON for Networks", + "vendor": "IBM", + "product": "OMEGAMON for Networks", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-netmaster" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-racf", + "label": "IBM RACF", + "vendor": "IBM", + "product": "RACF", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-acf2", + "msd-top-secret" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-p3bry", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "msd-acf2", + "msd-top-secret" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "ibm-rational-clearcase", + "label": "IBM Rational ClearCase", + "vendor": "IBM", + "product": "Rational ClearCase", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-harvest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-sclm", + "label": "IBM SCLM", + "vendor": "IBM", + "product": "SCLM", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-panvalet" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-session-manager", + "label": "IBM Session Manager", + "vendor": "IBM", + "product": "Session Manager", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-tpx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-storage-insights", + "label": "IBM Storage Insights", + "vendor": "IBM", + "product": "Storage Insights", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-storagepoint" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-system-automation-for-z-os", + "label": "IBM System Automation for z/OS", + "vendor": "IBM", + "product": "System Automation for z/OS", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ops-mvs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-tivoli-decision-support-for-z-os", + "label": "IBM Tivoli Decision Support for z/OS", + "vendor": "IBM", + "product": "Tivoli Decision Support for z/OS", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-mics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-tivoli-storage-productivity-center", + "label": "IBM Tivoli Storage Productivity Center", + "vendor": "IBM", + "product": "Tivoli Storage Productivity Center", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vantage" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-ts7700", + "label": "IBM TS7700", + "vendor": "IBM", + "product": "TS7700", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vtape" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-urbancode-deploy", + "label": "IBM UrbanCode Deploy", + "vendor": "IBM", + "product": "UrbanCode Deploy", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-nolio" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-verify", + "label": "IBM Verify", + "vendor": "IBM", + "product": "Verify", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-websphere-liberty", + "label": "IBM WebSphere Liberty", + "vendor": "IBM", + "product": "WebSphere Liberty", + "aliases": [], + "domain": "devops", + "productIds": [ + "tz-spring" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-workload-automation", + "label": "IBM Workload Automation", + "vendor": "IBM", + "product": "Workload Automation", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic", + "aod-esp-dseries" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-workload-scheduler", + "label": "IBM Workload Scheduler", + "vendor": "IBM", + "product": "Workload Scheduler", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-autosys" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-workload-scheduler-for-z-os", + "label": "IBM Workload Scheduler for z/OS", + "vendor": "IBM", + "product": "Workload Scheduler for z/OS", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-esp-edition" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-workload-scheduler-for-z-os-tws", + "label": "IBM Workload Scheduler for z/OS (TWS)", + "vendor": "IBM", + "product": "Workload Scheduler for z/OS (TWS)", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-ca7" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-workload-scheduler-restart", + "label": "IBM Workload Scheduler restart", + "vendor": "IBM", + "product": "Workload Scheduler restart", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-wla-restart" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-anomaly-analytics", + "label": "IBM Z Anomaly Analytics", + "vendor": "IBM", + "product": "Z Anomaly Analytics", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ml-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-devops-portfolio", + "label": "IBM Z DevOps portfolio", + "vendor": "IBM", + "product": "Z DevOps portfolio", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-devops-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-mfa", + "label": "IBM Z MFA", + "vendor": "IBM", + "product": "Z MFA", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-aam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-operations-analytics", + "label": "IBM Z Operations Analytics", + "vendor": "IBM", + "product": "Z Operations Analytics", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-watchtower" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-os-connect", + "label": "IBM z/OS Connect", + "vendor": "IBM", + "product": "z/OS Connect", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-hostbridge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-osmf-only", + "label": "IBM z/OSMF only", + "vendor": "IBM", + "product": "z/OSMF only", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-zowe" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-z-vm-native-utilities", + "label": "IBM z/VM native utilities", + "vendor": "IBM", + "product": "z/VM native utilities", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-vm-manager" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure", + "label": "IBM zSecure", + "vendor": "IBM", + "product": "zSecure", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-tamz" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure-admin", + "label": "IBM zSecure Admin", + "vendor": "IBM", + "product": "zSecure Admin", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cleanup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure-alert", + "label": "IBM zSecure Alert", + "vendor": "IBM", + "product": "zSecure Alert", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cem" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure-audit", + "label": "IBM zSecure Audit", + "vendor": "IBM", + "product": "zSecure Audit", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-auditor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure-suite", + "label": "IBM zSecure Suite", + "vendor": "IBM", + "product": "zSecure Suite", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-mf-security-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ibm-zsecure-visual", + "label": "IBM zSecure Visual", + "vendor": "IBM", + "product": "zSecure Visual", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-msip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "iboss", + "label": "iboss", + "vendor": "iboss", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "illumio-core", + "label": "Illumio Core", + "vendor": "Illumio", + "product": "Core", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-dfw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "imperva-api-security", + "label": "Imperva API Security", + "vendor": "Imperva", + "product": "API Security", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-apisec" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "informatica-tdm", + "label": "Informatica TDM", + "vendor": "Informatica", + "product": "TDM", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "innovation-fdr", + "label": "Innovation FDR", + "vendor": "Innovation", + "product": "FDR", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-disk-backup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "internal-diy-platforms", + "label": "Internal DIY platforms", + "vendor": "Internal", + "product": "DIY platforms", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ispf-green-screen-status-quo", + "label": "ISPF green screen (status quo)", + "vendor": "ISPF", + "product": "green screen (status quo)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-code4z" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-application-control", + "label": "Ivanti Application Control", + "vendor": "Ivanti", + "product": "Application Control", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-app-control" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-asset-manager", + "label": "Ivanti Asset Manager", + "vendor": "Ivanti", + "product": "Asset Manager", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-apm-asset" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-endpoint-manager", + "label": "Ivanti Endpoint Manager", + "vendor": "Ivanti", + "product": "Endpoint Manager", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-client-automation", + "esg-cms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-neurons", + "label": "Ivanti Neurons", + "vendor": "Ivanti", + "product": "Neurons", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-neurons-uem", + "label": "Ivanti Neurons UEM", + "vendor": "Ivanti", + "product": "Neurons UEM", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-itms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ivanti-security-controls", + "label": "Ivanti Security Controls", + "vendor": "Ivanti", + "product": "Security Controls", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-sms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "jamf-macos", + "label": "Jamf (macOS)", + "vendor": "Jamf", + "product": "(macOS)", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-cms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "jellyfish", + "label": "Jellyfish", + "vendor": "Jellyfish", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-valueops-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "jira-service-management", + "label": "Jira Service Management", + "vendor": "Jira", + "product": "Service Management", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "jira-service-management-portal", + "label": "Jira Service Management portal", + "vendor": "Jira", + "product": "Service Management portal", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-service-catalog" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "joe-sandbox", + "label": "Joe Sandbox", + "vendor": "Joe", + "product": "Sandbox", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-content-analysis" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "juniper-apstra", + "label": "Juniper Apstra", + "vendor": "Juniper", + "product": "Apstra", + "aliases": [], + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "k2view", + "label": "K2View", + "vendor": "K2View", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "kentik", + "label": "Kentik", + "vendor": "Kentik", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-networks", + "aod-appneta" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "keysight-vision", + "label": "Keysight Vision", + "vendor": "Keysight", + "product": "Vision", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ssl-visibility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "kong-developer-portal", + "label": "Kong Developer Portal", + "vendor": "Kong", + "product": "Developer Portal", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-portal" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "kong-enterprise", + "label": "Kong Enterprise", + "vendor": "Kong", + "product": "Enterprise", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "kvm", + "label": "KVM", + "vendor": "KVM", + "product": "", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "lansweeper", + "label": "Lansweeper", + "vendor": "Lansweeper", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-ams" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "legacy-vpn-cisco-anyconnect-pulse", + "label": "Legacy VPN (Cisco AnyConnect, Pulse)", + "vendor": "Legacy", + "product": "VPN (Cisco AnyConnect, Pulse)", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ztna" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "linearb", + "label": "LinearB", + "vendor": "LinearB", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-valueops-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "logicmonitor", + "label": "LogicMonitor", + "vendor": "LogicMonitor", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-i3jxb", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 250000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-dx-uim" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "logicmonitor-msp", + "label": "LogicMonitor MSP", + "vendor": "LogicMonitor", + "product": "MSP", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim-msp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "low-code-platforms", + "label": "Low-code platforms", + "vendor": "Low-code", + "product": "platforms", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-gen" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "low-code-platforms-outsystems-mendix", + "label": "Low-code platforms (OutSystems, Mendix)", + "vendor": "Low-code", + "product": "platforms (OutSystems, Mendix)", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-plex" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "lrs-vpsx", + "label": "LRS VPSX", + "vendor": "LRS", + "product": "VPSX", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-output-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "luminex", + "label": "Luminex", + "vendor": "Luminex", + "product": "", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vtape" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manageengine", + "label": "ManageEngine", + "vendor": "ManageEngine", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-client-automation", + "esg-cms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manageengine-endpoint-central", + "label": "ManageEngine Endpoint Central", + "vendor": "ManageEngine", + "product": "Endpoint Central", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-itms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-audit-scripts", + "label": "Manual audit scripts", + "vendor": "Manual", + "product": "audit scripts", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-auditor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-coordination", + "label": "Manual coordination", + "vendor": "Manual", + "product": "coordination", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-mim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-dasd-reporting", + "label": "Manual DASD reporting", + "vendor": "Manual", + "product": "DASD reporting", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vantage" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-data-staging", + "label": "Manual data staging", + "vendor": "Manual", + "product": "data staging", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-file-master" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-dirmaint-administration", + "label": "Manual DIRMAINT administration", + "vendor": "Manual", + "product": "DIRMAINT administration", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-vm-manager" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-dump-reading", + "label": "Manual dump reading", + "vendor": "Manual", + "product": "dump reading", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-symdump" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-entitlement-reviews", + "label": "Manual entitlement reviews", + "vendor": "Manual", + "product": "entitlement reviews", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cleanup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-explain-analysis", + "label": "Manual EXPLAIN analysis", + "vendor": "Manual", + "product": "EXPLAIN analysis", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-performance" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-inventory", + "label": "Manual inventory", + "vendor": "Manual", + "product": "inventory", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-mri" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-inventory-spreadsheets", + "label": "Manual inventory spreadsheets", + "vendor": "Manual", + "product": "inventory spreadsheets", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-sbomz" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-log-parsing", + "label": "Manual log parsing", + "vendor": "Manual", + "product": "log parsing", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-log-analyzer" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-redevelopment", + "label": "Manual redevelopment", + "vendor": "Manual", + "product": "redevelopment", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-plex", + "msd-gen" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-restart-procedures", + "label": "Manual restart procedures", + "vendor": "Manual", + "product": "restart procedures", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-wla-restart" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-review", + "label": "Manual review", + "vendor": "Manual", + "product": "review", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-jcl-check" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-risk-assessments", + "label": "Manual risk assessments", + "vendor": "Manual", + "product": "risk assessments", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-msip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-rpg-cobol-development", + "label": "Manual RPG/COBOL development", + "vendor": "Manual", + "product": "RPG/COBOL development", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-2e" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-tape-registers", + "label": "Manual tape registers", + "vendor": "Manual", + "product": "tape registers", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-ca1" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-test-design", + "label": "Manual test design", + "vendor": "Manual", + "product": "test design", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-ard" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-tuning", + "label": "Manual tuning", + "vendor": "Manual", + "product": "tuning", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-app-tuner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "manual-volume-management", + "label": "Manual volume management", + "vendor": "Manual", + "product": "volume management", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-allocate" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mcafee-skyhigh-swg", + "label": "McAfee/Skyhigh SWG", + "vendor": "McAfee/Skyhigh", + "product": "SWG", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-proxysg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "memcached", + "label": "Memcached", + "vendor": "Memcached", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-valkey" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "menlo-security", + "label": "Menlo Security", + "vendor": "Menlo Security", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-web-isolation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "metricstream", + "label": "MetricStream", + "vendor": "MetricStream", + "product": "", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-ccs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "micro-focus-changeman-zmf", + "label": "Micro Focus ChangeMan ZMF", + "vendor": "Micro Focus", + "product": "ChangeMan ZMF", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-endevor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "micro-focus-dimensions-cm", + "label": "Micro Focus Dimensions CM", + "vendor": "Micro Focus", + "product": "Dimensions CM", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-harvest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "micro-focus-enterprise-developer", + "label": "Micro Focus Enterprise Developer", + "vendor": "Micro Focus", + "product": "Enterprise Developer", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-code4z" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "micro-focus-nnmi", + "label": "Micro Focus NNMi", + "vendor": "Micro Focus", + "product": "NNMi", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-ad-lds", + "label": "Microsoft AD LDS", + "vendor": "Microsoft", + "product": "AD LDS", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-directory" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-applocker-wdac", + "label": "Microsoft AppLocker/WDAC", + "vendor": "Microsoft", + "product": "AppLocker/WDAC", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-app-control" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-azure-local", + "label": "Microsoft Azure Local", + "vendor": "Microsoft", + "product": "Azure Local", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-foundation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwny-4a31v", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-foundation" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "microsoft-bitlocker-purview", + "label": "Microsoft BitLocker + Purview", + "vendor": "Microsoft", + "product": "BitLocker + Purview", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-air", + "label": "Microsoft Defender AIR", + "vendor": "Microsoft", + "product": "Defender AIR", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-antivirus", + "label": "Microsoft Defender Antivirus", + "vendor": "Microsoft", + "product": "Defender Antivirus", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-endpoint-protection" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-for-business", + "label": "Microsoft Defender for Business", + "vendor": "Microsoft", + "product": "Defender for Business", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-enterprise" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-for-cloud-apps", + "label": "Microsoft Defender for Cloud Apps", + "vendor": "Microsoft", + "product": "Defender for Cloud Apps", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-cloudsoc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-for-endpoint", + "label": "Microsoft Defender for Endpoint", + "vendor": "Microsoft", + "product": "Defender for Endpoint", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-complete", + "cb-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-for-office-365", + "label": "Microsoft Defender for Office 365", + "vendor": "Microsoft", + "product": "Defender for Office 365", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-defender-xdr", + "label": "Microsoft Defender XDR", + "vendor": "Microsoft", + "product": "Defender XDR", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-edr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-entra-id", + "label": "Microsoft Entra ID", + "vendor": "Microsoft", + "product": "Entra ID", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-entra-id-governance", + "label": "Microsoft Entra ID Governance", + "vendor": "Microsoft", + "product": "Entra ID Governance", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-entra-mfa", + "label": "Microsoft Entra MFA", + "vendor": "Microsoft", + "product": "Entra MFA", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-vip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-entra-suite", + "label": "Microsoft Entra Suite", + "vendor": "Microsoft", + "product": "Entra Suite", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-identity-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-hyper-v", + "label": "Microsoft Hyper-V", + "vendor": "Microsoft", + "product": "Hyper-V", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-intune", + "label": "Microsoft Intune", + "vendor": "Microsoft", + "product": "Intune", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-cms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-intune-sccm", + "label": "Microsoft Intune/SCCM", + "vendor": "Microsoft", + "product": "Intune/SCCM", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "tz-salt", + "aod-client-automation", + "esg-itms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-mdt-autopilot", + "label": "Microsoft MDT/Autopilot", + "vendor": "Microsoft", + "product": "MDT/Autopilot", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-ghost" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-project-planner-premium", + "label": "Microsoft Project/Planner Premium", + "vendor": "Microsoft", + "product": "Project/Planner Premium", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-clarity" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-purview", + "label": "Microsoft Purview", + "vendor": "Microsoft", + "product": "Purview", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-purview-dlp", + "label": "Microsoft Purview DLP", + "vendor": "Microsoft", + "product": "Purview DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-core" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-sccm", + "label": "Microsoft SCCM", + "vendor": "Microsoft", + "product": "SCCM", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-sms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-scom", + "label": "Microsoft SCOM", + "vendor": "Microsoft", + "product": "SCOM", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-scvmm", + "label": "Microsoft SCVMM", + "vendor": "Microsoft", + "product": "SCVMM", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vcenter" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "microsoft-storage-spaces-direct", + "label": "Microsoft Storage Spaces Direct", + "vendor": "Microsoft", + "product": "Storage Spaces Direct", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "migration-to-distributed-rdbms", + "label": "Migration to distributed RDBMS", + "vendor": "Migration", + "product": "to distributed RDBMS", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-datacom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mimecast", + "label": "Mimecast", + "vendor": "Mimecast", + "product": "", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mimecast-threat-remediation", + "label": "Mimecast Threat Remediation", + "vendor": "Mimecast", + "product": "Threat Remediation", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mirantis-kubernetes-engine", + "label": "Mirantis Kubernetes Engine", + "vendor": "Mirantis", + "product": "Kubernetes Engine", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-tkg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "modern-bi-extract-pipelines", + "label": "Modern BI extract pipelines", + "vendor": "Modern", + "product": "BI extract pipelines", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-easytrieve" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "modirum", + "label": "Modirum", + "vendor": "Modirum", + "product": "", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-issuers" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "moogsoft", + "label": "Moogsoft", + "vendor": "Moogsoft", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "morpheus-data", + "label": "Morpheus Data", + "vendor": "Morpheus Data", + "product": "", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mulesoft-anypoint", + "label": "MuleSoft Anypoint", + "vendor": "MuleSoft", + "product": "Anypoint", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "multiple-separate-logons", + "label": "Multiple separate logons", + "vendor": "Multiple", + "product": "separate logons", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-tpx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "multiple-single-subsystem-monitors", + "label": "Multiple single-subsystem monitors", + "vendor": "Multiple", + "product": "single-subsystem monitors", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-sysview" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "mxg-sas", + "label": "MXG + SAS", + "vendor": "MXG", + "product": "+ SAS", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-mics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "n-able-n-central", + "label": "N-able N-central", + "vendor": "N-able", + "product": "N-central", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim-msp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nagios-op5", + "label": "Nagios/op5", + "vendor": "Nagios/op5", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-uim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-aws-azure-cost-tools", + "label": "Native AWS/Azure cost tools", + "vendor": "Native", + "product": "AWS/Azure cost tools", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-cloud-vpc-networking", + "label": "Native cloud VPC networking", + "vendor": "Native", + "product": "cloud VPC networking", + "aliases": [], + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-ibm-utilities-status-quo", + "label": "Native IBM utilities (status quo)", + "vendor": "Native", + "product": "IBM utilities (status quo)", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-db2-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-ims-utilities", + "label": "Native IMS utilities", + "vendor": "Native", + "product": "IMS utilities", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-ims-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-jes-scheduling", + "label": "Native JES scheduling", + "vendor": "Native", + "product": "JES scheduling", + "aliases": [], + "domain": "mf-wla", + "productIds": [ + "msd-ca7" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "native-sysplex-serialization", + "label": "Native sysplex serialization", + "vendor": "Native", + "product": "sysplex serialization", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-mim" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netapp-pure-external-arrays", + "label": "NetApp/Pure external arrays", + "vendor": "NetApp/Pure", + "product": "external arrays", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-snnoe", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-vsan" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "netbrain", + "label": "NetBrain", + "vendor": "NetBrain", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-networks" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netcetera", + "label": "Netcetera", + "vendor": "Netcetera", + "product": "", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-issuers" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netscout", + "label": "NetScout", + "vendor": "NetScout", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-net-observability" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netscout-ngeniusone", + "label": "NetScout nGeniusONE", + "vendor": "NetScout", + "product": "nGeniusONE", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-appneta" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netskope", + "label": "Netskope", + "vendor": "Netskope", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-sase", + "esg-cloudsoc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netskope-cloud-dlp", + "label": "Netskope cloud DLP", + "vendor": "Netskope", + "product": "cloud DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cds" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netskope-dlp", + "label": "Netskope DLP", + "vendor": "Netskope", + "product": "DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netskope-ng-swg", + "label": "Netskope NG-SWG", + "vendor": "Netskope", + "product": "NG-SWG", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netskope-private-access", + "label": "Netskope Private Access", + "vendor": "Netskope", + "product": "Private Access", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ztna" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "netwitness", + "label": "NetWitness", + "vendor": "NetWitness", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-security-analytics" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "new-relic", + "label": "New Relic", + "vendor": "New", + "product": "Relic", + "aliases": [], + "domain": "observability", + "productIds": [ + "tz-observability", + "aod-dx-apm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nginx-plus", + "label": "Nginx Plus", + "vendor": "Nginx", + "product": "Plus", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nokia-cbis", + "label": "Nokia CBIS", + "vendor": "Nokia", + "product": "CBIS", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-telco" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nokia-sr-linux", + "label": "Nokia SR Linux", + "vendor": "Nokia", + "product": "SR Linux", + "aliases": [], + "domain": "networking", + "productIds": [ + "ans-nsx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "noname-security", + "label": "Noname Security", + "vendor": "Noname Security", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-apisec" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nutanix-ahv", + "label": "Nutanix AHV", + "vendor": "Nutanix", + "product": "AHV", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vvf", + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-4872y", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 100000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-vvf", + "vcf-vsphere" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "nutanix-cloud-platform", + "label": "Nutanix Cloud Platform", + "vendor": "Nutanix", + "product": "Cloud Platform", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-foundation", + "vcf-vsan" + ], + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 8, + "savingsPct": 30, + "migrationCost": 400000, + "unitLabel": "nodes", + "risks": "AHV to ESXi conversion for 900 VMs; requires a rolling maintenance plan.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-a84itug", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 2600000, + "units": 180, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 8, + "savingsPct": 30, + "migrationCost": 400000, + "productIds": [ + "vcf-foundation", + "vcf-vsan" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "guidewell::c-muekmwny-8ume9", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 5, + "switchEase": 4, + "timeToRoiMonths": 8, + "savingsPct": 30, + "migrationCost": 400000, + "productIds": [ + "vcf-foundation", + "vcf-vsan" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "nutanix-distributed-storage", + "label": "Nutanix Distributed Storage", + "vendor": "Nutanix", + "product": "Distributed Storage", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-y3wmt", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-vsan" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "nutanix-edge", + "label": "Nutanix Edge", + "vendor": "Nutanix", + "product": "Edge", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-edge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nutanix-prism-central", + "label": "Nutanix Prism Central", + "vendor": "Nutanix", + "product": "Prism Central", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vcenter" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nutanix-prism-ops", + "label": "Nutanix Prism Ops", + "vendor": "Nutanix", + "product": "Prism Ops", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "nvidia-ai-enterprise-standalone", + "label": "NVIDIA AI Enterprise standalone", + "vendor": "NVIDIA", + "product": "AI Enterprise standalone", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-private-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "octopus-deploy", + "label": "Octopus Deploy", + "vendor": "Octopus", + "product": "Deploy", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-nolio" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "okta-sailpoint-cyberark-stack", + "label": "Okta + SailPoint + CyberArk stack", + "vendor": "Okta", + "product": "+ SailPoint + CyberArk stack", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-identity-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "okta-mfa", + "label": "Okta MFA", + "vendor": "Okta", + "product": "MFA", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-vip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "okta-workforce-identity", + "label": "Okta Workforce Identity", + "vendor": "Okta", + "product": "Workforce Identity", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-9ewt3", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1500000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "esg-siteminder" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "omada", + "label": "Omada", + "vendor": "Omada", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "one-identity-manager", + "label": "One Identity Manager", + "vendor": "One Identity", + "product": "Manager", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "one-identity-safeguard", + "label": "One Identity Safeguard", + "vendor": "One Identity", + "product": "Safeguard", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-pam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "openldap", + "label": "OpenLDAP", + "vendor": "OpenLDAP", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-directory" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "openlegacy", + "label": "OpenLegacy", + "vendor": "OpenLegacy", + "product": "", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-hostbridge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "openstack", + "label": "OpenStack", + "vendor": "OpenStack", + "product": "", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-foundation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "openstack-horizon", + "label": "OpenStack Horizon", + "vendor": "OpenStack", + "product": "Horizon", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-cloud-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "opswat-metadefender", + "label": "OPSWAT MetaDefender", + "vendor": "OPSWAT", + "product": "MetaDefender", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-protection-engine", + "esg-dfi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-access-manager", + "label": "Oracle Access Manager", + "vendor": "Oracle", + "product": "Access Manager", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-coherence", + "label": "Oracle Coherence", + "vendor": "Oracle", + "product": "Coherence", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-gemfire" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-concurrent-manager-diy", + "label": "Oracle Concurrent Manager DIY", + "vendor": "Oracle", + "product": "Concurrent Manager DIY", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-appworx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-database-migration-target", + "label": "Oracle Database (migration target)", + "vendor": "Oracle", + "product": "Database (migration target)", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-postgres" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-exadata", + "label": "Oracle Exadata", + "vendor": "Oracle", + "product": "Exadata", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-greenplum" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-mysql-enterprise", + "label": "Oracle MySQL Enterprise", + "vendor": "Oracle", + "product": "MySQL Enterprise", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-mysql" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-unified-directory", + "label": "Oracle Unified Directory", + "vendor": "Oracle", + "product": "Unified Directory", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-directory" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-virtualbox", + "label": "Oracle VirtualBox", + "vendor": "Oracle", + "product": "VirtualBox", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-desktop-hypervisor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-vm", + "label": "Oracle VM", + "vendor": "Oracle", + "product": "VM", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "oracle-weblogic", + "label": "Oracle WebLogic", + "vendor": "Oracle", + "product": "WebLogic", + "aliases": [], + "domain": "devops", + "productIds": [ + "tz-spring" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ovirt-manager", + "label": "oVirt Manager", + "vendor": "oVirt", + "product": "Manager", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vcenter" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "pagerduty-aiops", + "label": "PagerDuty AIOps", + "vendor": "PagerDuty", + "product": "AIOps", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-ngfw", + "label": "Palo Alto NGFW", + "vendor": "Palo Alto", + "product": "NGFW", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-gw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-ngfw-url-filtering", + "label": "Palo Alto NGFW URL filtering", + "vendor": "Palo Alto", + "product": "NGFW URL filtering", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-proxysg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-prisma-access", + "label": "Palo Alto Prisma Access", + "vendor": "Palo Alto", + "product": "Prisma Access", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ztna" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-saas-security", + "label": "Palo Alto SaaS Security", + "vendor": "Palo Alto", + "product": "SaaS Security", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-cloudsoc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-vm-series", + "label": "Palo Alto VM-Series", + "vendor": "Palo Alto", + "product": "VM-Series", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-dfw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "palo-alto-wildfire", + "label": "Palo Alto WildFire", + "vendor": "Palo Alto", + "product": "WildFire", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-content-analysis" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "panvalet-librarian-legacy", + "label": "Panvalet/Librarian (legacy)", + "vendor": "Panvalet/Librarian", + "product": "(legacy)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-endevor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "parallels-desktop", + "label": "Parallels Desktop", + "vendor": "Parallels", + "product": "Desktop", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-desktop-hypervisor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "parasoft-virtualize", + "label": "Parasoft Virtualize", + "vendor": "Parasoft", + "product": "Virtualize", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-service-virtualization" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "password-only-access-status-quo", + "label": "Password-only access (status quo)", + "vendor": "Password-only", + "product": "access (status quo)", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-aam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "percona", + "label": "Percona", + "vendor": "Percona", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-mysql" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "perforce", + "label": "Perforce", + "vendor": "Perforce", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-harvest" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T20:45:19.046Z" + }, + { + "id": "physical-print-and-distribution", + "label": "Physical print and distribution", + "vendor": "Physical", + "product": "print and distribution", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-output-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "physical-tape-status-quo", + "label": "Physical tape (status quo)", + "vendor": "Physical", + "product": "tape (status quo)", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-vtape" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ping-agent-tooling", + "label": "Ping agent tooling", + "vendor": "Ping", + "product": "agent tooling", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-agentminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ping-directory", + "label": "Ping Directory", + "vendor": "Ping", + "product": "Directory", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-directory" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ping-identity", + "label": "Ping Identity", + "vendor": "Ping Identity", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-siteminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ping-identity-platform", + "label": "Ping Identity Platform", + "vendor": "Ping Identity", + "product": "Platform", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-identity-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "ping-mfa", + "label": "Ping MFA", + "vendor": "Ping", + "product": "MFA", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-vip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "planview-agileplace", + "label": "Planview AgilePlace", + "vendor": "Planview", + "product": "AgilePlace", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-7sw2r", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 2000000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-rally" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "planview-portfolios", + "label": "Planview Portfolios", + "vendor": "Planview", + "product": "Portfolios", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-clarity" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "planview-viz", + "label": "Planview Viz", + "vendor": "Planview", + "product": "Viz", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-valueops-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "point-iam-tools-bolted-onto-private-cloud", + "label": "Point IAM tools bolted onto private cloud", + "vendor": "Point", + "product": "IAM tools bolted onto private cloud", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-identity-vcf" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "point-tool-patchwork", + "label": "Point-tool patchwork", + "vendor": "Point-tool", + "product": "patchwork", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-mf-security-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "postman-enterprise", + "label": "Postman Enterprise", + "vendor": "Postman", + "product": "Enterprise", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-portal" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "prisma-cloud-compute", + "label": "Prisma Cloud Compute", + "vendor": "Prisma Cloud", + "product": "Compute", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-workload" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "proofpoint-email-protection", + "label": "Proofpoint Email Protection", + "vendor": "Proofpoint", + "product": "Email Protection", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwo0-hptfr", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 250000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "esg-email-cloud" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "proofpoint-on-prem", + "label": "Proofpoint on-prem", + "vendor": "Proofpoint", + "product": "on-prem", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "proofpoint-trap", + "label": "Proofpoint TRAP", + "vendor": "Proofpoint", + "product": "TRAP", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "proprietary-green-screen-access", + "label": "Proprietary green-screen access", + "vendor": "Proprietary", + "product": "green-screen access", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-zowe" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "proxmox-ve", + "label": "Proxmox VE", + "vendor": "Proxmox", + "product": "VE", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vvf", + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "public-cloud-ai-platforms", + "label": "Public cloud AI platforms", + "vendor": "Public", + "product": "cloud AI platforms", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-private-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "public-cloud-iaas-aws-azure-gcp", + "label": "Public cloud IaaS (AWS/Azure/GCP)", + "vendor": "Public", + "product": "cloud IaaS (AWS/Azure/GCP)", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-foundation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "puppet-enterprise", + "label": "Puppet Enterprise", + "vendor": "Puppet", + "product": "Enterprise", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "tz-salt" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-cf4a5", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 0, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "tz-salt" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "puppet-chef", + "label": "Puppet/Chef", + "vendor": "Puppet/Chef", + "product": "", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-server-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "qualys-policy-compliance", + "label": "Qualys Policy Compliance", + "vendor": "Qualys", + "product": "Policy Compliance", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "ans-acc", + "esg-ccs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rackware", + "label": "RackWare", + "vendor": "RackWare", + "product": "", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-ops-mobility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "radware-alteon", + "label": "Radware Alteon", + "vendor": "Radware", + "product": "Alteon", + "aliases": [], + "domain": "adc", + "productIds": [ + "ans-avi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rancher", + "label": "Rancher", + "vendor": "Rancher", + "product": "", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "vcf-vks" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-fvbfn", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 550000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-vks" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "rapid7-insightvm", + "label": "Rapid7 InsightVM", + "vendor": "Rapid7", + "product": "InsightVM", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "ans-acc", + "esg-ccs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "recorded-future", + "label": "Recorded Future", + "vendor": "Recorded Future", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-intelligence-services" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-canary", + "label": "Red Canary", + "vendor": "Red Canary", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-mdr", + "cb-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-ansible", + "label": "Red Hat Ansible", + "vendor": "Red Hat", + "product": "Ansible", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-itpam", + "aod-nolio", + "msd-server-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-ansible-automation-platform", + "label": "Red Hat Ansible Automation Platform", + "vendor": "Red Hat", + "product": "Ansible Automation Platform", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-automation", + "tz-salt" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-device-edge", + "label": "Red Hat Device Edge", + "vendor": "Red Hat", + "product": "Device Edge", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-edge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-jboss-eap", + "label": "Red Hat JBoss EAP", + "vendor": "Red Hat", + "product": "JBoss EAP", + "aliases": [], + "domain": "devops", + "productIds": [ + "tz-spring" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-openshift", + "label": "Red Hat OpenShift", + "vendor": "Red Hat", + "product": "OpenShift", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "vcf-vks", + "tz-platform", + "tz-tkg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-openshift-telco", + "label": "Red Hat OpenShift Telco", + "vendor": "Red Hat", + "product": "OpenShift Telco", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-telco" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-hpdnq", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 500000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "vcf-telco" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "red-hat-openshift-virtualization", + "label": "Red Hat OpenShift Virtualization", + "vendor": "Red Hat", + "product": "OpenShift Virtualization", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-foundation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-satellite", + "label": "Red Hat Satellite", + "vendor": "Red Hat", + "product": "Satellite", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-sms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "red-hat-virtualization", + "label": "Red Hat Virtualization", + "vendor": "Red Hat", + "product": "Virtualization", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vvf" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "redgate-test-data-manager", + "label": "Redgate Test Data Manager", + "vendor": "Redgate", + "product": "Test Data Manager", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "redis-enterprise", + "label": "Redis Enterprise", + "vendor": "Redis", + "product": "Enterprise", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-gemfire", + "tz-valkey" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "redwood-runmyjobs", + "label": "Redwood RunMyJobs", + "vendor": "Redwood", + "product": "RunMyJobs", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic", + "aod-dollar-universe", + "aod-appworx" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rehost-rewrite-programs", + "label": "Rehost/rewrite programs", + "vendor": "Rehost/rewrite", + "product": "programs", + "aliases": [], + "domain": "mf-database", + "productIds": [ + "msd-idms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "resolve-actions", + "label": "Resolve Actions", + "vendor": "Resolve", + "product": "Actions", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-itpam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rexx-console-scripts", + "label": "REXX console scripts", + "vendor": "REXX", + "product": "console scripts", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ops-mvs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rocket-mobius", + "label": "Rocket Mobius", + "vendor": "Rocket", + "product": "Mobius", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-output-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rsa-adaptive-authentication", + "label": "RSA Adaptive Authentication", + "vendor": "RSA", + "product": "Adaptive Authentication", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-issuers" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rsa-securid", + "label": "RSA SecurID", + "vendor": "RSA", + "product": "SecurID", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-vip" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rsa-securid-for-z", + "label": "RSA SecurID for z", + "vendor": "RSA", + "product": "SecurID for z", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-aam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "rubrik", + "label": "Rubrik", + "vendor": "Rubrik", + "product": "", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "run-ai", + "label": "Run:ai", + "vendor": "Run:ai", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-private-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sailpoint-identityiq", + "label": "SailPoint IdentityIQ", + "vendor": "SailPoint", + "product": "IdentityIQ", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga", + "esg-agentminder" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 14, + "savingsPct": 38, + "migrationCost": 260000, + "unitLabel": "identities", + "risks": "Access certification campaigns must not lapse during cutover.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "learned", + "observations": [ + { + "sourceKey": "northwind-financial::c-j12ddgu", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 720000, + "units": 38000, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 14, + "savingsPct": 50, + "migrationCost": 170000, + "productIds": [ + "esg-iga" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "guidewell::c-mue8670f-dkmq4", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1500000, + "units": 45000, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 14, + "savingsPct": 25, + "migrationCost": 350000, + "productIds": [ + "esg-iga", + "esg-agentminder" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.807Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "sailpoint-identityiq-identitynow", + "label": "SailPoint IdentityIQ/IdentityNow", + "vendor": "SailPoint", + "product": "IdentityIQ/IdentityNow", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "salt-security", + "label": "Salt Security", + "vendor": "Salt Security", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-apisec" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sap-native-scheduling", + "label": "SAP native scheduling", + "vendor": "SAP", + "product": "native scheduling", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-dollar-universe" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sas-on-z-os", + "label": "SAS on z/OS", + "vendor": "SAS", + "product": "on z/OS", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-easytrieve" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "saviynt", + "label": "Saviynt", + "vendor": "Saviynt", + "product": "", + "aliases": [], + "domain": "iam", + "productIds": [ + "esg-iga", + "esg-identity-platform" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "scale-computing", + "label": "Scale Computing", + "vendor": "Scale Computing", + "product": "", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-edge" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "scalr", + "label": "Scalr", + "vendor": "Scalr", + "product": "", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sciencelogic", + "label": "ScienceLogic", + "vendor": "ScienceLogic", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "self-managed-db-teams", + "label": "Self-managed DB teams", + "vendor": "Self-managed", + "product": "DB teams", + "aliases": [], + "domain": "data", + "productIds": [ + "vcf-dsm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sentinelone", + "label": "SentinelOne", + "vendor": "SentinelOne", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-edr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sentinelone-singularity", + "label": "SentinelOne Singularity", + "vendor": "SentinelOne", + "product": "Singularity", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-complete", + "cb-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sentinelone-vigilance", + "label": "SentinelOne Vigilance", + "vendor": "SentinelOne", + "product": "Vigilance", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-mdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "serialized-shared-builds-status-quo", + "label": "Serialized shared builds (status quo)", + "vendor": "Serialized", + "product": "shared builds (status quo)", + "aliases": [], + "domain": "mf-devops", + "productIds": [ + "msd-team-build" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-cloud-provisioning", + "label": "ServiceNow Cloud Provisioning", + "vendor": "ServiceNow", + "product": "Cloud Provisioning", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-flow-designer-orchestration", + "label": "ServiceNow Flow Designer/Orchestration", + "vendor": "ServiceNow", + "product": "Flow Designer/Orchestration", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-itpam" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-itom-event-management", + "label": "ServiceNow ITOM Event Management", + "vendor": "ServiceNow", + "product": "ITOM Event Management", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-itsm", + "label": "ServiceNow ITSM", + "vendor": "ServiceNow", + "product": "ITSM", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-sdm", + "aod-service-catalog" + ], + "capability": 3, + "switchEase": 1, + "timeToRoiMonths": 30, + "savingsPct": 35, + "migrationCost": 900000, + "unitLabel": "fulfiller seats", + "risks": "Deeply embedded workflows and 40+ integrations. Treat as a long-horizon option only.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-nmte6kw", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 1900000, + "units": 3100, + "capability": 3, + "switchEase": 1, + "timeToRoiMonths": 30, + "savingsPct": 35, + "migrationCost": 900000, + "productIds": [ + "aod-sdm", + "aod-service-catalog" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T20:50:14.283Z" + }, + { + "id": "servicenow-performance-analytics", + "label": "ServiceNow Performance Analytics", + "vendor": "ServiceNow", + "product": "Performance Analytics", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-bsi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-sam-pro", + "label": "ServiceNow SAM Pro", + "vendor": "ServiceNow", + "product": "SAM Pro", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-apm-asset", + "esg-ams" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-service-catalog", + "label": "ServiceNow Service Catalog", + "vendor": "ServiceNow", + "product": "Service Catalog", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-service-catalog" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "servicenow-spm", + "label": "ServiceNow SPM", + "vendor": "ServiceNow", + "product": "SPM", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-clarity" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "shared-privileged-ids-status-quo", + "label": "Shared privileged IDs (status quo)", + "vendor": "Shared", + "product": "privileged IDs (status quo)", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-tamz" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "smartbear-readyapi", + "label": "SmartBear ReadyAPI", + "vendor": "SmartBear", + "product": "ReadyAPI", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-service-virtualization" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "smartdeploy", + "label": "SmartDeploy", + "vendor": "SmartDeploy", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "esg-ghost" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "smartsheet", + "label": "Smartsheet", + "vendor": "Smartsheet", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-clarity" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "snow-software", + "label": "Snow Software", + "vendor": "Snow Software", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-apm-asset", + "esg-ams" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "snowflake", + "label": "Snowflake", + "vendor": "Snowflake", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-data-intel", + "tz-greenplum", + "tz-data-lake" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "solace", + "label": "Solace", + "vendor": "Solace", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-rabbitmq" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "solarwinds", + "label": "SolarWinds", + "vendor": "SolarWinds", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "guidewell::c-muekmwnz-eh34y", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 125000, + "units": 0, + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "productIds": [ + "aod-netops" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "solarwinds-npm", + "label": "SolarWinds NPM", + "vendor": "SolarWinds", + "product": "NPM", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "solarwinds-vman", + "label": "SolarWinds VMAN", + "vendor": "SolarWinds", + "product": "VMAN", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sophos-endpoint", + "label": "Sophos Endpoint", + "vendor": "Sophos", + "product": "Endpoint", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-enterprise" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sophos-intercept-x", + "label": "Sophos Intercept X", + "vendor": "Sophos", + "product": "Intercept X", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-complete", + "cb-endpoint-protection" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sophos-mdr", + "label": "Sophos MDR", + "vendor": "Sophos", + "product": "MDR", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-tdr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sophos-safeguard", + "label": "Sophos SafeGuard", + "vendor": "Sophos", + "product": "SafeGuard", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "splunk-enterprise", + "label": "Splunk Enterprise", + "vendor": "Splunk", + "product": "Enterprise", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-logs", + "aod-dx-oi" + ], + "capability": 3, + "switchEase": 2, + "timeToRoiMonths": 18, + "savingsPct": 45, + "migrationCost": 480000, + "unitLabel": "GB/day", + "risks": "SOC dashboards and 300+ saved searches must be rebuilt. Security team sign-off required.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-mhfs3kf", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 2100000, + "units": 1400, + "capability": 3, + "switchEase": 2, + "timeToRoiMonths": 18, + "savingsPct": 45, + "migrationCost": 480000, + "productIds": [ + "vcf-ops-logs", + "aod-dx-oi" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "guidewell::c-muekmwnz-k4jd8", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 2250000, + "units": 0, + "capability": 3, + "switchEase": 2, + "timeToRoiMonths": 18, + "savingsPct": 45, + "migrationCost": 480000, + "productIds": [ + "vcf-ops-logs", + "aod-dx-oi" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "splunk-itsi", + "label": "Splunk ITSI", + "vendor": "Splunk", + "product": "ITSI", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-dx-oi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "splunk-observability-cloud", + "label": "Splunk Observability Cloud", + "vendor": "Splunk", + "product": "Observability Cloud", + "aliases": [], + "domain": "observability", + "productIds": [ + "tz-observability" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "splunk-with-custom-smf-feeds", + "label": "Splunk with custom SMF feeds", + "vendor": "Splunk", + "product": "with custom SMF feeds", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-watchtower" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "static-thresholds-status-quo", + "label": "Static thresholds (status quo)", + "vendor": "Static", + "product": "thresholds (status quo)", + "aliases": [], + "domain": "mf-observability", + "productIds": [ + "msd-ml-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "stonebranch", + "label": "Stonebranch", + "vendor": "Stonebranch", + "product": "", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-autosys", + "aod-dollar-universe", + "msd-wla-agents" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "stonebranch-analytics", + "label": "Stonebranch analytics", + "vendor": "Stonebranch", + "product": "analytics", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic-ai" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "stonebranch-uac", + "label": "Stonebranch UAC", + "vendor": "Stonebranch", + "product": "UAC", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "stormagic", + "label": "StorMagic", + "vendor": "StorMagic", + "product": "", + "aliases": [], + "domain": "storage", + "productIds": [ + "vcf-vsan" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "stripe-radar", + "label": "Stripe Radar", + "vendor": "Stripe", + "product": "Radar", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-merchants" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "sumo-logic", + "label": "Sumo Logic", + "vendor": "Sumo Logic", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-ops-logs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "suse-rancher", + "label": "SUSE Rancher", + "vendor": "SUSE", + "product": "Rancher", + "aliases": [], + "domain": "app-platform", + "productIds": [ + "tz-tkg" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "swarmia", + "label": "Swarmia", + "vendor": "Swarmia", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-valueops-insights" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tangoe", + "label": "Tangoe", + "vendor": "Tangoe", + "product": "", + "aliases": [], + "domain": "finops", + "productIds": [ + "aod-cloudhealth-partner" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tanium", + "label": "Tanium", + "vendor": "Tanium", + "product": "", + "aliases": [], + "domain": "itsm", + "productIds": [ + "aod-client-automation", + "esg-itms" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "targetprocess-apptio", + "label": "Targetprocess (Apptio)", + "vendor": "Targetprocess", + "product": "(Apptio)", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-rally" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tasktop-planview-hub", + "label": "Tasktop / Planview Hub", + "vendor": "Tasktop", + "product": "/ Planview Hub", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-connectall" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tenable", + "label": "Tenable", + "vendor": "Tenable", + "product": "", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-ccs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tenable-security-center", + "label": "Tenable Security Center", + "vendor": "Tenable", + "product": "Security Center", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "ans-acc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "teradata", + "label": "Teradata", + "vendor": "Teradata", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-greenplum" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "terraform-enterprise", + "label": "Terraform Enterprise", + "vendor": "Terraform", + "product": "Enterprise", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-automation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "thales-ciphertrust", + "label": "Thales CipherTrust", + "vendor": "Thales", + "product": "CipherTrust", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "thousandeyes", + "label": "ThousandEyes", + "vendor": "ThousandEyes", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "aod-appneta" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "threatlocker", + "label": "ThreatLocker", + "vendor": "ThreatLocker", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-app-control" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tidal", + "label": "Tidal", + "vendor": "Tidal", + "product": "", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-autosys", + "aod-esp-dseries", + "aod-appworx", + "msd-esp-edition" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tidal-automation", + "label": "Tidal Automation", + "vendor": "Tidal", + "product": "Automation", + "aliases": [], + "domain": "wla", + "productIds": [ + "aod-automic" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tonic-ai", + "label": "Tonic.ai", + "vendor": "Tonic.ai", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-tdm" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "top-secret-internal-alternative", + "label": "Top Secret (internal alternative)", + "vendor": "Top", + "product": "Secret (internal alternative)", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-acf2" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "traceable-ai", + "label": "Traceable AI", + "vendor": "Traceable AI", + "product": "", + "aliases": [], + "domain": "api", + "productIds": [ + "aod-layer7-apisec" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trellix", + "label": "Trellix", + "vendor": "Trellix", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trellix-atd", + "label": "Trellix ATD", + "vendor": "Trellix", + "product": "ATD", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-content-analysis" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trellix-dlp", + "label": "Trellix DLP", + "vendor": "Trellix", + "product": "DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-core" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trellix-email-security", + "label": "Trellix Email Security", + "vendor": "Trellix", + "product": "Email Security", + "aliases": [], + "domain": "email-sec", + "productIds": [ + "esg-email-gateway" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trellix-endpoint", + "label": "Trellix Endpoint", + "vendor": "Trellix", + "product": "Endpoint", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-complete" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trend-micro-apex-one", + "label": "Trend Micro Apex One", + "vendor": "Trend Micro", + "product": "Apex One", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-enterprise", + "cb-endpoint-protection" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trend-micro-cloud-one-workload", + "label": "Trend Micro Cloud One Workload", + "vendor": "Trend Micro", + "product": "Cloud One Workload", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-workload" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trend-micro-deep-security", + "label": "Trend Micro Deep Security", + "vendor": "Trend Micro", + "product": "Deep Security", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-dcs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trend-micro-serverprotect", + "label": "Trend Micro ServerProtect", + "vendor": "Trend Micro", + "product": "ServerProtect", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-protection-engine" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "trend-micro-vision-one", + "label": "Trend Micro Vision One", + "vendor": "Trend Micro", + "product": "Vision One", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-ses-complete" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tricentis", + "label": "Tricentis", + "vendor": "Tricentis", + "product": "", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-service-virtualization" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tricentis-tosca", + "label": "Tricentis Tosca", + "vendor": "Tricentis", + "product": "Tosca", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-ard" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "tripwire", + "label": "Tripwire", + "vendor": "Tripwire", + "product": "", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "esg-dcs" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "turbonomic", + "label": "Turbonomic", + "vendor": "Turbonomic", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "unencrypted-tape-risk", + "label": "Unencrypted tape (risk)", + "vendor": "Unencrypted", + "product": "tape (risk)", + "aliases": [], + "domain": "mf-storage", + "productIds": [ + "msd-tape-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "unsecured-ftp-scripts", + "label": "Unsecured FTP scripts", + "vendor": "Unsecured", + "product": "FTP scripts", + "aliases": [], + "domain": "mf-foundation", + "productIds": [ + "msd-xcom" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "unsupported-community-oss", + "label": "Unsupported community OSS", + "vendor": "Unsupported", + "product": "community OSS", + "aliases": [], + "domain": "devops", + "productIds": [ + "tz-spring" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": false, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "utm", + "label": "UTM", + "vendor": "UTM", + "product": "", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-desktop-hypervisor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vanguard-active-alerts", + "label": "Vanguard Active Alerts", + "vendor": "Vanguard", + "product": "Active Alerts", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cem" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vanguard-administrator", + "label": "Vanguard Administrator", + "vendor": "Vanguard", + "product": "Administrator", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-cleanup" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vanguard-analyzer", + "label": "Vanguard Analyzer", + "vendor": "Vanguard", + "product": "Analyzer", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-auditor" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vanguard-security-solutions", + "label": "Vanguard Security Solutions", + "vendor": "Vanguard", + "product": "Security Solutions", + "aliases": [], + "domain": "mf-security", + "productIds": [ + "msd-mf-security-suite" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vectra-ai", + "label": "Vectra AI", + "vendor": "Vectra", + "product": "AI", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-atp" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "veeam-backup-replication", + "label": "Veeam Backup & Replication", + "vendor": "Veeam", + "product": "Backup & Replication", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "veeam-one", + "label": "Veeam ONE", + "vendor": "Veeam", + "product": "ONE", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "velociraptor-oss", + "label": "Velociraptor (OSS)", + "vendor": "Velociraptor", + "product": "(OSS)", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-edr" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vertica", + "label": "Vertica", + "vendor": "Vertica", + "product": "", + "aliases": [], + "domain": "data", + "productIds": [ + "tz-greenplum" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "virtru", + "label": "Virtru", + "vendor": "Virtru", + "product": "", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-encryption" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "virtuozzo", + "label": "Virtuozzo", + "vendor": "Virtuozzo", + "product": "", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-cloud-director" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "visa-consumer-authentication-service", + "label": "Visa Consumer Authentication Service", + "vendor": "Visa", + "product": "Consumer Authentication Service", + "aliases": [], + "domain": "payment-sec", + "productIds": [ + "esg-payment-issuers" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "vmray", + "label": "VMRay", + "vendor": "VMRay", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-content-analysis" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "votiro", + "label": "Votiro", + "vendor": "Votiro", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-dfi" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "weave-net", + "label": "Weave Net", + "vendor": "Weave", + "product": "Net", + "aliases": [], + "domain": "networking", + "productIds": [ + "vcf-antrea" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "webroot-brightcloud", + "label": "Webroot BrightCloud", + "vendor": "Webroot", + "product": "BrightCloud", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-intelligence-services" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "wind-river-studio", + "label": "Wind River Studio", + "vendor": "Wind River", + "product": "Studio", + "aliases": [], + "domain": "private-cloud", + "productIds": [ + "vcf-telco" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "wiremock-enterprise", + "label": "WireMock Enterprise", + "vendor": "WireMock", + "product": "Enterprise", + "aliases": [], + "domain": "devops", + "productIds": [ + "aod-service-virtualization" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "wiz-runtime", + "label": "Wiz Runtime", + "vendor": "Wiz", + "product": "Runtime", + "aliases": [], + "domain": "endpoint-sec", + "productIds": [ + "cb-workload" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "workfront", + "label": "Workfront", + "vendor": "Workfront", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-clarity" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "xcp-ng", + "label": "XCP-ng", + "vendor": "XCP-ng", + "product": "", + "aliases": [], + "domain": "compute", + "productIds": [ + "vcf-vsphere" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zabbix", + "label": "Zabbix", + "vendor": "Zabbix", + "product": "", + "aliases": [], + "domain": "observability", + "productIds": [ + "vcf-operations", + "aod-dx-uim", + "aod-netops" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zero-networks", + "label": "Zero Networks", + "vendor": "Zero Networks", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-vdefend-dfw" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zerto", + "label": "Zerto", + "vendor": "Zerto", + "product": "", + "aliases": [], + "domain": "resiliency", + "productIds": [ + "vcf-live-recovery" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zerto-migration", + "label": "Zerto Migration", + "vendor": "Zerto", + "product": "Migration", + "aliases": [], + "domain": "cloud-mgmt", + "productIds": [ + "vcf-ops-mobility" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zigiops", + "label": "ZigiOps", + "vendor": "ZigiOps", + "product": "", + "aliases": [], + "domain": "vsm", + "productIds": [ + "aod-connectall" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler", + "label": "Zscaler", + "vendor": "Zscaler", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "ans-sase" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler-browser-isolation", + "label": "Zscaler Browser Isolation", + "vendor": "Zscaler", + "product": "Browser Isolation", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-web-isolation" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler-casb", + "label": "Zscaler CASB", + "vendor": "Zscaler", + "product": "CASB", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-cloudsoc" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler-cloud-dlp", + "label": "Zscaler Cloud DLP", + "vendor": "Zscaler", + "product": "Cloud DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-cloud" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler-dlp", + "label": "Zscaler DLP", + "vendor": "Zscaler", + "product": "DLP", + "aliases": [], + "domain": "data-sec", + "productIds": [ + "esg-dlp-core", + "esg-dlp-cds" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zscaler-internet-access", + "label": "Zscaler Internet Access", + "vendor": "Zscaler", + "product": "Internet Access", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-cloud-swg" + ], + "capability": 4, + "switchEase": 2, + "timeToRoiMonths": 16, + "savingsPct": 45, + "migrationCost": 280000, + "unitLabel": "users", + "risks": "PAC file and certificate rollout across 24k endpoints and 60 branch sites.", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [ + { + "sourceKey": "northwind-financial::c-g5v54bd", + "assessmentId": "northwind-financial", + "customerName": "Northwind Financial", + "annualSpend": 960000, + "units": 24000, + "capability": 4, + "switchEase": 2, + "timeToRoiMonths": 16, + "savingsPct": 45, + "migrationCost": 280000, + "productIds": [ + "esg-cloud-swg" + ], + "recordedAt": "2026-09-23T12:58:32.807Z" + }, + { + "sourceKey": "guidewell::c-muekmwo0-mqnt0", + "assessmentId": "guidewell", + "customerName": "Guidewell", + "annualSpend": 1250000, + "units": 0, + "capability": 4, + "switchEase": 2, + "timeToRoiMonths": 16, + "savingsPct": 45, + "migrationCost": 280000, + "productIds": [ + "esg-cloud-swg" + ], + "recordedAt": "2026-09-23T21:02:11.250Z" + } + ], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T21:02:11.250Z" + }, + { + "id": "zscaler-private-access", + "label": "Zscaler Private Access", + "vendor": "Zscaler", + "product": "Private Access", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-ztna" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + }, + { + "id": "zvelo", + "label": "zvelo", + "vendor": "zvelo", + "product": "", + "aliases": [], + "domain": "network-sec", + "productIds": [ + "esg-intelligence-services" + ], + "capability": 4, + "switchEase": 3, + "timeToRoiMonths": 12, + "savingsPct": 50, + "migrationCost": 0, + "unitLabel": "", + "risks": "", + "notes": "", + "competitive": true, + "pinned": false, + "origin": "catalog", + "observations": [], + "createdAt": "2026-09-23T12:58:32.707Z", + "updatedAt": "2026-09-23T12:58:32.707Z" + } + ] +} diff --git a/data/surveys/cd5bf9c3743e069cb807de8d42f3642c.json b/data/surveys/cd5bf9c3743e069cb807de8d42f3642c.json new file mode 100644 index 0000000..fc80a2e --- /dev/null +++ b/data/surveys/cd5bf9c3743e069cb807de8d42f3642c.json @@ -0,0 +1,401 @@ +{ + "id": "cd5bf9c3743e069cb807de8d42f3642c", + "assessmentId": "guidewell", + "respondentName": "John Doe, AD", + "domains": [ + "private-cloud", + "compute", + "storage", + "networking", + "adc", + "resiliency", + "cloud-mgmt", + "observability", + "app-platform", + "data", + "devops", + "finops", + "itsm", + "vsm", + "wla", + "api", + "network-sec", + "data-sec", + "iam", + "email-sec", + "mf-security", + "mf-devops", + "mf-database", + "mf-observability", + "mf-storage", + "mf-wla", + "mf-foundation" + ], + "answers": { + "private-cloud": { + "status": "tools", + "tools": [ + { + "key": "t-muekfoz3-urgjo", + "label": "Nutanix Cloud Platform", + "kbEntryId": "nutanix-cloud-platform", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekfptn-o5207", + "label": "Microsoft Azure Local", + "kbEntryId": "microsoft-azure-local", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekftsw-w3zzq", + "label": "Red Hat OpenShift Telco", + "kbEntryId": "red-hat-openshift-telco", + "annualSpend": 500000, + "contractEnd": "2027-03" + } + ] + }, + "compute": { + "status": "tools", + "tools": [ + { + "key": "t-muekgda3-crvx0", + "label": "Nutanix AHV", + "kbEntryId": "nutanix-ahv", + "annualSpend": 100000, + "contractEnd": "2027-06" + } + ] + }, + "storage": { + "status": "tools", + "tools": [ + { + "key": "t-muekgpc4-srsz0", + "label": "Nutanix Distributed Storage", + "kbEntryId": "nutanix-distributed-storage", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekgpvl-jn9wu", + "label": "Dell PowerFlex", + "kbEntryId": "dell-powerflex", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekgqk4-567qw", + "label": "NetApp/Pure external arrays", + "kbEntryId": "netapp-pure-external-arrays", + "annualSpend": null, + "contractEnd": "" + } + ] + }, + "networking": { + "status": "tools", + "tools": [ + { + "key": "t-muekgtzu-3wgtm", + "label": "Cisco ACI", + "kbEntryId": "cisco-aci", + "annualSpend": null, + "contractEnd": "" + } + ] + }, + "adc": { + "status": "tools", + "tools": [ + { + "key": "t-muekgx67-suphf", + "label": "F5 BIG-IP LTM", + "kbEntryId": "f5-big-ip-ltm", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekgzkj-is69n", + "label": "F5 BIG-IP", + "kbEntryId": "f5-big-ip", + "annualSpend": null, + "contractEnd": "" + } + ] + }, + "resiliency": { + "status": "tools", + "tools": [ + { + "key": "t-muekh36b-df36q", + "label": "Cohesity", + "kbEntryId": "cohesity", + "annualSpend": 450000, + "contractEnd": "" + } + ] + }, + "cloud-mgmt": { + "status": "tools", + "tools": [ + { + "key": "t-muekheml-vgnj3", + "label": "Chef", + "kbEntryId": "chef", + "annualSpend": null, + "contractEnd": "" + }, + { + "key": "t-muekhfca-lb8ot", + "label": "Puppet Enterprise", + "kbEntryId": "puppet-enterprise", + "annualSpend": null, + "contractEnd": "" + } + ] + }, + "observability": { + "status": "tools", + "tools": [ + { + "key": "t-muekhkbk-2rki6", + "label": "Splunk Enterprise", + "kbEntryId": "splunk-enterprise", + "annualSpend": 2250000, + "contractEnd": "" + }, + { + "key": "t-muekhpl5-j3igh", + "label": "Cisco ThousandEyes + Nexus Dashboard", + "kbEntryId": "cisco-thousandeyes-nexus-dashboard", + "annualSpend": 250000, + "contractEnd": "" + }, + { + "key": "t-muekhr5q-hd6fy", + "label": "Datadog", + "kbEntryId": "datadog", + "annualSpend": 1250000, + "contractEnd": "" + }, + { + "key": "t-muekhwpz-w0a9d", + "label": "Dynatrace", + "kbEntryId": "dynatrace", + "annualSpend": 2300000, + "contractEnd": "" + }, + { + "key": "t-mueki0ku-w72w3", + "label": "LogicMonitor", + "kbEntryId": "logicmonitor", + "annualSpend": 250000, + "contractEnd": "" + }, + { + "key": "t-mueki3pd-lr5ey", + "label": "SolarWinds", + "kbEntryId": "solarwinds", + "annualSpend": 125000, + "contractEnd": "" + } + ] + }, + "app-platform": { + "status": "tools", + "tools": [ + { + "key": "t-muekitfg-zbwyl", + "label": "Rancher", + "kbEntryId": "rancher", + "annualSpend": 550000, + "contractEnd": "" + } + ] + }, + "devops": { + "status": "tools", + "tools": [ + { + "key": "t-muekj50c-laf0x", + "label": "Delphix", + "kbEntryId": "delphix", + "annualSpend": 750000, + "contractEnd": "2027-06" + }, + { + "key": "t-muekjdkr-xfjd2", + "label": "Perforce", + "kbEntryId": "perforce", + "annualSpend": 250000, + "contractEnd": "" + } + ] + }, + "itsm": { + "status": "tools", + "tools": [ + { + "key": "t-muekjr7o-vp4oh", + "label": "ServiceNow ITSM", + "kbEntryId": "servicenow-itsm", + "annualSpend": 5000000, + "contractEnd": "2028-10" + } + ] + }, + "vsm": { + "status": "tools", + "tools": [ + { + "key": "t-muekk1dv-2js6y", + "label": "Planview AgilePlace", + "kbEntryId": "planview-agileplace", + "annualSpend": 2000000, + "contractEnd": "2027-05" + } + ] + }, + "wla": { + "status": "tools", + "tools": [ + { + "key": "t-muekkajl-r7za9", + "label": "BMC Control-M", + "kbEntryId": "bmc-control-m", + "annualSpend": 1500000, + "contractEnd": "" + } + ] + }, + "api": { + "status": "tools", + "tools": [ + { + "key": "t-muekki5v-04x70", + "label": "Apigee (Google)", + "kbEntryId": "apigee-google", + "annualSpend": 750000, + "contractEnd": "" + } + ] + }, + "network-sec": { + "status": "tools", + "tools": [ + { + "key": "t-muekkt27-lisf8", + "label": "Zscaler Internet Access", + "kbEntryId": "zscaler-internet-access", + "annualSpend": 1250000, + "contractEnd": "" + } + ] + }, + "data-sec": { + "status": "tools", + "tools": [ + { + "key": "t-muekl1bq-g5pe9", + "label": "Forcepoint DLP", + "kbEntryId": "forcepoint-dlp", + "annualSpend": 750000, + "contractEnd": "" + } + ] + }, + "iam": { + "status": "tools", + "tools": [ + { + "key": "t-muekl5od-7qddz", + "label": "SailPoint IdentityIQ", + "kbEntryId": "sailpoint-identityiq", + "annualSpend": 1250000, + "contractEnd": "2027-06" + }, + { + "key": "t-muekl9fb-gsx4o", + "label": "CyberArk PAM", + "kbEntryId": "cyberark-pam", + "annualSpend": 1000000, + "contractEnd": "" + }, + { + "key": "t-mueklcds-ztokj", + "label": "Okta Workforce Identity", + "kbEntryId": "okta-workforce-identity", + "annualSpend": 1500000, + "contractEnd": "" + } + ] + }, + "email-sec": { + "status": "tools", + "tools": [ + { + "key": "t-mueklvtk-2nceo", + "label": "Proofpoint Email Protection", + "kbEntryId": "proofpoint-email-protection", + "annualSpend": 250000, + "contractEnd": "" + } + ] + }, + "mf-security": { + "status": "tools", + "tools": [ + { + "key": "t-muekm1z7-mamo3", + "label": "IBM RACF", + "kbEntryId": "ibm-racf", + "annualSpend": null, + "contractEnd": "" + } + ] + } + }, + "status": "submitted", + "review": { + "t-muekfoz3-urgjo": "accepted", + "t-muekfptn-o5207": "accepted", + "t-muekftsw-w3zzq": "accepted", + "t-muekgda3-crvx0": "accepted", + "t-muekgpc4-srsz0": "accepted", + "t-muekgpvl-jn9wu": "accepted", + "t-muekgqk4-567qw": "accepted", + "t-muekgtzu-3wgtm": "accepted", + "t-muekgx67-suphf": "accepted", + "t-muekgzkj-is69n": "accepted", + "t-muekh36b-df36q": "accepted", + "t-muekheml-vgnj3": "accepted", + "t-muekhfca-lb8ot": "accepted", + "t-muekhkbk-2rki6": "accepted", + "t-muekhpl5-j3igh": "accepted", + "t-muekhr5q-hd6fy": "accepted", + "t-muekhwpz-w0a9d": "accepted", + "t-mueki0ku-w72w3": "accepted", + "t-mueki3pd-lr5ey": "accepted", + "t-muekitfg-zbwyl": "accepted", + "t-muekj50c-laf0x": "accepted", + "t-muekjdkr-xfjd2": "accepted", + "t-muekjr7o-vp4oh": "accepted", + "t-muekk1dv-2js6y": "accepted", + "t-muekkajl-r7za9": "accepted", + "t-muekki5v-04x70": "accepted", + "t-muekkt27-lisf8": "accepted", + "t-muekl1bq-g5pe9": "accepted", + "t-muekl5od-7qddz": "accepted", + "t-muekl9fb-gsx4o": "accepted", + "t-mueklcds-ztokj": "accepted", + "t-mueklvtk-2nceo": "accepted", + "t-muekm1z7-mamo3": "accepted" + }, + "createdAt": "2026-09-23T20:38:13.496Z", + "updatedAt": "2026-09-23T20:44:27.986Z", + "submittedAt": "2026-09-23T20:44:01.705Z" +} diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..c2b3d99 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,3 @@ +import type { NextConfig } from "next"; +const nextConfig: NextConfig = { reactStrictMode: true }; +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e5806c2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1948 @@ +{ + "name": "rationalization-tool", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rationalization-tool", + "version": "0.1.0", + "dependencies": { + "docx": "^9.5.1", + "next": "15.5.4", + "react": "19.1.1", + "react-dom": "19.1.1" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.1.13", + "@types/node": "^24.5.2", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "tailwindcss": "^4.1.13", + "typescript": "^5.9.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.4.tgz", + "integrity": "sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.4.tgz", + "integrity": "sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.4.tgz", + "integrity": "sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.4.tgz", + "integrity": "sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.4.tgz", + "integrity": "sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.4.tgz", + "integrity": "sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.4.tgz", + "integrity": "sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.4.tgz", + "integrity": "sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.4.tgz", + "integrity": "sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz", + "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "postcss": "^8.5.16", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@types/node": { + "version": "24.13.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.6.tgz", + "integrity": "sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/docx": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/docx/-/docx-9.7.1.tgz", + "integrity": "sha512-ilXFf9Moz47ABjFpDiA5s1w9lpb4EFSp7+5iiJSbfyYDM+bpZdAgLlSr7fW4aXhVe/E+F6QCv0EvRVFEd5CsWg==", + "license": "MIT", + "dependencies": { + "@types/node": "^25.2.3", + "hash.js": "^1.1.7", + "jszip": "^3.10.1", + "nanoid": "^5.1.3", + "xml": "^1.0.1", + "xml-js": "^1.6.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/docx/node_modules/@types/node": { + "version": "25.9.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.8.tgz", + "integrity": "sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw==", + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/docx/node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jszip": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.2.tgz", + "integrity": "sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "5.1.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz", + "integrity": "sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/next": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", + "integrity": "sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==", + "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details.", + "license": "MIT", + "dependencies": { + "@next/env": "15.5.4", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.5.4", + "@next/swc-darwin-x64": "15.5.4", + "@next/swc-linux-arm64-gnu": "15.5.4", + "@next/swc-linux-arm64-musl": "15.5.4", + "@next/swc-linux-x64-gnu": "15.5.4", + "@next/swc-linux-x64-musl": "15.5.4", + "@next/swc-win32-arm64-msvc": "15.5.4", + "@next/swc-win32-x64-msvc": "15.5.4", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "license": "MIT" + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9d9ced0 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "rationalization-tool", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev -p 3500", + "build": "next build", + "start": "next start -p 3500", + "lint": "next lint" + }, + "dependencies": { + "next": "15.5.4", + "react": "19.1.1", + "react-dom": "19.1.1", + "docx": "^9.5.1" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.1.13", + "tailwindcss": "^4.1.13", + "typescript": "^5.9.2", + "@types/node": "^24.5.2", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..a9b5c43 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1 @@ +export default { plugins: { "@tailwindcss/postcss": {} } }; diff --git a/scripts/build-test-lib.sh b/scripts/build-test-lib.sh new file mode 100755 index 0000000..9fd3f39 --- /dev/null +++ b/scripts/build-test-lib.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# Compiles the pure-logic libs so tests can exercise the real source under Node. +set -euo pipefail +cd "$(dirname "$0")/.." +rm -rf .test-build +npx --yes tsc src/lib/dossier.ts src/lib/kb.ts src/lib/scoring.ts src/lib/client.ts \ + --outDir .test-build --target ES2022 --module esnext \ + --moduleResolution bundler --skipLibCheck +# tsc emits extensionless relative imports; Node ESM needs the .js suffix. +for f in .test-build/*.js; do + perl -pi -e 's{(from\s+")(\./[^"]+?)(")}{$1.$2.".js".$3}ge unless /\.js"/' "$f" +done diff --git a/scripts/fixtures/dossier-sample.txt b/scripts/fixtures/dossier-sample.txt new file mode 100644 index 0000000..61cf5d2 --- /dev/null +++ b/scripts/fixtures/dossier-sample.txt @@ -0,0 +1,112 @@ +GUIDEWELL BLUE CROSS BLUE SHIELD OF FLORIDA — Strategic Account Dossier + +Complete account intelligence — every field TechDirector tracks for this account. + +Executive Summary + +Company: GUIDEWELL BLUE CROSS BLUE SHIELD OF FLORIDA +Industry: Health Care Equipment & Services +Employees: Not available +Annual Revenue: Not available +Classification: Tier 1 / Strategic +Priority Flags: MVP (Most Valuable Partner — priority account requiring focused attention) +Account Status: Active +Account Sentiment: Neutral +Renewal Timeframe: 2028 Q 2 +Renewal Risk: 5 + +Composite Scores + +Account Health Score: n/a/100 +- Subscores: Data Completeness 0 / VCF Footprint 8 / Deployment Rate 30 / Engagement 17 / Risk Profile 14 +Intelligence Score: 98/100 +TAM Value Score: 39/100 + +Public Company Profile + + • Area: AM-SOUTHEAST + • District: SE-SUNSHINE + • Account Website: guidewell.com + • Public/Private: Private + +VCF Status + +VCF Plan Health: Yellow +VCF Version: vSphere 8.x +VCF Cores Entitled: 35768 +Cores by Version: vSphere 8.x: 35768 +Deployment Model: Standard +VCF Path: Brownfield +Adoption Stage: No VCF Adoption +VCF 9 Plans: VCF 9.1.x +VCF 9 Blockers: No Blockers + +Infrastructure & Cloud Strategy + +Cloud Strategy: Hybrid (Public+Private) +Primary Hyperscaler: AWS, Azure +Workload Distribution: 25% Public Cloud, 50% Private Cloud, 25% Mainframe +Compute Vendor: HPE +Storage Platform: Everpure (Pure) +Network Vendor: Cisco +Firewall Vendor: Zscaler +Load Balancer Vendor: F5 + +Product Consumption + +Overall Deployment Rate: 76% (6574253 / 8691992) + +Products + + • VSPHERE: Entitled 35768, Deployed 33400, Adoption High + • VSAN: Entitled 480, Deployed 0, Adoption Shelfware + • NSX: Entitled 0, Deployed 0, Adoption Shelfware + • VCF OPERATIONS: Entitled 10000, Deployed 0, Adoption Shelfware + • VCF SDDC: Entitled 0, Deployed 0, Adoption Shelfware + • VCF AUTOMATION: Entitled 0, Deployed 0, Adoption Shelfware + • VKS: Entitled 0, Deployed 0, Adoption Shelfware + +Applications + +ERP (4) + + • Peoplesoft FSCM + • PeopleSoft HCM + • SAP Finance + • Oracle HCM + +Financial (8) + + • Diamond + • QNXT + • HITS/CAPS + • AccumWise/Accumuilators + • PBM Prime + • PMT (Product Management Tools) + • Enrollpoint + • Saphire/NASCO + +Other (6) + + • Florida Blue Portal + • Omnissa Virtual Desktop + • Prior Authorization AI + • IBM API Connect / Datapower + • GWDP (Guidewell Data Platform) + • Online Health/ Well Frame + +SaaS (1) + + • Member Website/Mobile App (MWS) + +Tech Debt Signals + +Legacy health insurance claims systems. Mainframe at 15% for core claims processing. GuideWell subsidiary systems may be on separate infrastructure stacks. + +Cloud Strategy Assessment + +80% public cloud is the highest ratio for any health insurance account in the portfolio. This extreme cloud adoption for a HIPAA-regulated entity suggests either a cloud-native modernization strategy or that most workloads are SaaS rather than IaaS. + +DevOps Platform Assessment + +OpenShift Pipelines for container CI/CD. Limited DevOps tooling documented. diff --git a/scripts/seed-kb.mjs b/scripts/seed-kb.mjs new file mode 100644 index 0000000..b54ebc0 --- /dev/null +++ b/scripts/seed-kb.mjs @@ -0,0 +1,94 @@ +/** + * Builds data/knowledge-base.json from the catalog's `replaces` lists. + * + * Each competitor string named by a product becomes one entry mapped to every + * product that claims to displace it. Scores start at neutral defaults and are + * refined automatically as real assessments are saved. + * + * Re-running is safe: existing entries keep their edits, observations and pins, + * and only gain newly-discovered product mappings. + */ +import { readFileSync, writeFileSync, existsSync } from "node:fs"; + +const CATALOG = "data/catalog.json"; +const KB = "data/knowledge-base.json"; + +const MULTIWORD_VENDORS = [ + "Red Hat", "Palo Alto", "Check Point", "Micro Focus", "Trend Micro", "Arctic Wolf", "Red Canary", + "Ping Identity", "One Identity", "Salt Security", "Noname Security", "Traceable AI", "Aqua Security", + "Airlock Digital", "Abnormal Security", "Menlo Security", "Recorded Future", "Scale Computing", + "Wind River", "Software AG", "Cato Networks", "Zero Networks", "Digital Guardian", "Snow Software", + "Cardinal Commerce", "Duo Security", "Crunchy Data", "Morpheus Data", "Sumo Logic", "Prisma Cloud", + "Amazon Web Services", "Google Cloud", "Data Theorem", +]; + +const splitVendor = (label) => { + const clean = label.replace(/\s+/g, " ").trim(); + for (const v of MULTIWORD_VENDORS) { + if (clean.toLowerCase().startsWith(v.toLowerCase() + " ")) return { vendor: v, product: clean.slice(v.length).trim() }; + if (clean.toLowerCase() === v.toLowerCase()) return { vendor: v, product: "" }; + } + const parts = clean.split(" "); + return parts.length === 1 ? { vendor: clean, product: "" } : { vendor: parts[0], product: parts.slice(1).join(" ") }; +}; + +const NON_COMPETITIVE = [ + /\(status quo\)/i, /\(internal alternative\)/i, /status quo/i, + /\bDIY\b/i, /\bscripts?\b/i, /spreadsheets/i, /\bmanual\b/i, + /^custom /i, /^native /i, /^internal /i, /^self-managed/i, /^unsupported/i, + /^physical /i, /^consulting/i, /^fragmented/i, /^serialized/i, /^shared /i, + /^point[- ]tool/i, /^point IAM/i, /^no\b/i, /^none\b/i, /^password-only/i, + /^display statements/i, /^unencrypted/i, /^green[- ]screen/i, /^cron\b/i, + /rewrite|redevelopment/i, /^migration to /i, /^rehost/i, /^low-code platforms/i, + /^multiple /i, /^various /i, /^hand-written/i, /^ISPF /i, /^unsupported community/i, +]; +const isCompetitive = (label) => !NON_COMPETITIVE.some((re) => re.test(label)); + +const kbId = (label) => + label.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 72) || "entry"; + +const catalog = JSON.parse(readFileSync(CATALOG, "utf8")); +const existing = existsSync(KB) ? JSON.parse(readFileSync(KB, "utf8")) : { version: 1, entries: [] }; +const byId = new Map(existing.entries.map((e) => [e.id, e])); + +const now = new Date().toISOString(); +let created = 0, enriched = 0; + +for (const p of catalog.products) { + for (const raw of p.replaces ?? []) { + const label = raw.replace(/\s+/g, " ").trim(); + if (!label) continue; + const id = kbId(label); + + let e = byId.get(id); + if (!e) { + const { vendor, product } = splitVendor(label); + e = { + id, label, vendor, product, aliases: [], domain: p.domain, + productIds: [], capability: 4, switchEase: 3, timeToRoiMonths: 12, + savingsPct: 50, migrationCost: 0, unitLabel: "", risks: "", notes: "", + competitive: isCompetitive(label), + pinned: false, origin: "catalog", observations: [], + createdAt: now, updatedAt: now, + }; + byId.set(id, e); + created++; + } + // Only add mappings; never strip a mapping a human curated. + if (!e.productIds.includes(p.id)) { + e.productIds.push(p.id); + if (e.origin === "catalog") enriched++; + } + if (!e.domain) e.domain = p.domain; + } +} + +const entries = [...byId.values()].sort((a, b) => a.label.localeCompare(b.label)); +writeFileSync(KB, JSON.stringify({ version: 1, updatedAt: now, entries }, null, 2) + "\n"); + +// Backfill the flag for entries written before it existed. +for (const e of entries) if (e.competitive === undefined) e.competitive = isCompetitive(e.label); + +const mapped = entries.filter((e) => e.productIds.length > 0).length; +const rivals = entries.filter((e) => e.competitive).length; +console.log(`knowledge base: ${entries.length} entries (${created} new), ${mapped} mapped, ${rivals} true competitors, ${enriched} mappings added`); diff --git a/scripts/test-client.mjs b/scripts/test-client.mjs new file mode 100644 index 0000000..780d634 --- /dev/null +++ b/scripts/test-client.mjs @@ -0,0 +1,27 @@ +// Exercises the exact regression: an empty 200 body must throw, not resolve to undefined. +const { getJson, HttpError } = await import('/tmp/prt-test/client.mjs'); + +let pass = 0, fail = 0; +const check = (name, ok) => { ok ? (pass++, console.log(' PASS', name)) : (fail++, console.log(' FAIL', name)); }; + +// 1. Real endpoint still works. +const cat = await getJson('http://127.0.0.1:3500/api/catalog'); +check('catalog loads', cat.products.length === 179); + +// 2. Empty 200 body -> throws (previously: JSON.parse crash that killed Promise.all). +globalThis.fetch = async () => new Response('', { status: 200 }); +try { await getJson('/empty'); check('empty body throws', false); } +catch (e) { check('empty body throws HttpError', e instanceof HttpError && /Empty response/.test(e.message)); } + +// 3. 404 surfaces its status so the caller can show "not found" instead of an error. +globalThis.fetch = async () => new Response(JSON.stringify({error:'Not found'}), { status: 404 }); +try { await getJson('/missing'); check('404 throws', false); } +catch (e) { check('404 carries status', e.status === 404 && e.message === 'Not found'); } + +// 4. A transient failure is retried once and then succeeds. +let n = 0; +globalThis.fetch = async () => (++n === 1 ? new Response('', { status: 200 }) : new Response(JSON.stringify({ok:true}), { status: 200 })); +check('retries once then succeeds', (await getJson('/flaky')).ok === true && n === 2); + +console.log(`\n${pass} passed, ${fail} failed`); +process.exit(fail ? 1 : 0); diff --git a/scripts/test-dossier.mjs b/scripts/test-dossier.mjs new file mode 100644 index 0000000..2b0d7f0 --- /dev/null +++ b/scripts/test-dossier.mjs @@ -0,0 +1,64 @@ +// Parser tests run against the compiled lib so they exercise the real source. +const { parseDossier, buildImportResult } = await import('../.test-build/dossier.js'); +import { readFileSync } from 'node:fs'; + +const raw = readFileSync(new URL('./fixtures/dossier-sample.txt', import.meta.url), 'utf8'); +const kb = JSON.parse(readFileSync(new URL('../data/knowledge-base.json', import.meta.url), 'utf8')); +const catalog = JSON.parse(readFileSync(new URL('../data/catalog.json', import.meta.url), 'utf8')); + +let pass=0, fail=0; +const t=(n,ok,extra='')=>{ok?(pass++,console.log(' PASS',n)):(fail++,console.log(' FAIL',n,extra))}; + +const intel = parseDossier(raw, 'https://docs.google.com/document/d/ABC/edit'); + +t('company', intel.company === 'GUIDEWELL BLUE CROSS BLUE SHIELD OF FLORIDA', intel.company); +t('industry', intel.industry === 'Health Care Equipment & Services', intel.industry); +t('classification', intel.classification === 'Tier 1 / Strategic'); +t('renewal timeframe', intel.renewalTimeframe === '2028 Q 2'); +t('"Not available" is dropped, not stored', !JSON.stringify(intel).includes('Not available')); +t('source url retained', intel.sourceUrl.includes('docs.google.com')); + +t('infrastructure vendors', intel.infrastructure.length === 5, JSON.stringify(intel.infrastructure)); +t('load balancer is F5', intel.infrastructure.some(f=>f.label==='Load Balancer Vendor' && f.value==='F5')); +t('cloud facts', intel.cloud.length === 3); +t('vcf facts captured', intel.vcf.some(f=>f.label==='VCF Cores Entitled' && f.value==='35768')); + +t('consumption rows', intel.consumption.length === 7, String(intel.consumption.length)); +const vsphere = intel.consumption.find(c=>c.product==='VSPHERE'); +t('vsphere entitled/deployed parsed', vsphere.entitled===35768 && vsphere.deployed===33400 && vsphere.adoption==='High'); +t('deployment rate', intel.deploymentRate.startsWith('76%')); + +t('apps parsed across categories', intel.applications.length === 19, String(intel.applications.length)); +t('app category assigned', intel.applications.find(a=>a.name==='SAP Finance')?.category === 'ERP'); +t('bullet chars stripped', intel.applications.every(a=>!/^[•\-\s]/.test(a.name))); + +t('narratives captured', intel.narratives.length === 3, JSON.stringify(intel.narratives.map(n=>n.heading))); +t('narrative body', /Mainframe at 15%/.test(intel.narratives.find(n=>n.heading==='Tech Debt Signals').body)); + +// ---- proposals ---- +const res = buildImportResult(raw, '', kb, catalog); +const by = (l) => res.proposals.find(p=>p.label.toLowerCase().includes(l)); + +t('F5 proposed', !!by('f5'), res.proposals.map(p=>p.label).join(' | ')); +t('F5 maps to Avi', by('f5')?.productIds.includes('ans-avi')); +t('Zscaler proposed', !!by('zscaler')); +t('IBM API Connect proposed', !!by('api connect') || !!by('ibm api')); +t('no duplicate KB entries', new Set(res.proposals.map(p=>p.kbEntryId)).size === res.proposals.length); +t('all mapped product ids are real', res.proposals.every(p=>p.productIds.every(id=>catalog.products.some(x=>x.id===id)))); +t('proposals carry evidence', res.proposals.every(p=>p.evidence.includes(':'))); +t('sorted by confidence', res.proposals.map(p=>({high:0,medium:1,low:2})[p.confidence]).every((v,i,a)=>i===0||a[i-1]<=v)); + +t('shelfware = entitled>0 & deployed=0', res.shelfware.length===2 && res.shelfware.every(c=>c.entitled>0&&c.deployed===0), JSON.stringify(res.shelfware.map(c=>c.product))); +t('vsphere not shelfware', !res.shelfware.some(c=>c.product==='VSPHERE')); + +// Garbage in must not throw. +const empty = buildImportResult('hello world', '', kb, catalog); +t('junk input degrades gracefully', empty.proposals.length===0 && empty.warnings.length>0); + +console.log(`\n${pass} passed, ${fail} failed`); +console.log(`\nProposals from the sample dossier (${res.proposals.length}):`); +for (const p of res.proposals) { + const names = p.productIds.map(id=>catalog.products.find(x=>x.id===id)?.name).join(', '); + console.log(` [${p.confidence.padEnd(6)}] ${p.label.padEnd(26)} → ${names || '(unmapped)'}`); +} +process.exit(fail?1:0); diff --git a/scripts/test-kb-learning.mjs b/scripts/test-kb-learning.mjs new file mode 100644 index 0000000..26bd192 --- /dev/null +++ b/scripts/test-kb-learning.mjs @@ -0,0 +1,48 @@ +const B='http://127.0.0.1:3500'; +const get=(u)=>fetch(B+u).then(r=>r.json()); +const put=(u,b)=>fetch(B+u,{method:'PUT',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}).then(r=>r.json()); +let pass=0,fail=0; const t=(n,ok)=>{ok?(pass++,console.log(' PASS',n)):(fail++,console.log(' FAIL',n))}; + +const kb0 = await get('/api/knowledge-base'); +t('seeded KB loads', kb0.entries.length >= 630); + +const f5 = kb0.entries.find(e=>e.label==='F5 BIG-IP'); +t('F5 BIG-IP pre-mapped to Avi', f5 && f5.productIds.includes('ans-avi')); +t('seeded entry has no observations', f5.observations.length === 0); + +// Save the seeded assessment -> should learn from its 10 candidates. +const a = await get('/api/assessments/northwind-financial'); +await put('/api/assessments/northwind-financial', a); +const kb1 = await get('/api/knowledge-base'); + +const learned = kb1.entries.filter(e=>e.observations.length>0); +t('learned from all 10 candidates', learned.length === 10); + +const splunk = kb1.entries.find(e=>e.label==='Splunk Enterprise'); +t('Splunk Enterprise captured', !!splunk); +t('Splunk learned our real mapping', splunk.productIds.join()==='vcf-ops-logs,aod-dx-oi'); +t('Splunk learned switchEase 2', splunk.switchEase === 2); +t('Splunk learned savingsPct 45', splunk.savingsPct === 45); +t('Splunk learned risks text', /SOC dashboards/.test(splunk.risks)); +t('observation links back to assessment', splunk.observations[0].assessmentId === 'northwind-financial'); + +// Re-saving must update in place, not stack duplicates. +await put('/api/assessments/northwind-financial', a); +const kb2 = await get('/api/knowledge-base'); +const splunk2 = kb2.entries.find(e=>e.label==='Splunk Enterprise'); +t('re-save does not duplicate observations', splunk2.observations.length === 1); +t('entry count stable after re-save', kb2.entries.length === kb1.entries.length); + +// A pinned entry must survive learning untouched. +const pinTarget = structuredClone(kb2); +const p = pinTarget.entries.find(e=>e.label==='Splunk Enterprise'); +p.pinned = true; p.savingsPct = 99; p.switchEase = 5; +await put('/api/knowledge-base', pinTarget); +await put('/api/assessments/northwind-financial', a); +const kb3 = await get('/api/knowledge-base'); +const splunk3 = kb3.entries.find(e=>e.label==='Splunk Enterprise'); +t('curated entry keeps savingsPct', splunk3.savingsPct === 99); +t('curated entry keeps switchEase', splunk3.switchEase === 5); + +console.log(`\n${pass} passed, ${fail} failed`); +process.exit(fail?1:0); diff --git a/scripts/test-kb-pruning.mjs b/scripts/test-kb-pruning.mjs new file mode 100644 index 0000000..960ddc4 --- /dev/null +++ b/scripts/test-kb-pruning.mjs @@ -0,0 +1,39 @@ +const B='http://127.0.0.1:3500'; +const get=(u)=>fetch(B+u).then(r=>r.json()); +const put=(u,b)=>fetch(B+u,{method:'PUT',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}).then(r=>r.json()); +const del=(u)=>fetch(B+u,{method:'DELETE'}).then(r=>r.json()); +const post=(u,b)=>fetch(B+u,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}).then(r=>r.json()); +let pass=0,fail=0; const t=(n,ok)=>{ok?(pass++,console.log(' PASS',n)):(fail++,console.log(' FAIL',n))}; +const entry=(kb,l)=>kb.entries.find(e=>e.label===l); +const cand=(o)=>({id:'c-x',incumbentVendor:'',incumbentProduct:'',domain:'',productIds:[],annualSpend:0,units:0,unitLabel:'',renewalDate:'',capability:4,switchEase:3,timeToRoiMonths:12,savingsPct:50,migrationCost:0,strategicValue:3,risks:'',notes:'',included:true,...o}); + +// Self-contained: create an assessment, learn from it, then take things away. +const a = await post('/api/assessments', { customerName: 'Prune Test Co' }); +a.candidates = [ + cand({ id:'c-1', incumbentVendor:'CyberArk', incumbentProduct:'PAM', domain:'iam', productIds:['esg-pam'], annualSpend:400000, savingsPct:55 }), + cand({ id:'c-2', incumbentVendor:'Okta', incumbentProduct:'Workforce Identity', domain:'iam', productIds:['esg-siteminder'], annualSpend:300000, savingsPct:40 }), +]; +await put('/api/assessments/'+a.id, a); + +const learned = await get('/api/knowledge-base'); +t('both candidates learned', entry(learned,'CyberArk PAM').observations.some(o=>o.assessmentId===a.id) + && entry(learned,'Okta Workforce Identity').observations.some(o=>o.assessmentId===a.id)); +t('learned the real savings figure', entry(learned,'CyberArk PAM').savingsPct === 55); + +// Remove one candidate -> only its observation is pruned. +a.candidates = a.candidates.filter(c => c.id !== 'c-1'); +await put('/api/assessments/'+a.id, a); +const pruned = await get('/api/knowledge-base'); +t('removed candidate is forgotten', !entry(pruned,'CyberArk PAM').observations.some(o=>o.assessmentId===a.id)); +t('defaults revert to seeded values', entry(pruned,'CyberArk PAM').savingsPct === 50); +t('the entry survives for reuse', entry(pruned,'CyberArk PAM').productIds.includes('esg-pam')); +t('the other candidate is untouched', entry(pruned,'Okta Workforce Identity').observations.some(o=>o.assessmentId===a.id)); + +// Delete the assessment -> everything it taught is forgotten. +await del('/api/assessments/'+a.id); +const gone = await get('/api/knowledge-base'); +t('deleting the assessment forgets the rest', !entry(gone,'Okta Workforce Identity').observations.some(o=>o.assessmentId===a.id)); +t('unrelated learning is preserved', entry(gone,'Splunk Enterprise').observations.length === 1); + +console.log(`\n${pass} passed, ${fail} failed`); +process.exit(fail?1:0); diff --git a/scripts/test-report-leak.mjs b/scripts/test-report-leak.mjs new file mode 100644 index 0000000..201019d --- /dev/null +++ b/scripts/test-report-leak.mjs @@ -0,0 +1,79 @@ +/** + * The account dossier holds internal pricing strategy, competitive risk and + * personal data. None of it may reach a customer deliverable. + * + * Self-contained: builds its own assessment, imports the sample dossier through + * the real endpoint, asserts on the redacted projection and the generated Word + * file, then removes itself. + * + * (The rendered report page is verified in a browser; its server-rendered shell + * carries no data, so asserting on that HTML would pass vacuously.) + */ +import { readFileSync, writeFileSync } from 'node:fs'; +import { execFileSync } from 'node:child_process'; + +const B = 'http://127.0.0.1:3500'; +const json = (u, o) => fetch(B + u, o).then(r => r.json()); +const send = (u, m, b) => json(u, { method: m, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(b) }); + +let pass = 0, fail = 0; +const t = (n, ok, x = '') => { ok ? (pass++, console.log(' PASS', n)) : (fail++, console.log(' FAIL', n, x)); }; + +const text = readFileSync(new URL('./fixtures/dossier-sample.txt', import.meta.url), 'utf8'); +const SOURCE = 'https://docs.google.com/document/d/LEAKTEST/edit'; + +const a = await send('/api/assessments', 'POST', { customerName: 'Redaction Test Co' }); +try { + const imported = await send('/api/assessments/x/intel', 'POST', { text, sourceUrl: SOURCE }); + t('dossier parsed for the test', imported.proposals.length > 0 && !!imported.intel.company); + + a.accountIntel = imported.intel; + a.candidates = imported.proposals.slice(0, 3).map((p, i) => ({ + id: `c-${i}`, incumbentVendor: p.vendor, incumbentProduct: p.product, domain: p.domain, + productIds: p.productIds, annualSpend: 500000, units: 0, unitLabel: '', renewalDate: '', + capability: p.capability, switchEase: p.switchEase, timeToRoiMonths: p.timeToRoiMonths, + savingsPct: p.savingsPct, migrationCost: 50000, strategicValue: 3, + risks: '', notes: `From account dossier — ${p.evidence}`, included: true, + })); + await send(`/api/assessments/${a.id}`, 'PUT', a); + + const full = await json(`/api/assessments/${a.id}`); + t('stored record keeps the dossier', !!full.accountIntel); + t('stored record keeps internal notes', full.candidates.every(c => c.notes)); + + const safe = await json(`/api/assessments/${a.id}/report`); + t('projection drops the dossier', safe.accountIntel === null); + t('projection drops internal notes', safe.candidates.every(c => c.notes === '')); + t('projection keeps every candidate', safe.candidates.length === full.candidates.length); + t('projection keeps the mappings', safe.candidates.every((c, i) => c.productIds.join() === full.candidates[i].productIds.join())); + t('projection keeps the spend figures', safe.candidates.every((c, i) => c.annualSpend === full.candidates[i].annualSpend)); + + // A .docx is a ZIP: the bytes must be inflated or a text search passes vacuously. + const buf = Buffer.from(await (await fetch(`${B}/api/assessments/${a.id}/docx`)).arrayBuffer()); + const tmp = new URL('./.leak-test.docx', import.meta.url); + writeFileSync(tmp, buf); + const docx = execFileSync('unzip', ['-p', tmp.pathname, 'word/document.xml'], { maxBuffer: 32e6 }).toString('utf8'); + t('Word file is a readable docx', docx.includes(' 2000); + + const safeText = JSON.stringify(safe); + const secrets = [ + SOURCE, 'docs.google.com', 'Tier 1 / Strategic', 'Renewal Risk', 'Intelligence Score', + 'TechDirector', 'Shelfware', 'Tech Debt Signals', 'AM-SOUTHEAST', 'From account dossier', + 'Everpure', 'Workload Distribution', + ]; + for (const s of secrets) { + const label = s.length > 30 ? s.slice(0, 30) + '…' : s; + t(`projection omits "${label}"`, !safeText.includes(s)); + t(`Word omits "${label}"`, !docx.includes(s)); + } + + t('Word still names the customer', docx.includes('Redaction Test Co')); + t('Word still carries a mapped product', /Avi Load Balancer|VCF Networking|Layer7/.test(docx)); + + execFileSync('rm', ['-f', tmp.pathname]); +} finally { + await fetch(`${B}/api/assessments/${a.id}`, { method: 'DELETE' }); +} + +console.log(`\n${pass} passed, ${fail} failed`); +process.exit(fail ? 1 : 0); diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..202319c --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# Runs the API test suites against a dev server on :3500. +# Each suite starts from a freshly seeded knowledge base so runs are repeatable. +set -uo pipefail +cd "$(dirname "$0")/.." + +BASE=http://127.0.0.1:3500 +curl -sf "$BASE/api/catalog" -o /dev/null || { echo "Start the dev server first: npm run dev"; exit 1; } + +reseed() { + rm -f data/knowledge-base.json + node scripts/seed-kb.mjs > /dev/null +} + +fail=0 + +echo "=== dossier parser ===" +./scripts/build-test-lib.sh +node scripts/test-dossier.mjs || fail=1 + +echo +echo "=== knowledge base: learning ===" +reseed +node scripts/test-kb-learning.mjs || fail=1 + +echo +echo "=== knowledge base: pruning ===" +reseed +curl -s "$BASE/api/assessments/northwind-financial" > /tmp/prt-nw.json +curl -s -X PUT -H "Content-Type: application/json" -d @/tmp/prt-nw.json \ + "$BASE/api/assessments/northwind-financial" -o /dev/null +node scripts/test-kb-pruning.mjs || fail=1 + +echo +echo "=== customer-report redaction ===" +node scripts/test-report-leak.mjs || fail=1 + +# Leave the knowledge base in a clean, fully-learned state. +reseed +curl -s -X PUT -H "Content-Type: application/json" -d @/tmp/prt-nw.json \ + "$BASE/api/assessments/northwind-financial" -o /dev/null + +echo +[ $fail -eq 0 ] && echo "All suites passed." || echo "Some suites failed." +exit $fail diff --git a/src/app/api/assessments/[id]/docx/route.ts b/src/app/api/assessments/[id]/docx/route.ts new file mode 100644 index 0000000..106ba01 --- /dev/null +++ b/src/app/api/assessments/[id]/docx/route.ts @@ -0,0 +1,187 @@ +import { NextResponse } from "next/server"; +import { + AlignmentType, + Document, + HeadingLevel, + Packer, + Paragraph, + ShadingType, + Table, + TableCell, + TableRow, + TextRun, + WidthType, +} from "docx"; +import { getAssessment, getCatalog } from "@/lib/store"; +import { customerSafe } from "@/lib/redact"; +import { WAVE_BLURB, WAVE_LABEL, rollup } from "@/lib/scoring"; +import { money, monthsLabel } from "@/lib/format"; + +const INK = "0B0B0B"; +const MUTED = "52514E"; +const ACCENT = "2A78D6"; + +function cell(text: string, opts: { bold?: boolean; fill?: string; align?: "left" | "right" } = {}) { + return new TableCell({ + shading: opts.fill ? { type: ShadingType.CLEAR, color: "auto", fill: opts.fill } : undefined, + margins: { top: 80, bottom: 80, left: 120, right: 120 }, + children: [ + new Paragraph({ + alignment: opts.align === "right" ? AlignmentType.RIGHT : AlignmentType.LEFT, + children: [new TextRun({ text, bold: opts.bold, size: 19, color: opts.bold ? INK : MUTED })], + }), + ], + }); +} + +function table(headers: string[], rows: string[][], aligns: ("left" | "right")[] = []) { + return new Table({ + width: { size: 100, type: WidthType.PERCENTAGE }, + rows: [ + new TableRow({ + tableHeader: true, + children: headers.map((h, i) => cell(h, { bold: true, fill: "F0EFEC", align: aligns[i] })), + }), + ...rows.map((r) => new TableRow({ children: r.map((v, i) => cell(v, { align: aligns[i] })) })), + ], + }); +} + +const h1 = (t: string) => + new Paragraph({ heading: HeadingLevel.HEADING_1, spacing: { before: 360, after: 160 }, children: [new TextRun({ text: t, bold: true, size: 30, color: INK })] }); +const h2 = (t: string) => + new Paragraph({ heading: HeadingLevel.HEADING_2, spacing: { before: 260, after: 120 }, children: [new TextRun({ text: t, bold: true, size: 24, color: INK })] }); +const p = (t: string, color = MUTED) => + new Paragraph({ spacing: { after: 120 }, children: [new TextRun({ text: t, size: 21, color })] }); + +export async function GET(_req: Request, { params }: { params: Promise<{ id: string }> }) { + const { id } = await params; + const stored = await getAssessment(id); + if (!stored) return NextResponse.json({ error: "Not found" }, { status: 404 }); + // Same redaction as the on-screen report: the Word file is a customer artefact. + const a = customerSafe(stored); + const catalog = await getCatalog(); + const r = rollup(a, catalog); + const prod = new Map(catalog.products.map((x) => [x.id, x])); + const domainName = (d: string) => catalog.domains.find((x) => x.id === d)?.name ?? d; + + const kpis: string[][] = [ + ["Current annual spend assessed", money(r.addressableSpend)], + ["Projected annual savings", money(r.totalAnnualSavings)], + [`${a.horizonYears}-year net benefit`, money(r.horizonNet)], + ["One-time migration investment", money(r.totalMigrationCost)], + ["Blended payback", monthsLabel(r.blendedPaybackMonths)], + ["Tools consolidated", String(r.toolsRetired)], + ["Vendors retired", String(r.vendorsRetired)], + ["Spend reduction", `${r.savingsPct.toFixed(0)}%`], + ]; + + const children = [ + new Paragraph({ spacing: { after: 60 }, children: [new TextRun({ text: "SOFTWARE PORTFOLIO RATIONALIZATION", bold: true, size: 18, color: ACCENT })] }), + new Paragraph({ spacing: { after: 80 }, children: [new TextRun({ text: a.customerName || "Customer", bold: true, size: 48, color: INK })] }), + p( + [a.industry, a.preparedFor && `Prepared for ${a.preparedFor}`, a.preparedBy && `Prepared by ${a.preparedBy}`, a.opportunityRef] + .filter(Boolean) + .join(" • "), + ), + p(new Date(a.updatedAt).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric" })), + + h1("Executive summary"), + ...(a.executiveSummary.trim() + ? a.executiveSummary.split(/\n{2,}/).map((s) => p(s.trim(), INK)) + : [ + p( + `Consolidating ${r.toolsRetired} point tools from ${r.vendorsRetired} vendors onto an integrated platform removes ${money(r.totalAnnualSavings)} of annual run-rate cost — a ${r.savingsPct.toFixed(0)}% reduction against ${money(r.addressableSpend)} of assessed spend. Net of ${money(r.totalMigrationCost)} in migration investment, the ${a.horizonYears}-year net benefit is ${money(r.horizonNet)}, with blended payback at ${monthsLabel(r.blendedPaybackMonths)}.`, + INK, + ), + ]), + + h1("The financial case"), + table(["Measure", "Value"], kpis, ["left", "right"]), + + h1("Rationalization roadmap"), + ]; + + for (const w of [1, 2, 3] as const) { + const items = r.byWave[w]; + if (!items.length) continue; + children.push(h2(WAVE_LABEL[w])); + children.push(p(WAVE_BLURB[w])); + children.push( + table( + ["Incumbent tool", "Replaced by", "Annual spend", "Annual saving", "Payback"], + items.map((c) => { + const m = r.metrics.get(c.id)!; + return [ + `${c.incumbentVendor} ${c.incumbentProduct}`.trim() || "—", + c.productIds.map((pid) => prod.get(pid)?.name ?? pid).join(", ") || "—", + money(c.annualSpend), + money(m.annualSavings), + monthsLabel(m.paybackMonths), + ]; + }), + ["left", "left", "right", "right", "right"], + ), + ); + } + + children.push(h1("Consolidation detail by capability")); + children.push( + table( + ["Capability domain", "Tools", "Current spend", "Annual saving"], + r.byDomain.map((d) => [d.name, String(d.count), money(d.spend), money(d.savings)]), + ["left", "right", "right", "right"], + ), + ); + + children.push(h1("Assessment detail")); + children.push( + table( + ["Incumbent", "Domain", "Proposed platform", "Parity", "Switch ease", "Time to ROI", "Score"], + r.included.map((c) => { + const m = r.metrics.get(c.id)!; + return [ + `${c.incumbentVendor} ${c.incumbentProduct}`.trim() || "—", + domainName(c.domain), + c.productIds.map((pid) => prod.get(pid)?.name ?? pid).join(", ") || "—", + `${c.capability}/5`, + `${c.switchEase}/5`, + `${c.timeToRoiMonths} mo`, + m.score.toFixed(0), + ]; + }), + ["left", "left", "left", "right", "right", "right", "right"], + ), + ); + + const risky = r.included.filter((c) => c.risks.trim()); + if (risky.length) { + children.push(h1("Risks and dependencies")); + for (const c of risky) { + children.push(h2(`${c.incumbentVendor} ${c.incumbentProduct}`.trim())); + children.push(p(c.risks)); + } + } + + children.push(h1("Method")); + children.push( + p( + `Each candidate is scored on functional parity, ease of switching and time to ROI, weighted ${a.weights.capability}/${a.weights.switchEase}/${a.weights.timeToRoi} with a ${a.weights.spend} weighting on spend at stake. Scores of 65 and above are sequenced into Wave 1, 45–64 into Wave 2, and the remainder into Wave 3. Savings are modelled as a stated percentage of current annual spend per tool and held flat across the ${a.horizonYears}-year horizon; migration cost is a one-time charge in year one. Figures are estimates for planning and are not a quotation.`, + ), + ); + + const doc = new Document({ + creator: a.preparedBy || "Converge", + title: `${a.customerName} — Software Portfolio Rationalization`, + styles: { default: { document: { run: { font: "Aptos", size: 21, color: MUTED } } } }, + sections: [{ properties: { page: { margin: { top: 1000, bottom: 1000, left: 1000, right: 1000 } } }, children }], + }); + + const buf = await Packer.toBuffer(doc); + return new NextResponse(new Uint8Array(buf), { + headers: { + "Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "Content-Disposition": `attachment; filename="${a.id}-rationalization.docx"`, + }, + }); +} diff --git a/src/app/api/assessments/[id]/intel/route.ts b/src/app/api/assessments/[id]/intel/route.ts new file mode 100644 index 0000000..1c28b31 --- /dev/null +++ b/src/app/api/assessments/[id]/intel/route.ts @@ -0,0 +1,20 @@ +import { NextResponse } from "next/server"; +import { getCatalog, getKnowledgeBase } from "@/lib/store"; +import { buildImportResult } from "@/lib/dossier"; + +/** + * Parses a pasted dossier and returns what it found. Deliberately read-only: + * nothing is written until a seller accepts specific proposals in the UI. + */ +export async function POST(req: Request) { + const { text, sourceUrl } = (await req.json()) as { text?: string; sourceUrl?: string }; + if (!text || !text.trim()) { + return NextResponse.json({ error: "Paste the dossier text first." }, { status: 400 }); + } + if (text.length > 2_000_000) { + return NextResponse.json({ error: "That document is too large to parse." }, { status: 413 }); + } + + const [kb, catalog] = await Promise.all([getKnowledgeBase(), getCatalog()]); + return NextResponse.json(buildImportResult(text, (sourceUrl ?? "").trim(), kb, catalog)); +} diff --git a/src/app/api/assessments/[id]/report/route.ts b/src/app/api/assessments/[id]/report/route.ts new file mode 100644 index 0000000..29d6193 --- /dev/null +++ b/src/app/api/assessments/[id]/report/route.ts @@ -0,0 +1,15 @@ +import { NextResponse } from "next/server"; +import { getAssessment } from "@/lib/store"; +import { customerSafe } from "@/lib/redact"; + +/** + * The customer-facing projection of an assessment. + * + * The report page reads this instead of the full record so internal-only + * material never crosses the wire, rather than merely going unrendered. + */ +export async function GET(_req: Request, { params }: { params: Promise<{ id: string }> }) { + const { id } = await params; + const a = await getAssessment(id); + return a ? NextResponse.json(customerSafe(a)) : NextResponse.json({ error: "Not found" }, { status: 404 }); +} diff --git a/src/app/api/assessments/[id]/route.ts b/src/app/api/assessments/[id]/route.ts new file mode 100644 index 0000000..d9ab4a4 --- /dev/null +++ b/src/app/api/assessments/[id]/route.ts @@ -0,0 +1,23 @@ +import { NextResponse } from "next/server"; +import { deleteAssessment, getAssessment, saveAssessment } from "@/lib/store"; +import type { Assessment } from "@/lib/types"; + +type Ctx = { params: Promise<{ id: string }> }; + +export async function GET(_req: Request, { params }: Ctx) { + const { id } = await params; + const a = await getAssessment(id); + return a ? NextResponse.json(a) : NextResponse.json({ error: "Not found" }, { status: 404 }); +} + +export async function PUT(req: Request, { params }: Ctx) { + const { id } = await params; + const body = (await req.json()) as Assessment; + return NextResponse.json(await saveAssessment({ ...body, id })); +} + +export async function DELETE(_req: Request, { params }: Ctx) { + const { id } = await params; + await deleteAssessment(id); + return NextResponse.json({ ok: true }); +} diff --git a/src/app/api/assessments/[id]/surveys/[token]/route.ts b/src/app/api/assessments/[id]/surveys/[token]/route.ts new file mode 100644 index 0000000..d7062f4 --- /dev/null +++ b/src/app/api/assessments/[id]/surveys/[token]/route.ts @@ -0,0 +1,42 @@ +import { NextResponse } from "next/server"; +import { deleteSurvey, getSurvey, mutateSurvey } from "@/lib/store"; + +type Ctx = { params: Promise<{ id: string; token: string }> }; + +type Body = + | { action: "reopen" } + | { action: "review"; decisions: Record } + | { action: "rename"; respondentName: string }; + +/** Seller-side changes. Answers are the respondent's and are never written here. */ +export async function PUT(req: Request, { params }: Ctx) { + const { id, token } = await params; + const body = (await req.json()) as Body; + + const result = await mutateSurvey(token, (s) => { + if (s.assessmentId !== id) return "Not found"; + if (body.action === "reopen") { + s.status = "open"; + } else if (body.action === "review") { + for (const [k, v] of Object.entries(body.decisions ?? {})) { + if (v === "accepted" || v === "dismissed") s.review[k] = v; + } + } else if (body.action === "rename") { + s.respondentName = String(body.respondentName ?? "").trim().slice(0, 120); + } else { + return "Unknown action"; + } + }); + + if (result === null || result === "Not found") return NextResponse.json({ error: "Not found" }, { status: 404 }); + if (typeof result === "string") return NextResponse.json({ error: result }, { status: 400 }); + return NextResponse.json(result); +} + +export async function DELETE(_req: Request, { params }: Ctx) { + const { id, token } = await params; + const s = await getSurvey(token); + if (!s || s.assessmentId !== id) return NextResponse.json({ error: "Not found" }, { status: 404 }); + await deleteSurvey(token); + return NextResponse.json({ ok: true }); +} diff --git a/src/app/api/assessments/[id]/surveys/route.ts b/src/app/api/assessments/[id]/surveys/route.ts new file mode 100644 index 0000000..20f2db0 --- /dev/null +++ b/src/app/api/assessments/[id]/surveys/route.ts @@ -0,0 +1,25 @@ +import { NextResponse } from "next/server"; +import { createSurvey, getAssessment, getCatalog, listSurveys } from "@/lib/store"; +import { surveyableDomains } from "@/lib/survey"; + +type Ctx = { params: Promise<{ id: string }> }; + +export async function GET(_req: Request, { params }: Ctx) { + const { id } = await params; + if (!(await getAssessment(id))) return NextResponse.json({ error: "Not found" }, { status: 404 }); + return NextResponse.json(await listSurveys(id)); +} + +export async function POST(req: Request, { params }: Ctx) { + const { id } = await params; + if (!(await getAssessment(id))) return NextResponse.json({ error: "Not found" }, { status: 404 }); + + const body = (await req.json()) as { respondentName?: string; domains?: string[] }; + // Keep catalog order and drop anything that is not a live category. + const wanted = new Set(Array.isArray(body.domains) ? body.domains : []); + const domains = surveyableDomains(await getCatalog()).map((d) => d.id).filter((d) => wanted.has(d)); + if (!domains.length) return NextResponse.json({ error: "Pick at least one category." }, { status: 400 }); + + const name = typeof body.respondentName === "string" ? body.respondentName.trim().slice(0, 120) : ""; + return NextResponse.json(await createSurvey(id, name, domains)); +} diff --git a/src/app/api/assessments/route.ts b/src/app/api/assessments/route.ts new file mode 100644 index 0000000..47d2ec0 --- /dev/null +++ b/src/app/api/assessments/route.ts @@ -0,0 +1,24 @@ +import { NextResponse } from "next/server"; +import { createAssessment, listAssessments, saveAssessment } from "@/lib/store"; +import type { Assessment } from "@/lib/types"; + +export async function GET() { + return NextResponse.json(await listAssessments()); +} + +export async function POST(req: Request) { + const body = await req.json().catch(() => ({})); + // An "import" payload carries a full candidate list; anything else is a fresh assessment. + if (body?.import) { + const src = body.import as Assessment; + const created = await createAssessment({ ...src, candidates: src.candidates ?? [] }); + return NextResponse.json(created, { status: 201 }); + } + return NextResponse.json(await createAssessment(body), { status: 201 }); +} + +export async function PUT(req: Request) { + const a = (await req.json()) as Assessment; + if (!a?.id) return NextResponse.json({ error: "Missing id" }, { status: 400 }); + return NextResponse.json(await saveAssessment(a)); +} diff --git a/src/app/api/catalog/route.ts b/src/app/api/catalog/route.ts new file mode 100644 index 0000000..54bf2dd --- /dev/null +++ b/src/app/api/catalog/route.ts @@ -0,0 +1,21 @@ +import { NextResponse } from "next/server"; +import { getCatalog, saveCatalog } from "@/lib/store"; +import type { Catalog } from "@/lib/types"; + +export async function GET() { + return NextResponse.json(await getCatalog()); +} + +export async function PUT(req: Request) { + const body = (await req.json()) as Catalog; + if (!Array.isArray(body?.products) || !Array.isArray(body?.businessUnits)) { + return NextResponse.json({ error: "Malformed catalog" }, { status: 400 }); + } + const ids = new Set(); + for (const p of body.products) { + if (!p.id || !p.name) return NextResponse.json({ error: "Product needs an id and a name" }, { status: 400 }); + if (ids.has(p.id)) return NextResponse.json({ error: `Duplicate product id: ${p.id}` }, { status: 400 }); + ids.add(p.id); + } + return NextResponse.json(await saveCatalog(body)); +} diff --git a/src/app/api/knowledge-base/route.ts b/src/app/api/knowledge-base/route.ts new file mode 100644 index 0000000..e699e79 --- /dev/null +++ b/src/app/api/knowledge-base/route.ts @@ -0,0 +1,21 @@ +import { NextResponse } from "next/server"; +import { getKnowledgeBase, saveKnowledgeBase } from "@/lib/store"; +import type { KnowledgeBase } from "@/lib/types"; + +export async function GET() { + return NextResponse.json(await getKnowledgeBase()); +} + +export async function PUT(req: Request) { + const body = (await req.json()) as KnowledgeBase; + if (!Array.isArray(body?.entries)) { + return NextResponse.json({ error: "Malformed knowledge base" }, { status: 400 }); + } + const ids = new Set(); + for (const e of body.entries) { + if (!e.id || !e.label) return NextResponse.json({ error: "Every entry needs an id and a label" }, { status: 400 }); + if (ids.has(e.id)) return NextResponse.json({ error: `Duplicate entry id: ${e.id}` }, { status: 400 }); + ids.add(e.id); + } + return NextResponse.json(await saveKnowledgeBase(body)); +} diff --git a/src/app/api/q/[token]/route.ts b/src/app/api/q/[token]/route.ts new file mode 100644 index 0000000..dd2f7f5 --- /dev/null +++ b/src/app/api/q/[token]/route.ts @@ -0,0 +1,76 @@ +import { NextResponse } from "next/server"; +import { getAssessment, getCatalog, getKnowledgeBase, getSurvey, mutateSurvey } from "@/lib/store"; +import { domainOptions, sanitizeAnswers } from "@/lib/survey"; +import type { PublicSurvey, Survey } from "@/lib/types"; + +/** + * The respondent's endpoint. Anyone holding the link reaches it, so it returns + * only the category list and this questionnaire's own answers — never the + * assessment's numbers, the dossier, or other questionnaires. + */ + +type Ctx = { params: Promise<{ token: string }> }; + +const notFound = () => NextResponse.json({ error: "This questionnaire link is not valid." }, { status: 404 }); + +async function toPublic(s: Survey): Promise { + const [a, catalog, kb] = await Promise.all([getAssessment(s.assessmentId), getCatalog(), getKnowledgeBase()]); + if (!a) return null; + const byId = new Map(catalog.domains.map((d) => [d.id, d])); + return { + id: s.id, + customerName: a.customerName, + respondentName: s.respondentName, + status: s.status, + answers: s.answers, + categories: s.domains + .filter((d) => byId.has(d)) + .map((d) => ({ + id: d, + name: byId.get(d)!.name, + description: byId.get(d)!.description ?? "", + options: domainOptions(kb, d), + })), + }; +} + +export async function GET(_req: Request, { params }: Ctx) { + const { token } = await params; + const s = await getSurvey(token); + const pub = s && (await toPublic(s)); + return pub ? NextResponse.json(pub) : notFound(); +} + +/** Autosave. Body: { answers, respondentName? } */ +export async function PUT(req: Request, { params }: Ctx) { + const { token } = await params; + const body = (await req.json().catch(() => null)) as { answers?: unknown; respondentName?: unknown } | null; + if (!body) return NextResponse.json({ error: "Malformed request" }, { status: 400 }); + + const result = await mutateSurvey(token, (s) => { + if (s.status !== "open") return "This questionnaire has already been submitted."; + s.answers = sanitizeAnswers(s.domains, body.answers); + if (typeof body.respondentName === "string") s.respondentName = body.respondentName.trim().slice(0, 120); + }); + if (result === null) return notFound(); + if (typeof result === "string") return NextResponse.json({ error: result }, { status: 409 }); + return NextResponse.json({ ok: true, updatedAt: result.updatedAt }); +} + +/** Submit. Saves the final answers and locks the questionnaire. */ +export async function POST(req: Request, { params }: Ctx) { + const { token } = await params; + const body = (await req.json().catch(() => null)) as { answers?: unknown; respondentName?: unknown } | null; + + const result = await mutateSurvey(token, (s) => { + if (s.status !== "open") return "This questionnaire has already been submitted."; + if (body?.answers) s.answers = sanitizeAnswers(s.domains, body.answers); + if (typeof body?.respondentName === "string") s.respondentName = body.respondentName.trim().slice(0, 120); + s.status = "submitted"; + s.submittedAt = new Date().toISOString(); + }); + if (result === null) return notFound(); + if (typeof result === "string") return NextResponse.json({ error: result }, { status: 409 }); + const pub = await toPublic(result); + return pub ? NextResponse.json(pub) : notFound(); +} diff --git a/src/app/assessments/[id]/page.tsx b/src/app/assessments/[id]/page.tsx new file mode 100644 index 0000000..892376e --- /dev/null +++ b/src/app/assessments/[id]/page.tsx @@ -0,0 +1,435 @@ +"use client"; + +import Link from "next/link"; +import { use, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import type { Assessment, Candidate, Catalog, IntelImportResult, IntelProposal, KnowledgeBase, Survey, Weights } from "@/lib/types"; +import { DEFAULT_WEIGHTS, WAVE_LABEL, rollup } from "@/lib/scoring"; +import { dateLabel, money, monthsLabel } from "@/lib/format"; +import { ChartFrame, Empty, Quadrant, StatTile } from "@/components/charts"; +import CandidateRow from "@/components/CandidateRow"; +import IntelImport from "@/components/IntelImport"; +import AccountIntelStrip from "@/components/AccountIntelStrip"; +import { BuBreakdown, ImplementationTimeline, ToolFootprintTile } from "@/components/Analysis"; +import LoadError from "@/components/LoadError"; +import SurveyPanel from "@/components/SurveyPanel"; +import SurveyReview, { kbEntryFor, toolVendorProduct } from "@/components/SurveyReview"; +import { type PendingTool, candidateKey, pendingTools, toolFacts } from "@/lib/survey"; +import { HttpError, errorMessage, getJson, sendJson } from "@/lib/client"; + +const newCandidate = (domain = ""): Candidate => ({ + id: `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 7)}`, + incumbentVendor: "", incumbentProduct: "", domain, productIds: [], + annualSpend: 0, units: 0, unitLabel: "", renewalDate: "", + capability: 4, switchEase: 3, timeToRoiMonths: 12, + savingsPct: 60, migrationCost: 0, + strategicValue: 3, risks: "", notes: "", included: true, +}); + +export default function Workbench({ params }: { params: Promise<{ id: string }> }) { + const { id } = use(params); + const [a, setA] = useState(null); + const [catalog, setCatalog] = useState(null); + const [kb, setKb] = useState(null); + const [status, setStatus] = useState<"idle" | "saving" | "saved" | "error">("idle"); + const [showMeta, setShowMeta] = useState(false); + const [showImport, setShowImport] = useState(false); + const [surveys, setSurveys] = useState([]); + const [showSurveys, setShowSurveys] = useState(false); + const [reviewing, setReviewing] = useState(null); + const [notFound, setNotFound] = useState(false); + const [loadError, setLoadError] = useState(""); + const [attempt, setAttempt] = useState(0); + const timer = useRef | null>(null); + + useEffect(() => { + let cancelled = false; + setLoadError(""); setNotFound(false); + + // The knowledge base only powers autocomplete, so a failure there must not + // block the workbench: it resolves to null and the picker simply goes quiet. + Promise.all([ + getJson(`/api/assessments/${id}`), + getJson("/api/catalog"), + getJson("/api/knowledge-base").catch(() => null), + ]) + .then(([as, cat, base]) => { if (!cancelled) { setA(as); setCatalog(cat); setKb(base); } }) + .catch((err) => { + if (cancelled) return; + // A missing assessment is a different story from a failed request. + if (err instanceof HttpError && err.status === 404) setNotFound(true); + else setLoadError(errorMessage(err)); + }); + + return () => { cancelled = true; }; + }, [id, attempt]); + + // Questionnaires live in their own files, so a failure here never blocks the workbench. + const loadSurveys = useCallback(() => { + getJson(`/api/assessments/${id}/surveys`).then(setSurveys).catch(() => {}); + }, [id]); + + // Respondents submit from elsewhere, so check again whenever the seller comes back to the tab. + useEffect(() => { + loadSurveys(); + window.addEventListener("focus", loadSurveys); + return () => window.removeEventListener("focus", loadSurveys); + }, [loadSurveys]); + + // Debounced autosave: the workbench is a live editing surface, not a form. + const save = useCallback((next: Assessment) => { + if (timer.current) clearTimeout(timer.current); + setStatus("saving"); + timer.current = setTimeout(async () => { + try { + await sendJson(`/api/assessments/${next.id}`, "PUT", next); + setStatus("saved"); + } catch { + setStatus("error"); + } + }, 500); + }, []); + + const update = useCallback((fn: (draft: Assessment) => void) => { + setA((prev) => { + if (!prev) return prev; + const next = structuredClone(prev); + fn(next); + save(next); + return next; + }); + }, [save]); + + const r = useMemo(() => (a && catalog ? rollup(a, catalog) : null), [a, catalog]); + + /** Accepted proposals become real candidates; the dossier itself stays internal. */ + function acceptIntel(result: IntelImportResult, chosen: IntelProposal[]) { + update((d) => { + d.accountIntel = result.intel; + if (!d.industry && result.intel.industry) d.industry = result.intel.industry; + + const existing = new Set( + d.candidates.map((c) => `${c.incumbentVendor} ${c.incumbentProduct}`.trim().toLowerCase()), + ); + for (const p of chosen) { + const label = `${p.vendor} ${p.product}`.trim().toLowerCase(); + if (existing.has(label)) continue; + existing.add(label); + d.candidates.unshift({ + ...newCandidate(p.domain), + incumbentVendor: p.vendor, + incumbentProduct: p.product, + productIds: [...p.productIds], + capability: p.capability, + switchEase: p.switchEase, + timeToRoiMonths: p.timeToRoiMonths, + savingsPct: p.savingsPct, + migrationCost: p.migrationCost, + risks: p.risks, + notes: `From account dossier — ${p.evidence}`, + }); + } + }); + setShowImport(false); + } + + /** + * Accepted answers become candidates seeded from the knowledge base; a tool + * already on the assessment only has its blank spend and renewal filled in. + */ + async function acceptSurvey(sv: Survey, accepted: PendingTool[], dismissed: PendingTool[]) { + const who = sv.respondentName || "questionnaire respondent"; + update((d) => { + const byLabel = new Map(d.candidates.map((c) => [candidateKey(c.incumbentVendor, c.incumbentProduct), c])); + for (const t of accepted) { + const { vendor, product } = toolVendorProduct(kb, t); + const facts = toolFacts(t); + const hit = byLabel.get(candidateKey(vendor, product)); + if (hit) { + if (!hit.annualSpend && facts.annualSpend) hit.annualSpend = facts.annualSpend; + if (!hit.renewalDate && facts.renewalDate) hit.renewalDate = facts.renewalDate; + continue; + } + const e = kbEntryFor(kb, t); + const c: Candidate = { + ...newCandidate(t.domain), + incumbentVendor: vendor, + incumbentProduct: product, + ...facts, + ...(e ? { + productIds: [...e.productIds], unitLabel: e.unitLabel, + capability: e.capability, switchEase: e.switchEase, timeToRoiMonths: e.timeToRoiMonths, + savingsPct: e.savingsPct, migrationCost: e.migrationCost, risks: e.risks, + } : {}), + notes: `From questionnaire — ${who}, ${dateLabel(sv.submittedAt)}`, + }; + d.candidates.unshift(c); + byLabel.set(candidateKey(vendor, product), c); + } + }); + setReviewing(null); + + const decisions = Object.fromEntries([ + ...accepted.map((t) => [t.key, "accepted"]), + ...dismissed.map((t) => [t.key, "dismissed"]), + ]); + try { + await sendJson(`/api/assessments/${id}/surveys/${sv.id}`, "PUT", { action: "review", decisions }); + } catch { + // The tools are already on the assessment; the inbox just offers them again, + // and a second accept only fills blanks on the lines it finds. + } finally { + loadSurveys(); + } + } + + if (loadError) return setAttempt((n) => n + 1)} />; + + if (notFound) { + return ( +
+

No assessment with the id {id}.

+ Back to assessments +
+ ); + } + if (!a || !catalog || !r) return
Loading…
; + + const domainName = (d: string) => catalog.domains.find((x) => x.id === d)?.name ?? "Unassigned"; + + function exportJson() { + const url = URL.createObjectURL(new Blob([JSON.stringify(a, null, 2)], { type: "application/json" })); + const el = document.createElement("a"); + el.href = url; el.download = `${a!.id}.json`; el.click(); + URL.revokeObjectURL(url); + } + + function exportCsv() { + const head = [ + "incumbent_vendor", "incumbent_product", "domain", "replacement_products", "annual_spend_usd", + "quantity", "unit", "renewal_date", "capability_parity_1_5", "switch_ease_1_5", "time_to_roi_months", + "strategic_value_1_5", "savings_pct", "migration_cost_usd", "annual_saving_usd", + `net_benefit_${a!.horizonYears}yr_usd`, "payback_months", "score", "wave", "included", "risks", "notes", + ]; + const esc = (v: unknown) => `"${String(v ?? "").replace(/"/g, '""')}"`; + const lines = a!.candidates.map((c) => { + const m = r!.metrics.get(c.id)!; + return [ + c.incumbentVendor, c.incumbentProduct, domainName(c.domain), + c.productIds.map((pid) => catalog!.products.find((p) => p.id === pid)?.name ?? pid).join("; "), + c.annualSpend, c.units, c.unitLabel, c.renewalDate, c.capability, c.switchEase, c.timeToRoiMonths, + c.strategicValue, c.savingsPct, c.migrationCost, Math.round(m.annualSavings), Math.round(m.horizonNet), + m.paybackMonths === null ? "" : m.paybackMonths.toFixed(1), m.score.toFixed(0), m.wave, + c.included, c.risks, c.notes, + ].map(esc).join(","); + }); + const url = URL.createObjectURL(new Blob([[head.join(","), ...lines].join("\n")], { type: "text/csv" })); + const el = document.createElement("a"); + el.href = url; el.download = `${a!.id}-rationalization.csv`; el.click(); + URL.revokeObjectURL(url); + } + + const statusText = { idle: "", saving: "Saving…", saved: "Saved", error: "Save failed" }[status]; + + return ( +
+ {/* ---- header ---- */} +
+
+ ← Assessments + update((d) => { d.customerName = e.target.value; })} /> + +
+ +
+ {statusText} + + + + + Word + Customer report → +
+
+ + {showMeta && ( +
+ {([ + ["industry", "Industry"], ["preparedFor", "Prepared for"], + ["preparedBy", "Prepared by"], ["opportunityRef", "Opportunity reference"], + ] as const).map(([k, label]) => ( +
+ + update((d) => { d[k] = e.target.value; })} /> +
+ ))} +
+ +