Spaces:
Running
Running
Manual changes saved
Browse files- scorecard.html +383 -517
scorecard.html
CHANGED
|
@@ -6,12 +6,13 @@
|
|
| 6 |
<title>Sales Qualification Tool</title>
|
| 7 |
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
| 8 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
-
<link href="https://fonts.googleapis.com/css2?family=
|
| 10 |
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
|
| 11 |
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
| 12 |
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 13 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 14 |
<style>
|
|
|
|
| 15 |
.question-screen {
|
| 16 |
min-height: 100vh;
|
| 17 |
transition: all 0.3s ease;
|
|
@@ -32,569 +33,434 @@
|
|
| 32 |
-webkit-appearance: none;
|
| 33 |
-moz-appearance: none;
|
| 34 |
appearance: none;
|
| 35 |
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='
|
| 36 |
background-repeat: no-repeat;
|
| 37 |
background-position: right 0.75rem center;
|
| 38 |
background-size: 1.25rem;
|
| 39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
</style>
|
| 41 |
</head>
|
| 42 |
-
<body class="bg-
|
| 43 |
-
|
| 44 |
-
<
|
| 45 |
-
|
| 46 |
-
|
|
|
|
| 47 |
<img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/Scaleway-Logomark-White.png" alt="Logo" class="h-8 mr-2">
|
| 48 |
-
<span class="text-xl font-bold text-white font-heading">McGPT</span>
|
| 49 |
-
</a>
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
</nav>
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
</div>
|
| 67 |
</div>
|
|
|
|
| 68 |
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
</div>
|
| 76 |
</div>
|
| 77 |
</div>
|
| 78 |
-
</
|
| 79 |
-
<
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
<div class="flex-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
<img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/MEDDICC%20Scorecard%20Logo.png" alt="MEDDICC Logo" class="w-18 h-12">
|
| 86 |
-
</div>
|
| 87 |
-
<h1 class="text-
|
| 88 |
-
<p class="text-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
<div class="
|
| 92 |
-
<
|
| 93 |
-
<
|
| 94 |
-
<option value=""
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
</select>
|
| 108 |
-
<div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
|
| 109 |
-
<i data-feather="chevron-down" class="text-blue-300"></i>
|
| 110 |
-
</div>
|
| 111 |
-
</div>
|
| 112 |
-
</div>
|
| 113 |
-
|
| 114 |
-
<div id="industry-description" class="bg-[#6A27C0] p-4 rounded-lg mb-4 hidden">
|
| 115 |
-
<p class="text-blue-100 text-sm"></p>
|
| 116 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
</div>
|
| 123 |
</div>
|
|
|
|
| 124 |
|
| 125 |
-
|
| 126 |
-
<div
|
| 127 |
-
<
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
<div id="progress-bar" class="progress-bar bg-white h-full rounded-r-full" style="width: 0%"></div>
|
| 131 |
</div>
|
|
|
|
|
|
|
| 132 |
</div>
|
| 133 |
|
| 134 |
-
<
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
<span id="score-percentage" class="text-3xl font-bold text-blue-600">0%</span>
|
| 143 |
</div>
|
| 144 |
-
|
| 145 |
-
<
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
<div class="flex items-center mb-4">
|
| 150 |
-
<div class="w-8 h-8 bg-[#792DD4] rounded-lg flex items-center justify-center mr-3">
|
| 151 |
-
<i data-feather="info" class="text-white w-4 h-4"></i>
|
| 152 |
</div>
|
| 153 |
-
<
|
| 154 |
</div>
|
| 155 |
-
<div id="industry-insights" class="bg-white/90 p-5 rounded-xl shadow-md border border-white backdrop-blur-sm text-gray-800"></div>
|
| 156 |
</div>
|
| 157 |
-
|
| 158 |
-
<div
|
| 159 |
<div class="flex items-center mb-4">
|
| 160 |
-
<div class="w-8 h-8 bg-
|
| 161 |
-
<i data-feather="bar-chart-2" class="text-white w-4 h-4"></i>
|
| 162 |
-
</div>
|
| 163 |
<h3 class="text-xl font-bold">Score Breakdown</h3>
|
| 164 |
</div>
|
| 165 |
<div id="score-breakdown" class="space-y-4"></div>
|
| 166 |
</div>
|
| 167 |
-
|
| 168 |
-
<div class="mb-8">
|
| 169 |
-
<div class="flex items-center mb-4">
|
| 170 |
-
<div class="w-8 h-8 bg-[#792DD4] rounded-lg flex items-center justify-center mr-3">
|
| 171 |
-
<i data-feather="alert-triangle" class="text-white w-4 h-4"></i>
|
| 172 |
-
</div>
|
| 173 |
-
<h3 class="text-xl font-bold">Warnings & Recommendations</h3>
|
| 174 |
-
</div>
|
| 175 |
-
<div id="warnings" class="space-y-4"></div>
|
| 176 |
-
</div>
|
| 177 |
-
|
| 178 |
</div>
|
| 179 |
-
|
| 180 |
-
<div class="
|
| 181 |
-
|
| 182 |
-
<i data-feather="
|
| 183 |
-
<span>
|
| 184 |
</button>
|
| 185 |
</div>
|
| 186 |
</div>
|
| 187 |
</div>
|
| 188 |
-
|
| 189 |
-
// Mobile Menu Toggle
|
| 190 |
-
const mobileMenuButton = document.getElementById('mobileMenuButton');
|
| 191 |
-
const mobileMenu = document.getElementById('mobileMenu');
|
| 192 |
-
|
| 193 |
-
mobileMenuButton.addEventListener('click', () => {
|
| 194 |
-
mobileMenu.classList.toggle('hidden');
|
| 195 |
-
mobileMenuButton.classList.toggle('open');
|
| 196 |
-
});
|
| 197 |
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
html.classList.add('dark');
|
| 208 |
-
|
|
|
|
|
|
|
| 209 |
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
}
|
| 220 |
-
});
|
| 221 |
|
| 222 |
-
|
| 223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 224 |
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
{ text: "Economic Buyer Agrees & Has Validated Plan", score: 8 },
|
| 259 |
-
{ text: "Champion/Partner Collaborating To Complete Plan", score: 4 },
|
| 260 |
-
{ text: "Discussing Project & Timescales; Plan Incomplete", score: 0 },
|
| 261 |
-
{ text: "Too Early For Go Live Proposal", score: -3 }
|
| 262 |
-
]
|
| 263 |
-
},
|
| 264 |
-
{
|
| 265 |
-
section: "METRICS & MOTIVES",
|
| 266 |
-
question: "Have METRICS or a QBC been agreed by the ECONOMIC BUYER?",
|
| 267 |
-
answers: [
|
| 268 |
-
{ text: "All Key Stakeholders & Buyers Agree Metrics / QBC", score: 9 },
|
| 269 |
-
{ text: "Champion Says Economic Buyer Agrees Metrics / QBC", score: 7 },
|
| 270 |
-
{ text: "We/Our Partner & Champion All Agree Metrics / QBC", score: 4 },
|
| 271 |
-
{ text: "Only We/Our Partner Understand Metrics / QBC", score: 0 },
|
| 272 |
-
{ text: "Metrics / Motives Not Yet Identified", score: -3 }
|
| 273 |
-
]
|
| 274 |
-
},
|
| 275 |
-
{
|
| 276 |
-
section: "DECISION CRITERIA",
|
| 277 |
-
question: "Do we have clearly defined and agreed DECISION CRITERIA?",
|
| 278 |
-
answers: [
|
| 279 |
-
{ text: "Our Decision Criteria Preferred By Economic Buyer", score: 9 },
|
| 280 |
-
{ text: "Economic Buyer Agrees We Meet Requirements", score: 8 },
|
| 281 |
-
{ text: "Criteria Co-Authored & Agreed with Champion", score: 6 },
|
| 282 |
-
{ text: "Customer Sharing Specific Criteria For Demo/POC", score: 4 },
|
| 283 |
-
{ text: "Customer Using Own Criteria; Unclear If We Meet It", score: 0 },
|
| 284 |
-
{ text: "Buying Criteria Unknown/Incomplete", score: -3 }
|
| 285 |
-
]
|
| 286 |
-
},
|
| 287 |
-
{
|
| 288 |
-
section: "DECISION PROCESS",
|
| 289 |
-
question: "Why now?",
|
| 290 |
-
answers: [
|
| 291 |
-
{ text: "Critical reason for this month or specific date", score: 9 },
|
| 292 |
-
{ text: "Financial or Strategic Impact to Champion / Business if delayed", score: 7 },
|
| 293 |
-
{ text: "No Compelling Reason, But Timeline Agreed", score: 4 },
|
| 294 |
-
{ text: "Engaged But No Compelling Reason Provided", score: 2 },
|
| 295 |
-
{ text: "Salesperson's timeline", score: -3 }
|
| 296 |
-
]
|
| 297 |
-
},
|
| 298 |
-
{
|
| 299 |
-
section: "COMPETITION",
|
| 300 |
-
question: "Does customer prefer us to COMPETITION?",
|
| 301 |
-
answers: [
|
| 302 |
-
{ text: "Economic Buyer / Partner Agrees We Are Preferred Supplier", score: 9 },
|
| 303 |
-
{ text: "Economic Buyer Agrees Our Differentiators Address Pain", score: 7 },
|
| 304 |
-
{ text: "Champion/Partner Prefers Our Differentiators; Traps Set", score: 5 },
|
| 305 |
-
{ text: "Competition Identified, Differentiation Agreed As Of Interest", score: 3 },
|
| 306 |
-
{ text: "Competition Identified, But Not Confirmed As Preferred", score: 0 },
|
| 307 |
-
{ text: "Not Asked About Competition Yet", score: -3 }
|
| 308 |
-
]
|
| 309 |
-
},
|
| 310 |
-
{
|
| 311 |
-
section: "BLOCKERS?",
|
| 312 |
-
question: "Have we identified ALL potential blockers?",
|
| 313 |
-
answers: [
|
| 314 |
-
{ text: "All stakeholders agree on plan to address all blockers", score: 9 },
|
| 315 |
-
{ text: "Economic Buyer agrees to help address identified blockers", score: 7 },
|
| 316 |
-
{ text: "Blockers Identified & Discussing With Champion / Partner", score: 4 },
|
| 317 |
-
{ text: "We suspect blockers; haven't asked customer directly", score: 0 },
|
| 318 |
-
{ text: "No blockers identified yet", score: -3 }
|
| 319 |
-
]
|
| 320 |
-
},
|
| 321 |
-
{
|
| 322 |
-
section: "ECONOMIC BUYER",
|
| 323 |
-
question: "Has budget availability been confirmed?",
|
| 324 |
-
answers: [
|
| 325 |
-
{ text: "Economic Buyer Says Budget Signed Off & Secured", score: 9 },
|
| 326 |
-
{ text: "Economic Buyer Says Significant Budget assigned", score: 7 },
|
| 327 |
-
{ text: "Champion/Partner Says Budget Exists; Amount Unknown", score: 4 },
|
| 328 |
-
{ text: "Champion/Partner Confirms Budget Assigned Soon", score: 2 },
|
| 329 |
-
{ text: "Champion/Partner Still Trying To Secure Budget", score: 0 },
|
| 330 |
-
{ text: "Budget Source Not Yet Known", score: -3 }
|
| 331 |
-
]
|
| 332 |
-
},
|
| 333 |
-
{
|
| 334 |
-
section: "PAPER PROCESS",
|
| 335 |
-
question: "Where are with with pricing & contractual terms?",
|
| 336 |
-
answers: [
|
| 337 |
-
{ text: "Pricing/Contract & Terms Agreed and Approved", score: 9 },
|
| 338 |
-
{ text: "Contract/Terms Agreed; Legal Departments Engaged", score: 7 },
|
| 339 |
-
{ text: "Quantified Business Case Agreed, Security/Privacy Teams Engaged", score: 5 },
|
| 340 |
-
{ text: "Negotiating; Building Business Case But Gaps Remain", score: 4 },
|
| 341 |
-
{ text: "Customer/Partner has requested proposal", score: 2 },
|
| 342 |
-
{ text: "Pricing / contract not discussed yet", score: -5 }
|
| 343 |
-
]
|
| 344 |
-
}
|
| 345 |
-
];
|
| 346 |
|
| 347 |
-
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
| 358 |
-
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
};
|
| 362 |
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
const questionScreens = document.getElementById('question-screens');
|
| 369 |
-
const progressBar = document.getElementById('progress-bar');
|
| 370 |
-
const resultsScreen = document.getElementById('results-screen');
|
| 371 |
-
const scorePercentage = document.getElementById('score-percentage');
|
| 372 |
-
const scoreMessage = document.getElementById('score-message');
|
| 373 |
-
const industryInsightsDiv = document.getElementById('industry-insights');
|
| 374 |
-
const scoreBreakdown = document.getElementById('score-breakdown');
|
| 375 |
-
const warningsDiv = document.getElementById('warnings');
|
| 376 |
-
const emailReportBtn = document.getElementById('email-report');
|
| 377 |
-
const restartQuizBtn = document.getElementById('restart-quiz');
|
| 378 |
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 385 |
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
if (description) {
|
| 392 |
-
industryDescription.querySelector('p').textContent = description;
|
| 393 |
-
industryDescription.classList.remove('hidden');
|
| 394 |
-
startBtn.disabled = false;
|
| 395 |
-
} else {
|
| 396 |
-
industryDescription.classList.add('hidden');
|
| 397 |
-
startBtn.disabled = true;
|
| 398 |
-
}
|
| 399 |
-
});
|
| 400 |
|
| 401 |
-
|
| 402 |
-
industryScreen.classList.add('hidden');
|
| 403 |
-
questionScreens.classList.remove('hidden');
|
| 404 |
-
renderQuestion(currentQuestion);
|
| 405 |
-
});
|
| 406 |
|
| 407 |
-
|
| 408 |
-
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
});
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
|
| 419 |
-
totalScore = 0;
|
| 420 |
-
|
| 421 |
-
industryScreen.classList.remove('hidden');
|
| 422 |
-
questionScreens.classList.add('hidden');
|
| 423 |
-
resultsScreen.classList.add('hidden');
|
| 424 |
-
|
| 425 |
-
industrySelect.value = '';
|
| 426 |
-
industryDescription.classList.add('hidden');
|
| 427 |
-
startBtn.disabled = true;
|
| 428 |
-
}
|
| 429 |
|
| 430 |
-
|
| 431 |
-
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
|
| 435 |
-
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
|
| 442 |
-
|
| 443 |
-
|
| 444 |
-
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
|
| 454 |
-
|
| 455 |
-
|
| 456 |
-
|
| 457 |
-
|
| 458 |
-
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
<div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none">
|
| 462 |
-
<i data-feather="chevron-down"></i>
|
| 463 |
-
</div>
|
| 464 |
-
</div>
|
| 465 |
-
</div>
|
| 466 |
-
<button id="next-btn-${index}" disabled class="w-full py-3 bg-[#9B5CEB] text-white font-semibold rounded-lg shadow-md hover:bg-[#8B5CF6] transition disabled:opacity-50 disabled:cursor-not-allowed mb-4">
|
| 467 |
-
${index === questions.length - 1 ? 'Finish' : 'Next'}
|
| 468 |
-
</button>
|
| 469 |
</div>
|
| 470 |
-
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
| 475 |
-
|
| 476 |
-
|
| 477 |
-
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
|
| 481 |
-
|
| 482 |
-
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
|
| 493 |
-
|
| 494 |
-
|
| 495 |
-
renderQuestion(currentQuestion);
|
| 496 |
-
});
|
| 497 |
-
}
|
| 498 |
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
// Calculate percentage (normalize to 0-100 scale)
|
| 505 |
-
const normalizedScore = Math.max(0, totalScore + (questions.length * 3)); // Adjust for negative scores
|
| 506 |
-
const percentage = Math.round((normalizedScore / (maxPossibleScore + (questions.length * 3))) * 100);
|
| 507 |
-
|
| 508 |
-
scorePercentage.textContent = `${percentage}%`;
|
| 509 |
-
|
| 510 |
-
// Set score message
|
| 511 |
-
if (percentage >= 80) {
|
| 512 |
-
scoreMessage.textContent = "High probability of winning! This opportunity is well-qualified.";
|
| 513 |
-
} else if (percentage >= 60) {
|
| 514 |
-
scoreMessage.textContent = "Good chance of winning. Focus on improving weaker areas.";
|
| 515 |
-
} else if (percentage >= 40) {
|
| 516 |
-
scoreMessage.textContent = "Moderate chance. Significant improvements needed in several areas.";
|
| 517 |
-
} else {
|
| 518 |
-
scoreMessage.textContent = "Low probability. Consider whether to continue pursuing this opportunity.";
|
| 519 |
-
}
|
| 520 |
-
|
| 521 |
-
// Set industry insights
|
| 522 |
-
industryInsightsDiv.textContent = industryInsights[selectedIndustry];
|
| 523 |
-
|
| 524 |
-
// Create score breakdown
|
| 525 |
-
scoreBreakdown.innerHTML = '';
|
| 526 |
-
answers.forEach((answer, index) => {
|
| 527 |
-
const sectionScore = document.createElement('div');
|
| 528 |
-
sectionScore.className = 'bg-white p-4 rounded-lg shadow-sm border border-gray-200';
|
| 529 |
-
|
| 530 |
-
const scoreRatio = answer.score / 9;
|
| 531 |
-
let scoreColor;
|
| 532 |
-
if (scoreRatio >= 0.8) scoreColor = 'text-green-600';
|
| 533 |
-
else if (scoreRatio >= 0.5) scoreColor = 'text-yellow-600';
|
| 534 |
-
else scoreColor = 'text-red-600';
|
| 535 |
-
|
| 536 |
-
sectionScore.innerHTML = `
|
| 537 |
-
<div class="flex justify-between items-start mb-2">
|
| 538 |
-
<h4 class="font-medium">${answer.section}</h4>
|
| 539 |
-
<span class="font-bold ${scoreColor}">${answer.score}/9</span>
|
| 540 |
-
</div>
|
| 541 |
-
<p class="text-sm text-gray-600 mb-2">${answer.answer}</p>
|
| 542 |
-
`;
|
| 543 |
-
|
| 544 |
-
scoreBreakdown.appendChild(sectionScore);
|
| 545 |
-
});
|
| 546 |
-
|
| 547 |
-
// Create warnings
|
| 548 |
-
warningsDiv.innerHTML = '';
|
| 549 |
-
const lowScores = answers.filter(a => a.score < 5);
|
| 550 |
-
// Add more industry-specific recommendations as needed
|
| 551 |
-
|
| 552 |
-
if (lowScores.length === 0) {
|
| 553 |
-
warningsDiv.innerHTML = `
|
| 554 |
-
<div class="bg-green-50 p-4 rounded-lg border border-green-200 text-green-800">
|
| 555 |
-
<p>No critical weaknesses identified. All areas scored well.</p>
|
| 556 |
-
</div>
|
| 557 |
-
`;
|
| 558 |
-
} else {
|
| 559 |
-
lowScores.forEach(score => {
|
| 560 |
-
const warning = document.createElement('div');
|
| 561 |
-
warning.className = 'bg-red-50 p-4 rounded-lg border border-red-200 text-red-800';
|
| 562 |
-
|
| 563 |
-
let advice = '';
|
| 564 |
-
if (score.section === "IDENTIFIED PAIN") {
|
| 565 |
-
advice = "Work with the customer to better define their business pain and how your solution addresses it.";
|
| 566 |
-
} else if (score.section === "CHAMPIONS") {
|
| 567 |
-
advice = "Identify and engage with champions who can influence the economic buyer.";
|
| 568 |
-
} else if (score.section === "GO LIVE PLAN") {
|
| 569 |
-
advice = "Develop a clear implementation plan with agreed timelines and milestones.";
|
| 570 |
-
} else if (score.section === "METRICS & MOTIVES") {
|
| 571 |
-
advice = "Establish clear metrics for success that are agreed by all stakeholders.";
|
| 572 |
-
} else if (score.section === "DECISION CRITERIA") {
|
| 573 |
-
advice = "Ensure your solution meets the customer's decision criteria or work to influence those criteria.";
|
| 574 |
-
} else if (score.section === "DECISION PROCESS") {
|
| 575 |
-
advice = "Identify and document the compelling reason for the customer to act now.";
|
| 576 |
-
} else if (score.section === "COMPETITION") {
|
| 577 |
-
advice = "Differentiate your solution and establish why you're the preferred choice.";
|
| 578 |
-
} else if (score.section === "BLOCKERS?") {
|
| 579 |
-
advice = "Identify and address any potential blockers to the deal progressing.";
|
| 580 |
-
} else if (score.section === "ECONOMIC BUYER") {
|
| 581 |
-
advice = "Confirm budget availability and secure commitment from the economic buyer.";
|
| 582 |
-
} else if (score.section === "PAPER PROCESS") {
|
| 583 |
-
advice = "Advance discussions on pricing and contractual terms to avoid last-minute hurdles.";
|
| 584 |
-
}
|
| 585 |
-
|
| 586 |
-
warning.innerHTML = `
|
| 587 |
-
<h4 class="font-semibold mb-1">${score.section}</h4>
|
| 588 |
-
<p class="text-sm mb-2">${score.question}</p>
|
| 589 |
-
<p class="text-sm font-medium">Recommendation: ${advice}</p>
|
| 590 |
-
`;
|
| 591 |
-
|
| 592 |
-
warningsDiv.appendChild(warning);
|
| 593 |
-
});
|
| 594 |
}
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 599 |
</body>
|
| 600 |
-
</html>
|
|
|
|
| 6 |
<title>Sales Qualification Tool</title>
|
| 7 |
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
| 8 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
|
| 10 |
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
|
| 11 |
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
| 12 |
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 13 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 14 |
<style>
|
| 15 |
+
body { font-family: 'Poppins', sans-serif; }
|
| 16 |
.question-screen {
|
| 17 |
min-height: 100vh;
|
| 18 |
transition: all 0.3s ease;
|
|
|
|
| 33 |
-webkit-appearance: none;
|
| 34 |
-moz-appearance: none;
|
| 35 |
appearance: none;
|
| 36 |
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
|
| 37 |
background-repeat: no-repeat;
|
| 38 |
background-position: right 0.75rem center;
|
| 39 |
background-size: 1.25rem;
|
| 40 |
}
|
| 41 |
+
.dark select {
|
| 42 |
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
|
| 43 |
+
}
|
| 44 |
+
.hamburger-line {
|
| 45 |
+
width: 20px; height: 2px; background-color: white; display: block; transition: all 0.3s;
|
| 46 |
+
}
|
| 47 |
+
.open .hamburger-line:nth-child(1) { transform: translateY(5px) rotate(45deg); }
|
| 48 |
+
.open .hamburger-line:nth-child(2) { opacity: 0; }
|
| 49 |
+
.open .hamburger-line:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
|
| 50 |
+
.nav-link.active {
|
| 51 |
+
font-weight: 600;
|
| 52 |
+
border-bottom: 2px solid #9B5CEB;
|
| 53 |
+
}
|
| 54 |
</style>
|
| 55 |
</head>
|
| 56 |
+
<body class="bg-gray-100 dark:bg-gray-900 text-gray-800 dark:text-gray-200 min-h-screen flex flex-col relative">
|
| 57 |
+
|
| 58 |
+
<header class="sticky top-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md shadow-sm">
|
| 59 |
+
<div class="container mx-auto px-4 py-3">
|
| 60 |
+
<div class="flex justify-between items-center">
|
| 61 |
+
<a href="index.html" class="flex items-center space-x-2">
|
| 62 |
<img src="https://huggingface.co/spaces/DjayChucko/EnablingSales/resolve/main/images/Scaleway-Logomark-White.png" alt="Logo" class="h-8 mr-2">
|
| 63 |
+
<span class="text-xl font-bold text-gray-800 dark:text-white font-heading">McGPT</span>
|
| 64 |
+
</a>
|
| 65 |
+
<nav class="hidden md:flex space-x-8">
|
| 66 |
+
<a href="index.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Home</a>
|
| 67 |
+
<a href="value-mapper.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Mapper</a>
|
| 68 |
+
<a href="scorecard.html" class="nav-link active py-2 px-1 text-gray-600 dark:text-gray-300">Scorecard</a>
|
| 69 |
+
<a href="strategy.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300 hover:text-purple-600 dark:hover:text-purple-400 transition-colors">Method</a>
|
| 70 |
+
</nav>
|
| 71 |
+
<div class="flex items-center space-x-4">
|
| 72 |
+
<button id="themeToggle" class="p-2 rounded-full text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700">
|
| 73 |
+
<i data-feather="moon" class="hidden dark:block"></i>
|
| 74 |
+
<i data-feather="sun" class="block dark:hidden"></i>
|
| 75 |
+
</button>
|
| 76 |
+
<button id="mobileMenuButton" class="md:hidden flex flex-col space-y-1.5 p-2 bg-purple-600 rounded-lg">
|
| 77 |
+
<span class="hamburger-line"></span>
|
| 78 |
+
<span class="hamburger-line"></span>
|
| 79 |
+
<span class="hamburger-line"></span>
|
| 80 |
+
</button>
|
|
|
|
| 81 |
</div>
|
| 82 |
+
</div>
|
| 83 |
|
| 84 |
+
<div id="mobileMenu" class="hidden md:hidden py-4 border-t border-gray-200 dark:border-gray-700 mt-3">
|
| 85 |
+
<div class="flex flex-col space-y-3">
|
| 86 |
+
<a href="index.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Home</a>
|
| 87 |
+
<a href="value-mapper.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Mapper</a>
|
| 88 |
+
<a href="scorecard.html" class="nav-link active py-2 px-1 text-gray-600 dark:text-gray-300">Scorecard</a>
|
| 89 |
+
<a href="strategy.html" class="nav-link py-2 px-1 text-gray-600 dark:text-gray-300">Method</a>
|
|
|
|
| 90 |
</div>
|
| 91 |
</div>
|
| 92 |
+
</div>
|
| 93 |
+
</header>
|
| 94 |
+
|
| 95 |
+
<div id="app" class="relative overflow-hidden flex-1">
|
| 96 |
+
<div id="industry-screen" class="question-screen flex items-center justify-center p-6 bg-gradient-to-br from-purple-600 to-indigo-700 text-white">
|
| 97 |
+
<div class="max-w-2xl mx-auto w-full text-center" data-aos="fade-up">
|
| 98 |
+
<div class="w-20 h-20 bg-white rounded-full flex items-center justify-center mx-auto mb-4 shadow-lg">
|
| 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 to begin qualification</p>
|
| 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 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>
|
| 111 |
+
<option value="Retail and Ecommerce">Retail and Ecommerce</option>
|
| 112 |
+
<option value="Tech (SaaS)">Tech (SaaS)</option>
|
| 113 |
+
<option value="Cyber">Cyber</option>
|
| 114 |
+
<option value="Media and Entertainment">Media and Entertainment</option>
|
| 115 |
+
<option value="Manufacturing">Manufacturing</option>
|
| 116 |
+
<option value="Energy">Energy</option>
|
| 117 |
+
<option value="Logistics">Logistics</option>
|
| 118 |
+
<option value="Transport">Transport</option>
|
| 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>
|
| 131 |
+
</button>
|
| 132 |
+
</div>
|
| 133 |
+
</div>
|
| 134 |
+
|
| 135 |
+
<div id="question-screens" class="hidden">
|
| 136 |
+
<div class="fixed top-0 left-0 right-0 z-10 bg-gray-100 dark:bg-gray-900 pt-16">
|
| 137 |
+
<div class="h-1.5 bg-gray-200 dark:bg-gray-700">
|
| 138 |
+
<div id="progress-bar" class="progress-bar bg-purple-600 h-full rounded-r-full"></div>
|
| 139 |
</div>
|
| 140 |
</div>
|
| 141 |
+
</div>
|
| 142 |
|
| 143 |
+
<div id="results-screen" class="question-screen p-6 bg-gray-100 dark:bg-gray-900 hidden overflow-y-auto">
|
| 144 |
+
<div class="max-w-4xl mx-auto w-full" data-aos="fade-in">
|
| 145 |
+
<div class="text-center mb-8">
|
| 146 |
+
<div class="w-24 h-24 bg-white dark:bg-gray-800 border-4 border-purple-500 rounded-full flex items-center justify-center mx-auto mb-4">
|
| 147 |
+
<span id="score-percentage" class="text-3xl font-bold text-purple-600 dark:text-purple-400">0%</span>
|
|
|
|
| 148 |
</div>
|
| 149 |
+
<h2 class="text-2xl font-bold mb-2">Qualification Complete</h2>
|
| 150 |
+
<p id="score-message" class="text-gray-600 dark:text-gray-400"></p>
|
| 151 |
</div>
|
| 152 |
|
| 153 |
+
<div class="grid md:grid-cols-2 gap-8">
|
| 154 |
+
<div class="space-y-6">
|
| 155 |
+
<div>
|
| 156 |
+
<div class="flex items-center mb-4">
|
| 157 |
+
<div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="info" class="text-white w-4 h-4"></i></div>
|
| 158 |
+
<h3 class="text-xl font-bold">Industry Insights</h3>
|
| 159 |
+
</div>
|
| 160 |
+
<div id="industry-insights" class="bg-white dark:bg-gray-800 p-5 rounded-xl shadow-md text-gray-800 dark:text-gray-200"></div>
|
|
|
|
| 161 |
</div>
|
| 162 |
+
|
| 163 |
+
<div>
|
| 164 |
+
<div class="flex items-center mb-4">
|
| 165 |
+
<div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="alert-triangle" class="text-white w-4 h-4"></i></div>
|
| 166 |
+
<h3 class="text-xl font-bold">Warnings & Recommendations</h3>
|
|
|
|
|
|
|
|
|
|
| 167 |
</div>
|
| 168 |
+
<div id="warnings" class="space-y-4"></div>
|
| 169 |
</div>
|
|
|
|
| 170 |
</div>
|
| 171 |
+
|
| 172 |
+
<div>
|
| 173 |
<div class="flex items-center mb-4">
|
| 174 |
+
<div class="w-8 h-8 bg-purple-600 rounded-lg flex items-center justify-center mr-3"><i data-feather="bar-chart-2" class="text-white w-4 h-4"></i></div>
|
|
|
|
|
|
|
| 175 |
<h3 class="text-xl font-bold">Score Breakdown</h3>
|
| 176 |
</div>
|
| 177 |
<div id="score-breakdown" class="space-y-4"></div>
|
| 178 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
</div>
|
| 180 |
+
|
| 181 |
+
<div class="mt-8">
|
| 182 |
+
<button id="restart-quiz" class="w-full py-4 bg-gradient-to-r from-purple-600 to-indigo-600 text-white font-semibold rounded-xl shadow-lg hover:from-purple-700 hover:to-indigo-700 transition-all duration-300 transform hover:scale-105 flex items-center justify-center space-x-2">
|
| 183 |
+
<i data-feather="refresh-cw" class="w-5 h-5"></i>
|
| 184 |
+
<span>Start New Scorecard</span>
|
| 185 |
</button>
|
| 186 |
</div>
|
| 187 |
</div>
|
| 188 |
</div>
|
| 189 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
|
| 191 |
+
<script>
|
| 192 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 193 |
+
// --- UI ELEMENTS & SETUP ---
|
| 194 |
+
AOS.init({ once: true, duration: 600 });
|
| 195 |
+
feather.replace();
|
| 196 |
+
|
| 197 |
+
// Mobile Menu Toggle
|
| 198 |
+
const mobileMenuButton = document.getElementById('mobileMenuButton');
|
| 199 |
+
const mobileMenu = document.getElementById('mobileMenu');
|
| 200 |
+
mobileMenuButton.addEventListener('click', () => {
|
| 201 |
+
mobileMenu.classList.toggle('hidden');
|
| 202 |
+
mobileMenuButton.classList.toggle('open');
|
| 203 |
+
});
|
| 204 |
+
|
| 205 |
+
// Theme Toggle
|
| 206 |
+
const themeToggle = document.getElementById('themeToggle');
|
| 207 |
+
const html = document.documentElement;
|
| 208 |
+
themeToggle.addEventListener('click', () => {
|
| 209 |
+
html.classList.toggle('dark');
|
| 210 |
+
localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
|
| 211 |
+
feather.replace(); // Re-render icons for color change
|
| 212 |
+
});
|
| 213 |
+
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
| 214 |
html.classList.add('dark');
|
| 215 |
+
} else {
|
| 216 |
+
html.classList.remove('dark');
|
| 217 |
+
}
|
| 218 |
|
| 219 |
+
// Set active nav link
|
| 220 |
+
const currentPage = window.location.pathname.split('/').pop() || 'index.html';
|
| 221 |
+
document.querySelectorAll('.nav-link').forEach(link => {
|
| 222 |
+
if (link.getAttribute('href') === currentPage) {
|
| 223 |
+
link.classList.add('active');
|
| 224 |
+
} else {
|
| 225 |
+
link.classList.remove('active');
|
| 226 |
+
}
|
| 227 |
+
});
|
|
|
|
|
|
|
| 228 |
|
| 229 |
+
// --- DATA & STATE MANAGEMENT ---
|
| 230 |
+
const questions = [
|
| 231 |
+
{ section: 'IDENTIFIED PAIN', question: 'Is our deal attached to addressing the customer\'s top business pain?', answers: [ { text: 'Economic Buyer Agrees Pain/Project A Top Business Priority', score: 9 }, { text: 'Identified Pain: Specific Business Project/Need Agreed', score: 7 }, { text: 'Needs/Pain Partially Defined (Scope / Personas Missing)', score: 4 }, { text: 'Needs/Pain Unqualified (Project / Personas Unknown)', score: 1 }, { text: 'No Project Identified Yet; Evaluating Technologies Only', score: -3 } ] },
|
| 232 |
+
{ section: 'CHAMPIONS', question: 'Are we engaged directly with the right personas or stakeholders?', answers: [ { text: 'Champions & Economic Buyer Are Fully Engaged', score: 9 }, { text: 'Champion Incentivised & Accessing Economic Buyer', score: 6 }, { text: 'Established Relationship With A Qualified Champion', score: 4 }, { text: 'Project-Level Contacts Only, Searching For Champions', score: 0 }, { text: 'No Champions / Key Stakeholders Identified Yet', score: -3 } ] },
|
| 233 |
+
{ section: 'GO LIVE PLAN', question: 'Has a Go Live Proposal been accepted by all key decision makers?', answers: [ { text: 'Key Stakeholders Agree; Awaiting Signature', score: 9 }, { text: 'Economic Buyer Agrees & Has Validated Plan', score: 8 }, { text: 'Champion/Partner Collaborating To Complete Plan', score: 4 }, { text: 'Discussing Project & Timescales; Plan Incomplete', score: 0 }, { text: 'Too Early For Go Live Proposal', score: -3 } ] },
|
| 234 |
+
{ section: 'METRICS & MOTIVES', question: 'Have METRICS or a QBC been agreed by the ECONOMIC BUYER?', answers: [ { text: 'All Key Stakeholders & Buyers Agree Metrics / QBC', score: 9 }, { text: 'Champion Says Economic Buyer Agrees Metrics / QBC', score: 7 }, { text: 'We/Our Partner & Champion All Agree Metrics / QBC', score: 4 }, { text: 'Only We/Our Partner Understand Metrics / QBC', score: 0 }, { text: 'Metrics / Motives Not Yet Identified', score: -3 } ] },
|
| 235 |
+
{ section: 'DECISION CRITERIA', question: 'Do we have clearly defined and agreed DECISION CRITERIA?', answers: [ { text: 'Our Decision Criteria Preferred By Economic Buyer', score: 9 }, { text: 'Economic Buyer Agrees We Meet Requirements', score: 8 }, { text: 'Criteria Co-Authored & Agreed with Champion', score: 6 }, { text: 'Customer Sharing Specific Criteria For Demo/POC', score: 4 }, { text: 'Customer Using Own Criteria; Unclear If We Meet It', score: 0 }, { text: 'Buying Criteria Unknown/Incomplete', score: -3 } ] },
|
| 236 |
+
{ section: 'DECISION PROCESS', question: 'Why now? What is the compelling event?', answers: [ { text: 'Critical reason for this month or specific date', score: 9 }, { text: 'Financial or Strategic Impact to Champion / Business if delayed', score: 7 }, { text: 'No Compelling Reason, But Timeline Agreed', score: 4 }, { text: 'Engaged But No Compelling Reason Provided', score: 2 }, { text: 'Salesperson\'s timeline', score: -3 } ] },
|
| 237 |
+
{ section: 'COMPETITION', question: 'Does the customer prefer us to the COMPETITION?', answers: [ { text: 'Economic Buyer / Partner Agrees We Are Preferred Supplier', score: 9 }, { text: 'Economic Buyer Agrees Our Differentiators Address Pain', score: 7 }, { text: 'Champion/Partner Prefers Our Differentiators; Traps Set', score: 5 }, { text: 'Competition Identified, Differentiation Agreed As Of Interest', score: 3 }, { text: 'Competition Identified, But Not Confirmed As Preferred', score: 0 }, { text: 'Not Asked About Competition Yet', score: -3 } ] },
|
| 238 |
+
{ section: 'BLOCKERS?', question: 'Have we identified ALL potential blockers?', answers: [ { text: 'All stakeholders agree on plan to address all blockers', score: 9 }, { text: 'Economic Buyer agrees to help address identified blockers', score: 7 }, { text: 'Blockers Identified & Discussing With Champion / Partner', score: 4 }, { text: 'We suspect blockers; haven\'t asked customer directly', score: 0 }, { text: 'No blockers identified yet', score: -3 } ] },
|
| 239 |
+
{ section: 'ECONOMIC BUYER', question: 'Has budget availability been confirmed?', answers: [ { text: 'Economic Buyer Says Budget Signed Off & Secured', score: 9 }, { text: 'Economic Buyer Says Significant Budget assigned', score: 7 }, { text: 'Champion/Partner Says Budget Exists; Amount Unknown', score: 4 }, { text: 'Champion/Partner Confirms Budget Assigned Soon', score: 2 }, { text: 'Champion/Partner Still Trying To Secure Budget', score: 0 }, { text: 'Budget Source Not Yet Known', score: -3 } ] },
|
| 240 |
+
{ section: 'PAPER PROCESS', question: 'Where are we with pricing & contractual terms?', answers: [ { text: 'Pricing/Contract & Terms Agreed and Approved', score: 9 }, { text: 'Contract/Terms Agreed; Legal Departments Engaged', score: 7 }, { text: 'Quantified Business Case Agreed, Security/Privacy Teams Engaged', score: 5 }, { text: 'Negotiating; Building Business Case But Gaps Remain', score: 4 }, { text: 'Customer/Partner has requested proposal', score: 2 }, { text: 'Pricing / contract not discussed yet', score: -5 } ] }
|
| 241 |
+
];
|
| 242 |
|
| 243 |
+
const industryInsights = {
|
| 244 |
+
'FSI': 'Financial Services buyers prioritize regulatory compliance, data security, and ultra-low latency for real-time transactions and fraud detection.',
|
| 245 |
+
'Healthcare': 'Healthcare organizations focus on HIPAA/GDPR compliance, interoperability with EHR/EMR systems, and AI-driven patient data privacy.',
|
| 246 |
+
'Public Sector & Education': 'Public Sector & Education buyers value cost efficiency, scalability for public demand, and strict adherence to government/educational data policies.',
|
| 247 |
+
'Retail and Ecommerce': 'Retail and Ecommerce companies need seamless omnichannel integration, AI-powered personalization, and real-time inventory/analytics.',
|
| 248 |
+
'Tech (SaaS)': 'Tech (SaaS) companies look for developer-friendly APIs, scalability for user growth, and AI/ML tools for product innovation.',
|
| 249 |
+
'Cyber': 'Cyber security teams require advanced threat detection, zero-trust architecture, and AI-driven automation for rapid incident response.',
|
| 250 |
+
'Media and Entertainment': 'Media and Entertainment firms need high-performance content delivery, AI for recommendation engines, and scalable storage for large media files.',
|
| 251 |
+
'Manufacturing': 'Manufacturing companies value predictive maintenance, IoT integration, and AI for supply chain optimization and defect detection.',
|
| 252 |
+
'Energy': 'Energy sector focuses on AI for predictive analytics in asset management, compliance with energy regulations, and operational resilience.',
|
| 253 |
+
'Logistics': 'Logistics companies prioritize real-time tracking, AI for route optimization, and integration with global supply chain platforms.',
|
| 254 |
+
'Transport': 'Transportation firms need AI for fleet management, real-time analytics for safety/compliance, and scalable IoT integration.',
|
| 255 |
+
'Startups': 'Startups typically look for pay-as-you-go pricing, rapid deployment, and AI tools that accelerate MVP development and scaling.'
|
| 256 |
+
};
|
| 257 |
+
|
| 258 |
+
// NEW: Industry-specific advice object
|
| 259 |
+
const industrySpecificAdvice = {
|
| 260 |
+
'FSI': {
|
| 261 |
+
'IDENTIFIED PAIN': 'Frame the pain in terms of regulatory compliance, risk mitigation, or fraud detection. FSI buyers are heavily motivated by these pressures.',
|
| 262 |
+
'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.',
|
| 263 |
+
'PAPER PROCESS': 'The legal and compliance review in FSI is rigorous. Proactively provide security documentation and compliance certificates to accelerate this stage.'
|
| 264 |
+
},
|
| 265 |
+
'Healthcare': {
|
| 266 |
+
'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.',
|
| 267 |
+
'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.',
|
| 268 |
+
'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.'
|
| 269 |
+
},
|
| 270 |
+
'Tech (SaaS)': {
|
| 271 |
+
'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.',
|
| 272 |
+
'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.',
|
| 273 |
+
'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.'
|
| 274 |
+
}
|
| 275 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 276 |
|
| 277 |
+
// DOM elements
|
| 278 |
+
const industryScreen = document.getElementById('industry-screen');
|
| 279 |
+
const industrySelect = document.getElementById('industry');
|
| 280 |
+
const industryDescription = document.getElementById('industry-description');
|
| 281 |
+
const startBtn = document.getElementById('start-btn');
|
| 282 |
+
const questionScreens = document.getElementById('question-screens');
|
| 283 |
+
const progressBar = document.getElementById('progress-bar');
|
| 284 |
+
const resultsScreen = document.getElementById('results-screen');
|
| 285 |
+
const scorePercentage = document.getElementById('score-percentage');
|
| 286 |
+
const scoreMessage = document.getElementById('score-message');
|
| 287 |
+
const industryInsightsDiv = document.getElementById('industry-insights');
|
| 288 |
+
const scoreBreakdown = document.getElementById('score-breakdown');
|
| 289 |
+
const warningsDiv = document.getElementById('warnings');
|
| 290 |
+
const restartQuizBtn = document.getElementById('restart-quiz');
|
|
|
|
| 291 |
|
| 292 |
+
// App state
|
| 293 |
+
let currentQuestion = 0;
|
| 294 |
+
let selectedIndustry = '';
|
| 295 |
+
let userAnswers = [];
|
| 296 |
+
const maxPossibleScore = questions.length * 9;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 297 |
|
| 298 |
+
// --- EVENT LISTENERS ---
|
| 299 |
+
industrySelect.addEventListener('change', function() {
|
| 300 |
+
selectedIndustry = this.value;
|
| 301 |
+
const description = industryInsights[selectedIndustry];
|
| 302 |
+
if (description) {
|
| 303 |
+
industryDescription.querySelector('p').textContent = description;
|
| 304 |
+
industryDescription.classList.remove('hidden');
|
| 305 |
+
startBtn.disabled = false;
|
| 306 |
+
} else {
|
| 307 |
+
industryDescription.classList.add('hidden');
|
| 308 |
+
startBtn.disabled = true;
|
| 309 |
+
}
|
| 310 |
+
});
|
| 311 |
|
| 312 |
+
startBtn.addEventListener('click', function() {
|
| 313 |
+
industryScreen.classList.add('hidden');
|
| 314 |
+
questionScreens.classList.remove('hidden');
|
| 315 |
+
renderQuestion(currentQuestion);
|
| 316 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 317 |
|
| 318 |
+
restartQuizBtn.addEventListener('click', resetQuiz);
|
|
|
|
|
|
|
|
|
|
|
|
|
| 319 |
|
| 320 |
+
// --- CORE FUNCTIONS ---
|
| 321 |
+
function resetQuiz() {
|
| 322 |
+
currentQuestion = 0;
|
| 323 |
+
selectedIndustry = '';
|
| 324 |
+
userAnswers = [];
|
| 325 |
+
industrySelect.value = "";
|
| 326 |
+
industryDescription.classList.add('hidden');
|
| 327 |
+
startBtn.disabled = true;
|
| 328 |
+
resultsScreen.classList.add('hidden');
|
| 329 |
+
industryScreen.classList.remove('hidden');
|
| 330 |
+
AOS.refresh();
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
function renderQuestion(index) {
|
| 334 |
+
if (index >= questions.length) {
|
| 335 |
+
showResults();
|
| 336 |
+
return;
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
const question = questions[index];
|
| 340 |
+
const progress = ((index) / questions.length) * 100;
|
| 341 |
+
progressBar.style.width = `${progress}%`;
|
| 342 |
+
|
| 343 |
+
const questionScreen = document.createElement('div');
|
| 344 |
+
questionScreen.className = `question-screen flex flex-col justify-center p-6 bg-gray-100 dark:bg-gray-900 fade-in`;
|
| 345 |
+
questionScreen.id = `question-${index}`;
|
| 346 |
+
|
| 347 |
+
questionScreen.innerHTML = `
|
| 348 |
+
<div class="max-w-2xl mx-auto w-full">
|
| 349 |
+
<div class="mb-4 text-center">
|
| 350 |
+
<span class="text-sm font-medium text-purple-600 dark:text-purple-400">${question.section}</span>
|
| 351 |
+
<h2 class="text-2xl font-bold mt-1 mb-2">${question.question}</h2>
|
| 352 |
+
</div>
|
| 353 |
+
<div class="mb-6">
|
| 354 |
+
<div class="relative">
|
| 355 |
+
<select id="answer-${index}" class="w-full p-3 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-purple-500 focus:outline-none">
|
| 356 |
+
<option value="" disabled selected>Select an answer</option>
|
| 357 |
+
${question.answers.map(a => `<option value="${a.score}">${a.text}</option>`).join('')}
|
| 358 |
+
</select>
|
| 359 |
+
</div>
|
| 360 |
+
</div>
|
| 361 |
+
<button id="next-btn-${index}" disabled class="w-full py-3 bg-purple-600 text-white font-semibold rounded-lg shadow-md hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed">
|
| 362 |
+
${index === questions.length - 1 ? 'Finish Qualification' : 'Next Question'}
|
| 363 |
+
</button>
|
| 364 |
+
</div>
|
| 365 |
+
`;
|
| 366 |
+
|
| 367 |
+
questionScreens.innerHTML = '';
|
| 368 |
+
questionScreens.appendChild(questionScreen);
|
| 369 |
+
feather.replace();
|
| 370 |
+
|
| 371 |
+
const answerSelect = document.getElementById(`answer-${index}`);
|
| 372 |
+
const nextBtn = document.getElementById(`next-btn-${index}`);
|
| 373 |
+
|
| 374 |
+
answerSelect.addEventListener('change', () => { nextBtn.disabled = !answerSelect.value; });
|
| 375 |
+
|
| 376 |
+
nextBtn.addEventListener('click', () => {
|
| 377 |
+
userAnswers.push({
|
| 378 |
+
question: question.question,
|
| 379 |
+
answer: answerSelect.options[answerSelect.selectedIndex].text,
|
| 380 |
+
score: parseInt(answerSelect.value),
|
| 381 |
+
section: question.section
|
| 382 |
});
|
| 383 |
+
currentQuestion++;
|
| 384 |
+
renderQuestion(currentQuestion);
|
| 385 |
+
});
|
| 386 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 387 |
|
| 388 |
+
function showResults() {
|
| 389 |
+
questionScreens.classList.add('hidden');
|
| 390 |
+
resultsScreen.classList.remove('hidden');
|
| 391 |
+
AOS.refresh();
|
| 392 |
+
|
| 393 |
+
const totalScore = userAnswers.reduce((sum, ans) => sum + ans.score, 0);
|
| 394 |
+
const normalizedScore = Math.max(0, totalScore + (questions.length * 5)); // Adjust for negative scores. 5 is max negative.
|
| 395 |
+
const maxNormalizedScore = maxPossibleScore + (questions.length * 5);
|
| 396 |
+
const percentage = Math.round((normalizedScore / maxNormalizedScore) * 100);
|
| 397 |
+
|
| 398 |
+
scorePercentage.textContent = `${percentage}%`;
|
| 399 |
+
|
| 400 |
+
if (percentage >= 80) scoreMessage.textContent = 'High probability of winning! This opportunity is well-qualified.';
|
| 401 |
+
else if (percentage >= 60) scoreMessage.textContent = 'Good chance of winning. Focus on improving weaker areas.';
|
| 402 |
+
else if (percentage >= 40) scoreMessage.textContent = 'Moderate chance. Significant improvements needed in several areas.';
|
| 403 |
+
else scoreMessage.textContent = 'Low probability. Re-evaluate if this opportunity is worth pursuing.';
|
| 404 |
+
|
| 405 |
+
industryInsightsDiv.innerHTML = `<p>${industryInsights[selectedIndustry]}</p>`;
|
| 406 |
+
|
| 407 |
+
scoreBreakdown.innerHTML = '';
|
| 408 |
+
userAnswers.forEach(answer => {
|
| 409 |
+
const scoreRatio = (answer.score + 5) / 14; // Normalize score from -5-9 to 0-1 range
|
| 410 |
+
let scoreColor = 'text-red-600 dark:text-red-400';
|
| 411 |
+
if (scoreRatio >= 0.7) scoreColor = 'text-green-600 dark:text-green-400';
|
| 412 |
+
else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-600 dark:text-yellow-400';
|
| 413 |
+
|
| 414 |
+
const sectionScore = `
|
| 415 |
+
<div class="bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm">
|
| 416 |
+
<div class="flex justify-between items-start mb-2">
|
| 417 |
+
<h4 class="font-medium">${answer.section}</h4>
|
| 418 |
+
<span class="font-bold ${scoreColor}">${answer.score}/9</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 419 |
</div>
|
| 420 |
+
<p class="text-sm text-gray-600 dark:text-gray-400">${answer.answer}</p>
|
| 421 |
+
</div>`;
|
| 422 |
+
scoreBreakdown.insertAdjacentHTML('beforeend', sectionScore);
|
| 423 |
+
});
|
| 424 |
+
|
| 425 |
+
warningsDiv.innerHTML = '';
|
| 426 |
+
const lowScores = userAnswers.filter(a => a.score < 5);
|
| 427 |
+
|
| 428 |
+
if (lowScores.length === 0) {
|
| 429 |
+
warningsDiv.innerHTML = `<div class="bg-green-100 dark:bg-green-900 p-4 rounded-lg text-green-800 dark:text-green-200"><p>No critical weaknesses identified. Great work!</p></div>`;
|
| 430 |
+
} else {
|
| 431 |
+
lowScores.forEach(score => {
|
| 432 |
+
let advice = 'No specific recommendation available. Focus on improving this area.';
|
| 433 |
+
const genericAdvice = {
|
| 434 |
+
'IDENTIFIED PAIN': 'Work with the customer to better define their business pain and how your solution addresses it.',
|
| 435 |
+
'CHAMPIONS': 'Identify and engage with champions who can influence the economic buyer.',
|
| 436 |
+
'GO LIVE PLAN': 'Develop a clear implementation plan with agreed timelines and milestones.',
|
| 437 |
+
'METRICS & MOTIVES': 'Establish clear metrics for success that are agreed by all stakeholders.',
|
| 438 |
+
'DECISION CRITERIA': 'Ensure your solution meets the customer\'s decision criteria or work to influence those criteria.',
|
| 439 |
+
'DECISION PROCESS': 'Identify and document the compelling reason for the customer to act now.',
|
| 440 |
+
'COMPETITION': 'Differentiate your solution and establish why you\'re the preferred choice.',
|
| 441 |
+
'BLOCKERS?': 'Proactively identify and address any potential blockers to the deal progressing.',
|
| 442 |
+
'ECONOMIC BUYER': 'Confirm budget availability and secure commitment from the economic buyer.',
|
| 443 |
+
'PAPER PROCESS': 'Advance discussions on pricing and contractual terms to avoid last-minute hurdles.'
|
| 444 |
+
};
|
|
|
|
|
|
|
|
|
|
| 445 |
|
| 446 |
+
if (industrySpecificAdvice[selectedIndustry] && industrySpecificAdvice[selectedIndustry][score.section]) {
|
| 447 |
+
advice = industrySpecificAdvice[selectedIndustry][score.section];
|
| 448 |
+
} else if (genericAdvice[score.section]) {
|
| 449 |
+
advice = genericAdvice[score.section];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 450 |
}
|
| 451 |
+
|
| 452 |
+
const warning = `
|
| 453 |
+
<div class="bg-red-100 dark:bg-red-900/50 p-4 rounded-lg text-red-800 dark:text-red-200">
|
| 454 |
+
<h4 class="font-semibold mb-1">${score.section}</h4>
|
| 455 |
+
<p class="text-sm mb-2 opacity-80">Your current selection: "${score.answer}"</p>
|
| 456 |
+
<p class="text-sm font-medium"><strong>Recommendation:</strong> ${advice}</p>
|
| 457 |
+
</div>`;
|
| 458 |
+
warningsDiv.insertAdjacentHTML('beforeend', warning);
|
| 459 |
+
});
|
| 460 |
+
}
|
| 461 |
+
}
|
| 462 |
+
});
|
| 463 |
+
</script>
|
| 464 |
+
|
| 465 |
</body>
|
| 466 |
+
</html>
|