DjayChucko commited on
Commit
d9d8ccb
Β·
verified Β·
1 Parent(s): f3d4644

Manual changes saved

Browse files
Files changed (1) hide show
  1. scorecard.html +23 -14
scorecard.html CHANGED
@@ -130,9 +130,13 @@
130
  'COMPETITION & BLOCKERS': '#phase-3', 'PAPER PROCESS': '#phase-3', 'IMPLEMENTATION PLAN': '#phase-3'
131
  };
132
  const scoreMessages = { 'Closing': { 14: "Low Probability...", 39: "Medium Probability...", 60: "High Probability...", 101: "Commit. Be cautious..." }, 'Early Stage': { 14: "Low Potential...", 39: "Medium Potential...", 60: "High Potential...", 101: "Very High Potential..." }, 'Evaluation / PoC': { 14: "Low Confidence...", 39: "Medium Confidence...", 60: "High Confidence...", 101: "Very High Confidence..." } };
133
- const industryInsights = { 'FSI': 'FSI buyers prioritize compliance...', 'Healthcare': 'Healthcare focuses on HIPAA...', /* etc. */ };
134
- const summarySnippets = { 'PAIN & METRICS': 'Solidify the business case...', 'CHAMPION & EB': 'Test your Champion...', /* etc. */ };
135
- const industrySpecificAdvice = { 'FSI': { 'PAIN & METRICS': 'Frame pain around compliance...', 'PAPER PROCESS': 'The legal review is rigorous...' }, 'Healthcare': { 'PAIN & METRICS': 'Pain is tied to HIPAA...', 'DECISION PROCESS & CRITERIA': 'Criteria weighs heavily on security...' }, 'Tech (SaaS)': { 'COMPETITION & BLOCKERS': 'The SaaS market is crowded...', 'IMPLEMENTATION PLAN': 'Offer a "quick start" plan...' } };
 
 
 
 
136
 
137
  function checkSelections() { app.inputs.startBtn.disabled = !(app.state.industry && app.state.salesStage); }
138
  app.inputs.industry.addEventListener('change', (e) => { app.state.industry = e.target.value; checkSelections(); });
@@ -143,8 +147,7 @@
143
  function resetQuiz() {
144
  Object.assign(app.state, { currentQuestion: 0, industry: '', salesStage: '', answers: [] });
145
  app.inputs.industry.value = ""; app.inputs.salesStage.value = ""; app.inputs.startBtn.disabled = true;
146
- app.screens.results.classList.add('hidden');
147
- app.screens.industry.classList.remove('hidden'); AOS.refresh();
148
  }
149
 
150
  function renderQuestion(index) {
@@ -175,12 +178,18 @@
175
 
176
  app.state.answers.forEach(answer => {
177
  const scoreRatio = answer.score / 9;
178
- let scoreColor = 'text-red-500', recommendationHTML = '';
179
- if (scoreRatio >= 0.7) scoreColor = 'text-green-500'; else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-500';
 
180
  if (answer.score < 5) {
181
  let advice = industrySpecificAdvice[app.state.industry]?.[answer.section] || summarySnippets[answer.section] || 'Focus on improving this area.';
182
  const link = `academy.html${skillMapping[answer.section]}`;
183
- recommendationHTML = `<div class="mt-3 pt-3 border-t 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} <a href="${link}" target="_blank" class="font-bold underline hover:text-red-600">Learn More...</a></p></div>`;
 
 
 
 
 
184
  }
185
  app.ui.scoreBreakdown.insertAdjacentHTML('beforeend', `<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>`);
186
  });
@@ -192,17 +201,17 @@
192
  let weaknesses = [], summaryHTML = '<ul class="space-y-3 text-gray-700 dark:text-gray-300">';
193
  const metricsMotive = answers.find(a => a.section === 'PAIN & METRICS');
194
  const sorted = [...answers].sort((a, b) => a.score - b.score);
195
- if (metricsMotive && metricsMotive.score < 5) { weaknesses.push(metricsMotive); const next = sorted.find(a => a.section !== 'PAIN & METRICS'); if (next) weaknesses.push(next); } else { weaknesses = sorted.slice(0, 2); }
196
  const strength = sorted[sorted.length - 1];
197
  if (overallScore >= 60 && strength.score >= 7) { summaryHTML += `<li class="flex items-start"><span class="mr-2 text-green-500">βœ…</span><span><strong>Strength:</strong> The deal is well-positioned in <strong>${strength.section}</strong>. Continue to leverage this.</span></li>`; }
198
- weaknesses.forEach(weak => { const link = `academy.html${skillMapping[weak.section]}`; const snippet = summarySnippets[weak.section] || 'This area needs to be addressed.'; summaryHTML += `<li class="flex items-start"><span class="mr-2 text-red-500">πŸ”΄</span><span><strong>Urgent Focus: ${weak.section}</strong>. <a href="${link}" target="_blank" class="font-bold underline hover:text-purple-400">${snippet}</a></span></li>`; });
199
  summaryHTML += '</ul>';
200
  let strategicMessage = '';
201
  if (overallScore <= 19) strategicMessage = salesStage === 'Evaluation / PoC' ? "Dangerous if considering an Eval/PoC with this low score." : "Okay if early, but more qualification is required.";
202
- else if (overallScore <= 39) { if (salesStage === 'Early Stage') strategicMessage = "Good news for an early stage deal. Now attach the offer to a mutually agreed business outcome."; else if (salesStage === 'Evaluation / PoC') strategicMessage = "Be cautious. The business case for this PoC is not strong enough. Why now? Why us?"; else strategicMessage = "Be worried. A deal this weak should not be in the closing stage."; }
203
- else if (overallScore <= 59) { if (salesStage === 'Early Stage') strategicMessage = "Very good news for an early stage deal. A solid foundation to build upon."; else if (salesStage === 'Evaluation / PoC') strategicMessage = "This looks good. Now, what are the blockers? Confirm timeline and budget."; else strategicMessage = "Look for blockers. Can the champion access the Economic Buyer? Is this a champion or a coach?"; }
204
- else if (overallScore <= 79) { strategicMessage = salesStage === 'Evaluation / PoC' ? "Very strong for a PoC. Start preparing success metrics and crafting the proposal." : "Focus on differentiation and beware of the buyer ghosting as you move to close."; }
205
- else { strategicMessage = "The finish line is in sight, but it's not over until it's signed. Verbally discuss pricing/contracts with champions/buyers and expect negotiations."; }
206
  summaryHTML += `<div class="mt-4 pt-4 border-t dark:border-gray-700"><p class="text-base font-medium text-purple-700 dark:text-purple-400">${strategicMessage}</p></div>`;
207
  app.ui.executiveSummary.innerHTML = summaryHTML;
208
  }
 
130
  'COMPETITION & BLOCKERS': '#phase-3', 'PAPER PROCESS': '#phase-3', 'IMPLEMENTATION PLAN': '#phase-3'
131
  };
132
  const scoreMessages = { 'Closing': { 14: "Low Probability...", 39: "Medium Probability...", 60: "High Probability...", 101: "Commit. Be cautious..." }, 'Early Stage': { 14: "Low Potential...", 39: "Medium Potential...", 60: "High Potential...", 101: "Very High Potential..." }, 'Evaluation / PoC': { 14: "Low Confidence...", 39: "Medium Confidence...", 60: "High Confidence...", 101: "Very High Confidence..." } };
133
+ const industryInsights = { /* ... data ... */ }; // Truncated for brevity, full data below
134
+ const summarySnippets = { /* ... data ... */ };
135
+ const industrySpecificAdvice = { /* ... data ... */ };
136
+
137
+ Object.assign(industryInsights, { 'FSI': 'FSI buyers prioritize compliance...', 'Healthcare': 'Healthcare focuses on HIPAA...', 'Public Sector & Education': 'Public Sector buyers value cost efficiency...', 'Retail and Ecommerce': 'Retail needs omnichannel integration...', 'Tech (SaaS)': 'SaaS companies look for developer-friendly APIs...', 'Cyber': 'Cyber security teams require advanced threat detection...', 'Media and Entertainment': 'Media firms need high-performance content delivery...', 'Manufacturing': 'Manufacturing values predictive maintenance...', 'Energy': 'The Energy sector focuses on AI for predictive analytics...', 'Logistics': 'Logistics companies prioritize real-time tracking...', 'Transport': 'Transportation firms need AI for fleet management...', 'Startups': 'Startups look for pay-as-you-go pricing...' });
138
+ Object.assign(summarySnippets, { 'PAIN & METRICS': 'Solidify the business case by quantifying the pain with the Economic Buyer.', 'CHAMPION & EB': 'Test your Champion and leverage them for greater access to the Economic Buyer.', 'DECISION PROCESS & CRITERIA': 'Influence the decision criteria and get the formal process in writing.', 'COMPETITION & BLOCKERS': 'Set competitive traps and proactively identify all potential deal blockers.', 'PAPER PROCESS': 'De-risk the closing stage by confirming the budget source and procurement process early.', 'IMPLEMENTATION PLAN': 'Co-create a success plan with the customer to show value beyond the signature.' });
139
+ Object.assign(industrySpecificAdvice, { 'FSI': { 'PAIN & METRICS': 'Frame pain around compliance...', 'PAPER PROCESS': 'The legal review is rigorous...' }, 'Healthcare': { 'PAIN & METRICS': 'Pain is tied to HIPAA...', 'DECISION PROCESS & CRITERIA': 'Criteria weighs heavily on security...' }, 'Tech (SaaS)': { 'COMPETITION & BLOCKERS': 'The SaaS market is crowded...', 'IMPLEMENTATION PLAN': 'Offer a "quick start" plan...' } });
140
 
141
  function checkSelections() { app.inputs.startBtn.disabled = !(app.state.industry && app.state.salesStage); }
142
  app.inputs.industry.addEventListener('change', (e) => { app.state.industry = e.target.value; checkSelections(); });
 
147
  function resetQuiz() {
148
  Object.assign(app.state, { currentQuestion: 0, industry: '', salesStage: '', answers: [] });
149
  app.inputs.industry.value = ""; app.inputs.salesStage.value = ""; app.inputs.startBtn.disabled = true;
150
+ app.screens.results.classList.add('hidden'); app.screens.industry.classList.remove('hidden'); AOS.refresh();
 
151
  }
152
 
153
  function renderQuestion(index) {
 
178
 
179
  app.state.answers.forEach(answer => {
180
  const scoreRatio = answer.score / 9;
181
+ let scoreColor = 'text-red-500 dark:text-red-400', recommendationHTML = '';
182
+ if (scoreRatio >= 0.7) scoreColor = 'text-green-500 dark:text-green-400'; else if (scoreRatio >= 0.4) scoreColor = 'text-yellow-500 dark:text-yellow-400';
183
+
184
  if (answer.score < 5) {
185
  let advice = industrySpecificAdvice[app.state.industry]?.[answer.section] || summarySnippets[answer.section] || 'Focus on improving this area.';
186
  const link = `academy.html${skillMapping[answer.section]}`;
187
+ recommendationHTML = `<div class="mt-3 pt-3 border-t dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-3 rounded-b-lg -m-4 mt-4">
188
+ <p class="text-sm font-medium text-red-800 dark:text-red-200">
189
+ <strong>Recommendation:</strong> ${advice}
190
+ <a href="${link}" target="_blank" class="font-bold underline hover:text-red-600">learn more</a>
191
+ </p>
192
+ </div>`;
193
  }
194
  app.ui.scoreBreakdown.insertAdjacentHTML('beforeend', `<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>`);
195
  });
 
201
  let weaknesses = [], summaryHTML = '<ul class="space-y-3 text-gray-700 dark:text-gray-300">';
202
  const metricsMotive = answers.find(a => a.section === 'PAIN & METRICS');
203
  const sorted = [...answers].sort((a, b) => a.score - b.score);
204
+ if (metricsMotive && metricsMotive.score < 5) { weaknesses.push(metricsMotive); const next = sorted.find(a => a.section !== 'PAIN & METRICS'); if (next && weaknesses.length < 2) weaknesses.push(next); } else { weaknesses = sorted.slice(0, 2); }
205
  const strength = sorted[sorted.length - 1];
206
  if (overallScore >= 60 && strength.score >= 7) { summaryHTML += `<li class="flex items-start"><span class="mr-2 text-green-500">βœ…</span><span><strong>Strength:</strong> The deal is well-positioned in <strong>${strength.section}</strong>. Continue to leverage this.</span></li>`; }
207
+ weaknesses.forEach(weak => { const snippet = summarySnippets[weak.section] || 'This area needs to be addressed.'; summaryHTML += `<li class="flex items-start"><span class="mr-2 text-red-500">πŸ”΄</span><span><strong>Urgent Focus: ${weak.section}</strong>. ${snippet}</span></li>`; });
208
  summaryHTML += '</ul>';
209
  let strategicMessage = '';
210
  if (overallScore <= 19) strategicMessage = salesStage === 'Evaluation / PoC' ? "Dangerous if considering an Eval/PoC with this low score." : "Okay if early, but more qualification is required.";
211
+ else if (overallScore <= 39) { if (salesStage === 'Early Stage') strategicMessage = "Good news for an early stage deal..."; else if (salesStage === 'Evaluation / PoC') strategicMessage = "Be cautious. The business case for this PoC is not strong enough..."; else strategicMessage = "Be worried. A deal this weak should not be in the closing stage."; }
212
+ else if (overallScore <= 59) { if (salesStage === 'Early Stage') strategicMessage = "Very good news for an early stage deal..."; else if (salesStage === 'Evaluation / PoC') strategicMessage = "This looks good. Now, what are the blockers?..."; else strategicMessage = "Look for blockers. Can the champion access the Economic Buyer?..."; }
213
+ else if (overallScore <= 79) { strategicMessage = salesStage === 'Evaluation / PoC' ? "Very strong for a PoC..." : "Focus on differentiation and beware of the buyer ghosting..."; }
214
+ else { strategicMessage = "The finish line is in sight... expect negotiations."; }
215
  summaryHTML += `<div class="mt-4 pt-4 border-t dark:border-gray-700"><p class="text-base font-medium text-purple-700 dark:text-purple-400">${strategicMessage}</p></div>`;
216
  app.ui.executiveSummary.innerHTML = summaryHTML;
217
  }