Spaces:
Running
Running
Manual changes saved
Browse files- scorecard.html +51 -107
scorecard.html
CHANGED
|
@@ -99,12 +99,12 @@
|
|
| 99 |
<img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/MEDDICC%20Scorecard%20Logo.png" alt="MEDDICC Logo" class="w-18 h-12">
|
| 100 |
</div>
|
| 101 |
<h1 class="text-4xl font-bold mb-2 text-white">MEDDICC Scorecard</h1>
|
| 102 |
-
<p class="text-purple-200 font-light text-lg">Select the customer's industry
|
| 103 |
|
| 104 |
-
<div class="mt-8 mb-6">
|
| 105 |
<div class="relative">
|
| 106 |
<select id="industry" class="w-full p-4 bg-white/20 border-2 border-purple-300 rounded-xl text-white placeholder-purple-200 focus:ring-2 focus:ring-white focus:outline-none transition-all appearance-none">
|
| 107 |
-
<option value="" disabled selected>Select an
|
| 108 |
<option value="FSI">FSI (Financial Services)</option>
|
| 109 |
<option value="Healthcare">Healthcare</option>
|
| 110 |
<option value="Public Sector & Education">Public Sector & Education</option>
|
|
@@ -119,12 +119,16 @@
|
|
| 119 |
<option value="Startups">Startups</option>
|
| 120 |
</select>
|
| 121 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
</div>
|
| 123 |
|
| 124 |
-
<div id="industry-description" class="bg-purple-800/50 p-4 rounded-lg mb-4 hidden min-h-[60px]">
|
| 125 |
-
<p class="text-purple-100 text-sm"></p>
|
| 126 |
-
</div>
|
| 127 |
-
|
| 128 |
<button id="start-btn" disabled class="w-full py-4 bg-white text-purple-700 font-semibold rounded-xl shadow-lg hover:bg-gray-100 transform hover:scale-102 transition-all disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none mb-4 flex items-center justify-center space-x-2">
|
| 129 |
<span>Start Qualification</span>
|
| 130 |
<i data-feather="arrow-right" class="w-5 h-5"></i>
|
|
@@ -207,7 +211,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 207 |
themeToggle.addEventListener('click', () => {
|
| 208 |
html.classList.toggle('dark');
|
| 209 |
localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
|
| 210 |
-
feather.replace();
|
| 211 |
});
|
| 212 |
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
| 213 |
html.classList.add('dark');
|
|
@@ -240,55 +244,21 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 240 |
];
|
| 241 |
|
| 242 |
const industryInsights = {
|
| 243 |
-
'FSI': 'Financial Services buyers prioritize regulatory compliance, data security, and ultra-low latency for real-time transactions and fraud detection.',
|
| 244 |
-
'Healthcare': 'Healthcare organizations focus on HIPAA/GDPR compliance, interoperability with EHR/EMR systems, and AI-driven patient data privacy.',
|
| 245 |
-
'Public Sector & Education': 'Public Sector & Education buyers value cost efficiency, scalability for public demand, and strict adherence to government/educational data policies.',
|
| 246 |
-
'Retail and Ecommerce': 'Retail and Ecommerce companies need seamless omnichannel integration, AI-powered personalization, and real-time inventory/analytics.',
|
| 247 |
-
'Tech (SaaS)': 'Tech (SaaS) companies look for developer-friendly APIs, scalability for user growth, and AI/ML tools for product innovation.',
|
| 248 |
-
'Cyber': 'Cyber security teams require advanced threat detection, zero-trust architecture, and AI-driven automation for rapid incident response.',
|
| 249 |
-
'Media and Entertainment': 'Media and Entertainment firms need high-performance content delivery, AI for recommendation engines, and scalable storage for large media files.',
|
| 250 |
-
'Manufacturing': 'Manufacturing companies value predictive maintenance, IoT integration, and AI for supply chain optimization and defect detection.',
|
| 251 |
-
'Energy': 'Energy sector focuses on AI for predictive analytics in asset management, compliance with energy regulations, and operational resilience.',
|
| 252 |
-
'Logistics': 'Logistics companies prioritize real-time tracking, AI for route optimization, and integration with global supply chain platforms.',
|
| 253 |
-
'Transport': 'Transportation firms need AI for fleet management, real-time analytics for safety/compliance, and scalable IoT integration.',
|
| 254 |
-
'Startups': 'Startups typically look for pay-as-you-go pricing, rapid deployment, and AI tools that accelerate MVP development and scaling.'
|
| 255 |
};
|
| 256 |
|
| 257 |
const industrySpecificAdvice = {
|
| 258 |
-
'FSI': {
|
| 259 |
-
'IDENTIFIED PAIN': 'Frame the pain in terms of regulatory compliance, risk mitigation, or fraud detection. FSI buyers are heavily motivated by these pressures.',
|
| 260 |
-
'METRICS & MOTIVES': 'Focus on metrics like ROI, reduction in compliance penalties, and cost of capital. The Economic Buyer will need a business case built on these specific KPIs.',
|
| 261 |
-
'PAPER PROCESS': 'The legal and compliance review in FSI is rigorous. Proactively provide security documentation and compliance certificates to accelerate this stage.'
|
| 262 |
-
},
|
| 263 |
-
'Healthcare': {
|
| 264 |
-
'IDENTIFIED PAIN': 'Pain in Healthcare is often tied to patient data privacy (HIPAA), interoperability with EHR/EMR systems, or improving patient outcomes. Your solution must align with these critical areas.',
|
| 265 |
-
'CHAMPIONS': 'A strong champion in Healthcare is often a clinical leader who feels the pain directly, not just an IT manager. Find someone whose goals are tied to patient care or operational efficiency.',
|
| 266 |
-
'DECISION CRITERIA': 'Criteria will heavily weigh on data security and HIPAA compliance. Ensure you are positioned as the most secure and compliant option against competitors.'
|
| 267 |
-
},
|
| 268 |
-
'Tech (SaaS)': {
|
| 269 |
-
'COMPETITION': 'The SaaS market is crowded. Your competitive advantage must be crystal clear—is it developer-friendly APIs, better integration capabilities, or a superior UX? Hammer this point with your champion.',
|
| 270 |
-
'ECONOMIC BUYER': 'Confirm the budget source. Is it coming from an operational budget, or does it require a new capital expenditure request? This dramatically impacts the timeline in fast-moving tech companies.',
|
| 271 |
-
'GO LIVE PLAN': 'Offer a "quick start" or phased implementation plan. SaaS buyers value rapid time-to-value and want to see an impact quickly.'
|
| 272 |
-
}
|
| 273 |
};
|
| 274 |
|
| 275 |
const summarySnippets = {
|
| 276 |
-
'IDENTIFIED PAIN': 'Clarify and quantify the business pain with the Economic Buyer.',
|
| 277 |
-
'CHAMPIONS': 'Develop a stronger relationship with your champion or find a new one closer to the EB.',
|
| 278 |
-
'GO LIVE PLAN': 'Formalize the implementation plan and get stakeholder buy-in.',
|
| 279 |
-
'METRICS & MOTIVES': 'Agree on measurable success metrics (QBC) that align with business goals.',
|
| 280 |
-
'DECISION CRITERIA': 'Influence the decision criteria to favor your unique strengths.',
|
| 281 |
-
'DECISION PROCESS': 'Establish a compelling event to create urgency.',
|
| 282 |
-
'COMPETITION': 'Set competitive traps and clearly articulate your unique differentiators.',
|
| 283 |
-
'BLOCKERS?': 'Identify all potential blockers and create a mitigation plan.',
|
| 284 |
-
'ECONOMIC BUYER': 'Secure access to the Economic Buyer and confirm budget.',
|
| 285 |
-
'PAPER PROCESS': 'De-risk the procurement stage by engaging with legal and security early.'
|
| 286 |
};
|
| 287 |
|
| 288 |
// DOM elements
|
| 289 |
const industryScreen = document.getElementById('industry-screen');
|
| 290 |
const industrySelect = document.getElementById('industry');
|
| 291 |
-
const
|
| 292 |
const startBtn = document.getElementById('start-btn');
|
| 293 |
const questionScreens = document.getElementById('question-screens');
|
| 294 |
const progressBar = document.getElementById('progress-bar');
|
|
@@ -303,22 +273,16 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 303 |
// App state
|
| 304 |
let currentQuestion = 0;
|
| 305 |
let selectedIndustry = '';
|
|
|
|
| 306 |
let userAnswers = [];
|
| 307 |
const maxPossibleScore = questions.length * 9;
|
| 308 |
|
| 309 |
// --- EVENT LISTENERS ---
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
industryDescription.classList.remove('hidden');
|
| 316 |
-
startBtn.disabled = false;
|
| 317 |
-
} else {
|
| 318 |
-
industryDescription.classList.add('hidden');
|
| 319 |
-
startBtn.disabled = true;
|
| 320 |
-
}
|
| 321 |
-
});
|
| 322 |
|
| 323 |
startBtn.addEventListener('click', function() {
|
| 324 |
industryScreen.classList.add('hidden');
|
|
@@ -332,9 +296,10 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 332 |
function resetQuiz() {
|
| 333 |
currentQuestion = 0;
|
| 334 |
selectedIndustry = '';
|
|
|
|
| 335 |
userAnswers = [];
|
| 336 |
industrySelect.value = "";
|
| 337 |
-
|
| 338 |
startBtn.disabled = true;
|
| 339 |
resultsScreen.classList.add('hidden');
|
| 340 |
industryScreen.classList.remove('hidden');
|
|
@@ -353,7 +318,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 353 |
|
| 354 |
const questionScreen = document.createElement('div');
|
| 355 |
questionScreen.className = `question-screen flex flex-col pt-16 p-6 bg-gray-100 dark:bg-gray-900 fade-in`;
|
| 356 |
-
questionScreen.id = `question-${index}`;
|
| 357 |
|
| 358 |
const backButtonHTML = `<button id="back-btn-${index}" class="w-1/3 py-3 bg-gray-300 dark:bg-gray-700 text-gray-800 dark:text-gray-200 font-semibold rounded-lg shadow-md hover:bg-gray-400 dark:hover:bg-gray-600 transition">Back</button>`;
|
| 359 |
|
|
@@ -434,62 +398,45 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 434 |
scoreBreakdown.innerHTML = '';
|
| 435 |
userAnswers.forEach(answer => {
|
| 436 |
const scoreRatio = (answer.score + 5) / 14;
|
| 437 |
-
let scoreColor = 'text-red-600 dark:text-red-400';
|
| 438 |
-
let recommendationHTML = '';
|
| 439 |
|
| 440 |
if (scoreRatio >= 0.7) scoreColor = 'text-green-600 dark:text-green-400';
|
| 441 |
else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-600 dark:text-yellow-400';
|
| 442 |
|
| 443 |
if (answer.score < 5) {
|
| 444 |
let advice = 'No specific recommendation available. Focus on improving this area.';
|
| 445 |
-
const genericAdvice = {
|
| 446 |
-
'IDENTIFIED PAIN': 'Work with the customer to better define their business pain and how your solution addresses it.',
|
| 447 |
-
'CHAMPIONS': 'Identify and engage with champions who can influence the economic buyer.',
|
| 448 |
-
'GO LIVE PLAN': 'Develop a clear implementation plan with agreed timelines and milestones.',
|
| 449 |
-
'METRICS & MOTIVES': 'Establish clear metrics for success that are agreed by all stakeholders.',
|
| 450 |
-
'DECISION CRITERIA': 'Ensure your solution meets the customer\'s decision criteria or work to influence those criteria.',
|
| 451 |
-
'DECISION PROCESS': 'Identify and document the compelling reason for the customer to act now.',
|
| 452 |
-
'COMPETITION': 'Differentiate your solution and establish why you\'re the preferred choice.',
|
| 453 |
-
'BLOCKERS?': 'Proactively identify and address any potential blockers to the deal progressing.',
|
| 454 |
-
'ECONOMIC BUYER': 'Confirm budget availability and secure commitment from the economic buyer.',
|
| 455 |
-
'PAPER PROCESS': 'Advance discussions on pricing and contractual terms to avoid last-minute hurdles.'
|
| 456 |
-
};
|
| 457 |
|
| 458 |
if (industrySpecificAdvice[selectedIndustry] && industrySpecificAdvice[selectedIndustry][answer.section]) {
|
| 459 |
advice = industrySpecificAdvice[selectedIndustry][answer.section];
|
| 460 |
} else if (genericAdvice[answer.section]) {
|
| 461 |
advice = genericAdvice[answer.section];
|
| 462 |
}
|
| 463 |
-
|
| 464 |
-
recommendationHTML = `
|
| 465 |
-
<div class="mt-3 pt-3 border-t border-red-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-3 rounded-b-lg -m-4 mt-4">
|
| 466 |
-
<p class="text-sm font-medium text-red-800 dark:text-red-200"><strong>Recommendation:</strong> ${advice}</p>
|
| 467 |
-
</div>
|
| 468 |
-
`;
|
| 469 |
}
|
| 470 |
-
|
| 471 |
-
const sectionScore = `
|
| 472 |
-
<div class="bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm">
|
| 473 |
-
<div class="flex justify-between items-start mb-2">
|
| 474 |
-
<h4 class="font-medium">${answer.section}</h4>
|
| 475 |
-
<span class="font-bold ${scoreColor}">${answer.score}/9</span>
|
| 476 |
-
</div>
|
| 477 |
-
<p class="text-sm text-gray-600 dark:text-gray-400">${answer.answer}</p>
|
| 478 |
-
${recommendationHTML}
|
| 479 |
-
</div>`;
|
| 480 |
scoreBreakdown.insertAdjacentHTML('beforeend', sectionScore);
|
| 481 |
});
|
| 482 |
|
| 483 |
-
generateExecutiveSummary(userAnswers, percentage);
|
| 484 |
|
| 485 |
feather.replace();
|
| 486 |
}
|
| 487 |
|
| 488 |
-
function generateExecutiveSummary(answers, overallScore) {
|
|
|
|
|
|
|
| 489 |
const sortedAnswers = [...answers].sort((a, b) => a.score - b.score);
|
| 490 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 491 |
const strength = sortedAnswers[sortedAnswers.length - 1];
|
| 492 |
-
|
| 493 |
let summaryHTML = '<ul class="space-y-3 text-gray-700 dark:text-gray-300">';
|
| 494 |
|
| 495 |
if (overallScore >= 60 && strength.score >= 7) {
|
|
@@ -500,29 +447,26 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
| 500 |
const snippet = summarySnippets[weakness.section] || 'This area needs to be addressed.';
|
| 501 |
summaryHTML += `<li class="flex items-start"><span class="mr-2 text-red-500">🔴</span><span><strong>Urgent Focus: ${weakness.section}</strong>. ${snippet}</span></li>`;
|
| 502 |
});
|
| 503 |
-
|
| 504 |
summaryHTML += '</ul>';
|
| 505 |
|
| 506 |
-
// --- MODIFICATION START: Add strategic summary message ---
|
| 507 |
let strategicMessage = '';
|
| 508 |
if (overallScore <= 19) {
|
| 509 |
-
strategicMessage =
|
| 510 |
} else if (overallScore <= 39) {
|
| 511 |
-
strategicMessage = "
|
|
|
|
|
|
|
| 512 |
} else if (overallScore <= 59) {
|
| 513 |
-
|
|
|
|
|
|
|
| 514 |
} else if (overallScore <= 79) {
|
| 515 |
-
strategicMessage = "Start preparing the
|
| 516 |
} else {
|
| 517 |
-
strategicMessage = "
|
| 518 |
}
|
| 519 |
|
| 520 |
-
summaryHTML += `
|
| 521 |
-
<div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-700">
|
| 522 |
-
<p class="text-sm italic text-gray-600 dark:text-gray-400">${strategicMessage}</p>
|
| 523 |
-
</div>
|
| 524 |
-
`;
|
| 525 |
-
// --- MODIFICATION END ---
|
| 526 |
|
| 527 |
executiveSummary.innerHTML = summaryHTML;
|
| 528 |
}
|
|
|
|
| 99 |
<img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/MEDDICC%20Scorecard%20Logo.png" alt="MEDDICC Logo" class="w-18 h-12">
|
| 100 |
</div>
|
| 101 |
<h1 class="text-4xl font-bold mb-2 text-white">MEDDICC Scorecard</h1>
|
| 102 |
+
<p class="text-purple-200 font-light text-lg">Select the customer's industry and current deal stage</p>
|
| 103 |
|
| 104 |
+
<div class="mt-8 mb-6 grid sm:grid-cols-2 gap-4">
|
| 105 |
<div class="relative">
|
| 106 |
<select id="industry" class="w-full p-4 bg-white/20 border-2 border-purple-300 rounded-xl text-white placeholder-purple-200 focus:ring-2 focus:ring-white focus:outline-none transition-all appearance-none">
|
| 107 |
+
<option value="" disabled selected>Select an Industry</option>
|
| 108 |
<option value="FSI">FSI (Financial Services)</option>
|
| 109 |
<option value="Healthcare">Healthcare</option>
|
| 110 |
<option value="Public Sector & Education">Public Sector & Education</option>
|
|
|
|
| 119 |
<option value="Startups">Startups</option>
|
| 120 |
</select>
|
| 121 |
</div>
|
| 122 |
+
<div class="relative">
|
| 123 |
+
<select id="sales-stage" class="w-full p-4 bg-white/20 border-2 border-purple-300 rounded-xl text-white placeholder-purple-200 focus:ring-2 focus:ring-white focus:outline-none transition-all appearance-none">
|
| 124 |
+
<option value="" disabled selected>Select Sales Stage</option>
|
| 125 |
+
<option value="Early Stage">Early Stage</option>
|
| 126 |
+
<option value="Evaluation / PoC">Evaluation / PoC</option>
|
| 127 |
+
<option value="Closing">Closing</option>
|
| 128 |
+
</select>
|
| 129 |
+
</div>
|
| 130 |
</div>
|
| 131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
<button id="start-btn" disabled class="w-full py-4 bg-white text-purple-700 font-semibold rounded-xl shadow-lg hover:bg-gray-100 transform hover:scale-102 transition-all disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none mb-4 flex items-center justify-center space-x-2">
|
| 133 |
<span>Start Qualification</span>
|
| 134 |
<i data-feather="arrow-right" class="w-5 h-5"></i>
|
|
|
|
| 211 |
themeToggle.addEventListener('click', () => {
|
| 212 |
html.classList.toggle('dark');
|
| 213 |
localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
|
| 214 |
+
feather.replace();
|
| 215 |
});
|
| 216 |
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
| 217 |
html.classList.add('dark');
|
|
|
|
| 244 |
];
|
| 245 |
|
| 246 |
const industryInsights = {
|
| 247 |
+
'FSI': 'Financial Services buyers prioritize regulatory compliance, data security, and ultra-low latency for real-time transactions and fraud detection.', 'Healthcare': 'Healthcare organizations focus on HIPAA/GDPR compliance, interoperability with EHR/EMR systems, and AI-driven patient data privacy.', 'Public Sector & Education': 'Public Sector & Education buyers value cost efficiency, scalability for public demand, and strict adherence to government/educational data policies.', 'Retail and Ecommerce': 'Retail and Ecommerce companies need seamless omnichannel integration, AI-powered personalization, and real-time inventory/analytics.', 'Tech (SaaS)': 'Tech (SaaS) companies look for developer-friendly APIs, scalability for user growth, and AI/ML tools for product innovation.', 'Cyber': 'Cyber security teams require advanced threat detection, zero-trust architecture, and AI-driven automation for rapid incident response.', 'Media and Entertainment': 'Media and Entertainment firms need high-performance content delivery, AI for recommendation engines, and scalable storage for large media files.', 'Manufacturing': 'Manufacturing companies value predictive maintenance, IoT integration, and AI for supply chain optimization and defect detection.', 'Energy': 'Energy sector focuses on AI for predictive analytics in asset management, compliance with energy regulations, and operational resilience.', 'Logistics': 'Logistics companies prioritize real-time tracking, AI for route optimization, and integration with global supply chain platforms.', 'Transport': 'Transportation firms need AI for fleet management, real-time analytics for safety/compliance, and scalable IoT integration.', 'Startups': 'Startups typically look for pay-as-you-go pricing, rapid deployment, and AI tools that accelerate MVP development and scaling.'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
};
|
| 249 |
|
| 250 |
const industrySpecificAdvice = {
|
| 251 |
+
'FSI': { 'IDENTIFIED PAIN': 'Frame the pain in terms of regulatory compliance, risk mitigation, or fraud detection. FSI buyers are heavily motivated by these pressures.', 'METRICS & MOTIVES': 'Focus on metrics like ROI, reduction in compliance penalties, and cost of capital. The Economic Buyer will need a business case built on these specific KPIs.', 'PAPER PROCESS': 'The legal and compliance review in FSI is rigorous. Proactively provide security documentation and compliance certificates to accelerate this stage.' }, 'Healthcare': { 'IDENTIFIED PAIN': 'Pain in Healthcare is often tied to patient data privacy (HIPAA), interoperability with EHR/EMR systems, or improving patient outcomes. Your solution must align with these critical areas.', 'CHAMPIONS': 'A strong champion in Healthcare is often a clinical leader who feels the pain directly, not just an IT manager. Find someone whose goals are tied to patient care or operational efficiency.', 'DECISION CRITERIA': 'Criteria will heavily weigh on data security and HIPAA compliance. Ensure you are positioned as the most secure and compliant option against competitors.' }, 'Tech (SaaS)': { 'COMPETITION': 'The SaaS market is crowded. Your competitive advantage must be crystal clear—is it developer-friendly APIs, better integration capabilities, or a superior UX? Hammer this point with your champion.', 'ECONOMIC BUYER': 'Confirm the budget source. Is it coming from an operational budget, or does it require a new capital expenditure request? This dramatically impacts the timeline in fast-moving tech companies.', 'GO LIVE PLAN': 'Offer a "quick start" or phased implementation plan. SaaS buyers value rapid time-to-value and want to see an impact quickly.' }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 252 |
};
|
| 253 |
|
| 254 |
const summarySnippets = {
|
| 255 |
+
'IDENTIFIED PAIN': 'Clarify and quantify the business pain with the Economic Buyer.', 'CHAMPIONS': 'Develop a stronger relationship with your champion or find a new one closer to the EB.', 'GO LIVE PLAN': 'Formalize the implementation plan and get stakeholder buy-in.', 'METRICS & MOTIVES': 'Agree on measurable success metrics (QBC) that align with business goals.', 'DECISION CRITERIA': 'Influence the decision criteria to favor your unique strengths.', 'DECISION PROCESS': 'Establish a compelling event to create urgency.', 'COMPETITION': 'Set competitive traps and clearly articulate your unique differentiators.', 'BLOCKERS?': 'Identify all potential blockers and create a mitigation plan.', 'ECONOMIC BUYER': 'Secure access to the Economic Buyer and confirm budget.', 'PAPER PROCESS': 'De-risk the procurement stage by engaging with legal and security early.'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
};
|
| 257 |
|
| 258 |
// DOM elements
|
| 259 |
const industryScreen = document.getElementById('industry-screen');
|
| 260 |
const industrySelect = document.getElementById('industry');
|
| 261 |
+
const salesStageSelect = document.getElementById('sales-stage');
|
| 262 |
const startBtn = document.getElementById('start-btn');
|
| 263 |
const questionScreens = document.getElementById('question-screens');
|
| 264 |
const progressBar = document.getElementById('progress-bar');
|
|
|
|
| 273 |
// App state
|
| 274 |
let currentQuestion = 0;
|
| 275 |
let selectedIndustry = '';
|
| 276 |
+
let selectedSalesStage = '';
|
| 277 |
let userAnswers = [];
|
| 278 |
const maxPossibleScore = questions.length * 9;
|
| 279 |
|
| 280 |
// --- EVENT LISTENERS ---
|
| 281 |
+
function checkSelections() {
|
| 282 |
+
startBtn.disabled = !(selectedIndustry && selectedSalesStage);
|
| 283 |
+
}
|
| 284 |
+
industrySelect.addEventListener('change', (e) => { selectedIndustry = e.target.value; checkSelections(); });
|
| 285 |
+
salesStageSelect.addEventListener('change', (e) => { selectedSalesStage = e.target.value; checkSelections(); });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 286 |
|
| 287 |
startBtn.addEventListener('click', function() {
|
| 288 |
industryScreen.classList.add('hidden');
|
|
|
|
| 296 |
function resetQuiz() {
|
| 297 |
currentQuestion = 0;
|
| 298 |
selectedIndustry = '';
|
| 299 |
+
selectedSalesStage = '';
|
| 300 |
userAnswers = [];
|
| 301 |
industrySelect.value = "";
|
| 302 |
+
salesStageSelect.value = "";
|
| 303 |
startBtn.disabled = true;
|
| 304 |
resultsScreen.classList.add('hidden');
|
| 305 |
industryScreen.classList.remove('hidden');
|
|
|
|
| 318 |
|
| 319 |
const questionScreen = document.createElement('div');
|
| 320 |
questionScreen.className = `question-screen flex flex-col pt-16 p-6 bg-gray-100 dark:bg-gray-900 fade-in`;
|
|
|
|
| 321 |
|
| 322 |
const backButtonHTML = `<button id="back-btn-${index}" class="w-1/3 py-3 bg-gray-300 dark:bg-gray-700 text-gray-800 dark:text-gray-200 font-semibold rounded-lg shadow-md hover:bg-gray-400 dark:hover:bg-gray-600 transition">Back</button>`;
|
| 323 |
|
|
|
|
| 398 |
scoreBreakdown.innerHTML = '';
|
| 399 |
userAnswers.forEach(answer => {
|
| 400 |
const scoreRatio = (answer.score + 5) / 14;
|
| 401 |
+
let scoreColor = 'text-red-600 dark:text-red-400', recommendationHTML = '';
|
|
|
|
| 402 |
|
| 403 |
if (scoreRatio >= 0.7) scoreColor = 'text-green-600 dark:text-green-400';
|
| 404 |
else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-600 dark:text-yellow-400';
|
| 405 |
|
| 406 |
if (answer.score < 5) {
|
| 407 |
let advice = 'No specific recommendation available. Focus on improving this area.';
|
| 408 |
+
const genericAdvice = { 'IDENTIFIED PAIN': 'Work with the customer to better define their business pain and how your solution addresses it.', 'CHAMPIONS': 'Identify and engage with champions who can influence the economic buyer.', 'GO LIVE PLAN': 'Develop a clear implementation plan with agreed timelines and milestones.', 'METRICS & MOTIVES': 'Establish clear metrics for success that are agreed by all stakeholders.', 'DECISION CRITERIA': 'Ensure your solution meets the customer\'s decision criteria or work to influence those criteria.', 'DECISION PROCESS': 'Identify and document the compelling reason for the customer to act now.', 'COMPETITION': 'Differentiate your solution and establish why you\'re the preferred choice.', 'BLOCKERS?': 'Proactively identify and address any potential blockers to the deal progressing.', 'ECONOMIC BUYER': 'Confirm budget availability and secure commitment from the economic buyer.', 'PAPER PROCESS': 'Advance discussions on pricing and contractual terms to avoid last-minute hurdles.' };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 409 |
|
| 410 |
if (industrySpecificAdvice[selectedIndustry] && industrySpecificAdvice[selectedIndustry][answer.section]) {
|
| 411 |
advice = industrySpecificAdvice[selectedIndustry][answer.section];
|
| 412 |
} else if (genericAdvice[answer.section]) {
|
| 413 |
advice = genericAdvice[answer.section];
|
| 414 |
}
|
| 415 |
+
recommendationHTML = `<div class="mt-3 pt-3 border-t border-red-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-3 rounded-b-lg -m-4 mt-4"><p class="text-sm font-medium text-red-800 dark:text-red-200"><strong>Recommendation:</strong> ${advice}</p></div>`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 416 |
}
|
| 417 |
+
const sectionScore = `<div class="bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm"><div class="flex justify-between items-start mb-2"><h4 class="font-medium">${answer.section}</h4><span class="font-bold ${scoreColor}">${answer.score}/9</span></div><p class="text-sm text-gray-600 dark:text-gray-400">${answer.answer}</p>${recommendationHTML}</div>`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 418 |
scoreBreakdown.insertAdjacentHTML('beforeend', sectionScore);
|
| 419 |
});
|
| 420 |
|
| 421 |
+
generateExecutiveSummary(userAnswers, percentage, selectedSalesStage);
|
| 422 |
|
| 423 |
feather.replace();
|
| 424 |
}
|
| 425 |
|
| 426 |
+
function generateExecutiveSummary(answers, overallScore, salesStage) {
|
| 427 |
+
let weaknesses = [];
|
| 428 |
+
const metricsMotiveAnswer = answers.find(a => a.section === 'METRICS & MOTIVES');
|
| 429 |
const sortedAnswers = [...answers].sort((a, b) => a.score - b.score);
|
| 430 |
+
|
| 431 |
+
if (metricsMotiveAnswer && metricsMotiveAnswer.score < 5) {
|
| 432 |
+
weaknesses.push(metricsMotiveAnswer);
|
| 433 |
+
const nextWeakest = sortedAnswers.find(a => a.section !== 'METRICS & MOTIVES');
|
| 434 |
+
if (nextWeakest) weaknesses.push(nextWeakest);
|
| 435 |
+
} else {
|
| 436 |
+
weaknesses = sortedAnswers.slice(0, 2);
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
const strength = sortedAnswers[sortedAnswers.length - 1];
|
|
|
|
| 440 |
let summaryHTML = '<ul class="space-y-3 text-gray-700 dark:text-gray-300">';
|
| 441 |
|
| 442 |
if (overallScore >= 60 && strength.score >= 7) {
|
|
|
|
| 447 |
const snippet = summarySnippets[weakness.section] || 'This area needs to be addressed.';
|
| 448 |
summaryHTML += `<li class="flex items-start"><span class="mr-2 text-red-500">🔴</span><span><strong>Urgent Focus: ${weakness.section}</strong>. ${snippet}</span></li>`;
|
| 449 |
});
|
|
|
|
| 450 |
summaryHTML += '</ul>';
|
| 451 |
|
|
|
|
| 452 |
let strategicMessage = '';
|
| 453 |
if (overallScore <= 19) {
|
| 454 |
+
strategicMessage = salesStage === 'Early Stage' ? "Okay if early, but more qualification is required. What's the buyer trying to achieve?" : "Dangerous if considering an Eval/PoC with this score. Re-qualify immediately.";
|
| 455 |
} else if (overallScore <= 39) {
|
| 456 |
+
if (salesStage === 'Early Stage') strategicMessage = "Good news for an early stage deal. Now attach our offer to a mutually agreed business outcome.";
|
| 457 |
+
else if (salesStage === 'Evaluation / PoC') strategicMessage = "Be cautious. The business outcome for this PoC is not strong enough. Why now? Why us?";
|
| 458 |
+
else strategicMessage = "Be worried. A deal this weak should not be in the closing stage.";
|
| 459 |
} else if (overallScore <= 59) {
|
| 460 |
+
if (salesStage === 'Early Stage') strategicMessage = "Very good news for an early stage deal. Solid foundation to build upon.";
|
| 461 |
+
else if (salesStage === 'Evaluation / PoC') strategicMessage = "This looks good. Identify potential blockers and confirm the timeline and budget.";
|
| 462 |
+
else strategicMessage = "Look for blockers. Can the champion access the Economic Buyer? Is this a real champion or just a coach?";
|
| 463 |
} else if (overallScore <= 79) {
|
| 464 |
+
strategicMessage = salesStage === 'Evaluation / PoC' ? "This is very strong for a PoC. Start preparing the proposal and success metrics." : "Focus on differentiation and beware of buyer ghosting as you move to close.";
|
| 465 |
} else {
|
| 466 |
+
strategicMessage = "The finish line is in sight, but it's not over until it's signed. Verbally discuss pricing, contracts, and legal with champions and expect negotiations.";
|
| 467 |
}
|
| 468 |
|
| 469 |
+
summaryHTML += `<div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-700"><p class="text-sm italic text-gray-600 dark:text-gray-400">${strategicMessage}</p></div>`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 470 |
|
| 471 |
executiveSummary.innerHTML = summaryHTML;
|
| 472 |
}
|