Spaces:
Running
Running

Create a comprehensive personal and business Brand ROI calculator that should be fun to play with, gamified and UI uses color codes of #ff330c, #f2f2f2, #e4e4e4, #fdfdfd, #1d1d1d - Initial Deployment
4ff1670
verified
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Brand ROI Calculator | Measure Your Brand Impact</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<script> | |
tailwind.config = { | |
theme: { | |
extend: { | |
colors: { | |
primary: '#ff330c', | |
light: '#f2f2f2', | |
lighter: '#e4e4e4', | |
lightest: '#fdfdfd', | |
dark: '#1d1d1d', | |
} | |
} | |
} | |
} | |
</script> | |
<style> | |
@keyframes pulse { | |
0%, 100% { transform: scale(1); } | |
50% { transform: scale(1.05); } | |
} | |
.pulse-animation { | |
animation: pulse 2s infinite; | |
} | |
.progress-ring__circle { | |
transition: stroke-dashoffset 0.5s; | |
transform: rotate(-90deg); | |
transform-origin: 50% 50%; | |
} | |
.tooltip { | |
position: relative; | |
display: inline-block; | |
} | |
.tooltip .tooltiptext { | |
visibility: hidden; | |
width: 200px; | |
background-color: #1d1d1d; | |
color: #f2f2f2; | |
text-align: center; | |
border-radius: 6px; | |
padding: 8px; | |
position: absolute; | |
z-index: 1; | |
bottom: 125%; | |
left: 50%; | |
margin-left: -100px; | |
opacity: 0; | |
transition: opacity 0.3s; | |
} | |
.tooltip:hover .tooltiptext { | |
visibility: visible; | |
opacity: 1; | |
} | |
input[type="range"] { | |
-webkit-appearance: none; | |
height: 8px; | |
border-radius: 4px; | |
background: #e4e4e4; | |
} | |
input[type="range"]::-webkit-slider-thumb { | |
-webkit-appearance: none; | |
appearance: none; | |
width: 20px; | |
height: 20px; | |
border-radius: 50%; | |
background: #ff330c; | |
cursor: pointer; | |
} | |
</style> | |
</head> | |
<body class="bg-lightest font-sans text-dark"> | |
<div class="container mx-auto px-4 py-8 max-w-6xl"> | |
<!-- Header --> | |
<header class="text-center mb-12"> | |
<h1 class="text-4xl md:text-5xl font-bold mb-4 text-primary">Brand ROI Calculator</h1> | |
<p class="text-lg md:text-xl text-gray-600 max-w-3xl mx-auto"> | |
Measure the impact of your personal or business brand with our gamified calculator. | |
Discover your brand's true value and potential! | |
</p> | |
</header> | |
<!-- Toggle Switch --> | |
<div class="flex justify-center mb-10"> | |
<div class="inline-flex items-center bg-lighter rounded-full p-1"> | |
<button id="personalBtn" class="px-6 py-2 rounded-full font-medium text-white bg-primary focus:outline-none transition"> | |
Personal Brand | |
</button> | |
<button id="businessBtn" class="px-6 py-2 rounded-full font-medium text-dark bg-transparent focus:outline-none transition"> | |
Business Brand | |
</button> | |
</div> | |
</div> | |
<!-- Calculator Sections --> | |
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8"> | |
<!-- Input Section --> | |
<div class="bg-white p-6 rounded-xl shadow-lg lg:col-span-2"> | |
<h2 class="text-2xl font-bold mb-6 text-primary">Brand Metrics</h2> | |
<!-- Personal Brand Metrics (Visible by default) --> | |
<div id="personalMetrics"> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Social Media Following</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="socialFollowing" min="0" max="1000000" step="1000" value="50000" class="w-full mr-4"> | |
<span id="socialFollowingValue" class="font-bold">50,000</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>0</span> | |
<span>1M+</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Engagement Rate (%)</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="engagementRate" min="0" max="20" step="0.5" value="3" class="w-full mr-4"> | |
<span id="engagementRateValue" class="font-bold">3%</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>0%</span> | |
<span>20%</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Content Quality Score</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="contentQuality" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="contentQualityValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Basic</span> | |
<span>Exceptional</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Networking Score</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="networkingScore" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="networkingScoreValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Limited</span> | |
<span>Extensive</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Industry Authority</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="industryAuthority" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="industryAuthorityValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Newcomer</span> | |
<span>Thought Leader</span> | |
</div> | |
</div> | |
</div> | |
<!-- Business Brand Metrics (Hidden by default) --> | |
<div id="businessMetrics" class="hidden"> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Brand Awareness (%)</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="brandAwareness" min="0" max="100" step="1" value="30" class="w-full mr-4"> | |
<span id="brandAwarenessValue" class="font-bold">30%</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>0%</span> | |
<span>100%</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Customer Loyalty Score</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="customerLoyalty" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="customerLoyaltyValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Low</span> | |
<span>High</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Marketing Spend ($)</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="marketingSpend" min="0" max="100000" step="1000" value="10000" class="w-full mr-4"> | |
<span id="marketingSpendValue" class="font-bold">$10,000</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>$0</span> | |
<span>$100K</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Brand Differentiation</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="brandDifferentiation" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="brandDifferentiationValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Generic</span> | |
<span>Unique</span> | |
</div> | |
</div> | |
<div class="mb-6"> | |
<label class="block text-lg font-medium mb-2">Market Position</label> | |
<div class="flex items-center mb-2"> | |
<input type="range" id="marketPosition" min="1" max="10" step="1" value="5" class="w-full mr-4"> | |
<span id="marketPositionValue" class="font-bold">5/10</span> | |
</div> | |
<div class="flex justify-between text-sm text-gray-500"> | |
<span>Challenger</span> | |
<span>Leader</span> | |
</div> | |
</div> | |
</div> | |
<button id="calculateBtn" class="w-full bg-primary hover:bg-opacity-90 text-white font-bold py-3 px-4 rounded-lg transition duration-300 transform hover:scale-105 mt-6"> | |
Calculate My Brand ROI | |
</button> | |
</div> | |
<!-- Results Section --> | |
<div class="bg-white p-6 rounded-xl shadow-lg"> | |
<h2 class="text-2xl font-bold mb-6 text-primary">Your Brand ROI</h2> | |
<div class="text-center mb-8"> | |
<div class="relative inline-block"> | |
<svg class="w-40 h-40"> | |
<circle class="text-lighter" stroke-width="10" stroke="currentColor" fill="transparent" r="70" cx="80" cy="80" /> | |
<circle class="text-primary progress-ring__circle" stroke-width="10" stroke-linecap="round" stroke="currentColor" fill="transparent" r="70" cx="80" cy="80" /> | |
</svg> | |
<div class="absolute inset-0 flex items-center justify-center flex-col" style="top: 80px; left: 80px; transform: translate(-50%, -50%);"> | |
<span id="roiScore" class="text-4xl font-bold">0</span> | |
<span class="text-sm text-gray-500">ROI Score</span> | |
</div> | |
</div> | |
</div> | |
<div class="space-y-4 mb-6"> | |
<div class="flex items-center"> | |
<div class="w-8 h-8 rounded-full bg-primary bg-opacity-20 flex items-center justify-center mr-3"> | |
<i class="fas fa-chart-line text-primary"></i> | |
</div> | |
<div> | |
<p class="font-medium">Brand Strength</p> | |
<div class="w-full bg-lighter rounded-full h-2.5"> | |
<div id="brandStrengthBar" class="bg-primary h-2.5 rounded-full" style="width: 0%"></div> | |
</div> | |
</div> | |
</div> | |
<div class="flex items-center"> | |
<div class="w-8 h-8 rounded-full bg-primary bg-opacity-20 flex items-center justify-center mr-3"> | |
<i class="fas fa-dollar-sign text-primary"></i> | |
</div> | |
<div> | |
<p class="font-medium">Monetization Potential</p> | |
<div class="w-full bg-lighter rounded-full h-2.5"> | |
<div id="monetizationBar" class="bg-primary h-2.5 rounded-full" style="width: 0%"></div> | |
</div> | |
</div> | |
</div> | |
<div class="flex items-center"> | |
<div class="w-8 h-8 rounded-full bg-primary bg-opacity-20 flex items-center justify-center mr-3"> | |
<i class="fas fa-users text-primary"></i> | |
</div> | |
<div> | |
<p class="font-medium">Influence Level</p> | |
<div class="w-full bg-lighter rounded-full h-2.5"> | |
<div id="influenceBar" class="bg-primary h-2.5 rounded-full" style="width: 0%"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div id="personalInsights" class="bg-lighter p-4 rounded-lg"> | |
<h3 class="font-bold text-lg mb-2 text-primary">Personal Brand Insights</h3> | |
<p id="personalInsightText" class="text-sm">Calculate your metrics to get personalized insights about your personal brand's performance and potential.</p> | |
</div> | |
<div id="businessInsights" class="bg-lighter p-4 rounded-lg hidden"> | |
<h3 class="font-bold text-lg mb-2 text-primary">Business Brand Insights</h3> | |
<p id="businessInsightText" class="text-sm">Calculate your metrics to get personalized insights about your business brand's performance and potential.</p> | |
</div> | |
<div class="mt-6"> | |
<button id="shareBtn" class="w-full bg-dark hover:bg-opacity-90 text-white font-bold py-3 px-4 rounded-lg transition duration-300 flex items-center justify-center space-x-2"> | |
<i class="fas fa-share-alt"></i> | |
<span>Share Your Results</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Badges Section --> | |
<div class="mt-12 text-center"> | |
<h2 class="text-2xl font-bold mb-6 text-primary">Earn Brand Badges</h2> | |
<div class="grid grid-cols-2 md:grid-cols-4 gap-4"> | |
<div id="influencerBadge" class="bg-white p-4 rounded-lg shadow-md border-2 border-lighter opacity-50"> | |
<div class="w-16 h-16 mx-auto mb-2 bg-lighter rounded-full flex items-center justify-center"> | |
<i class="fas fa-bullhorn text-gray-400 text-2xl"></i> | |
</div> | |
<p class="font-medium">Influencer</p> | |
<p class="text-xs text-gray-500">10K+ followers</p> | |
</div> | |
<div id="thoughtLeaderBadge" class="bg-white p-4 rounded-lg shadow-md border-2 border-lighter opacity-50"> | |
<div class="w-16 h-16 mx-auto mb-2 bg-lighter rounded-full flex items-center justify-center"> | |
<i class="fas fa-lightbulb text-gray-400 text-2xl"></i> | |
</div> | |
<p class="font-medium">Thought Leader</p> | |
<p class="text-xs text-gray-500">High authority</p> | |
</div> | |
<div id="monetizerBadge" class="bg-white p-4 rounded-lg shadow-md border-2 border-lighter opacity-50"> | |
<div class="w-16 h-16 mx-auto mb-2 bg-lighter rounded-full flex items-center justify-center"> | |
<i class="fas fa-money-bill-wave text-gray-400 text-2xl"></i> | |
</div> | |
<p class="font-medium">Monetizer</p> | |
<p class="text-xs text-gray-500">Strong ROI</p> | |
</div> | |
<div id="connectorBadge" class="bg-white p-4 rounded-lg shadow-md border-2 border-lighter opacity-50"> | |
<div class="w-16 h-16 mx-auto mb-2 bg-lighter rounded-full flex items-center justify-center"> | |
<i class="fas fa-handshake text-gray-400 text-2xl"></i> | |
</div> | |
<p class="font-medium">Connector</p> | |
<p class="text-xs text-gray-500">Strong network</p> | |
</div> | |
</div> | |
</div> | |
<!-- Tips Section --> | |
<div class="mt-12 bg-primary bg-opacity-10 p-6 rounded-xl"> | |
<h2 class="text-2xl font-bold mb-4 text-primary">Brand Growth Tips</h2> | |
<div class="grid grid-cols-1 md:grid-cols-3 gap-4"> | |
<div class="bg-white p-4 rounded-lg"> | |
<div class="flex items-center mb-2"> | |
<div class="w-10 h-10 rounded-full bg-primary text-white flex items-center justify-center mr-3"> | |
<i class="fas fa-pen-fancy"></i> | |
</div> | |
<h3 class="font-bold">Content Strategy</h3> | |
</div> | |
<p class="text-sm">Focus on creating high-quality, valuable content that resonates with your target audience. Consistency is key to building brand recognition.</p> | |
</div> | |
<div class="bg-white p-4 rounded-lg"> | |
<div class="flex items-center mb-2"> | |
<div class="w-10 h-10 rounded-full bg-primary text-white flex items-center justify-center mr-3"> | |
<i class="fas fa-network-wired"></i> | |
</div> | |
<h3 class="font-bold">Networking</h3> | |
</div> | |
<p class="text-sm">Build authentic relationships with peers, mentors, and potential collaborators. Strategic partnerships can amplify your brand reach.</p> | |
</div> | |
<div class="bg-white p-4 rounded-lg"> | |
<div class="flex items-center mb-2"> | |
<div class="w-10 h-10 rounded-full bg-primary text-white flex items-center justify-center mr-3"> | |
<i class="fas fa-analytics"></i> | |
</div> | |
<h3 class="font-bold">Metrics Tracking</h3> | |
</div> | |
<p class="text-sm">Regularly measure your brand performance metrics to identify what's working and where you can improve. Data-driven decisions lead to better ROI.</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script> | |
// DOM Elements | |
const personalBtn = document.getElementById('personalBtn'); | |
const businessBtn = document.getElementById('businessBtn'); | |
const personalMetrics = document.getElementById('personalMetrics'); | |
const businessMetrics = document.getElementById('businessMetrics'); | |
const personalInsights = document.getElementById('personalInsights'); | |
const businessInsights = document.getElementById('businessInsights'); | |
const calculateBtn = document.getElementById('calculateBtn'); | |
const shareBtn = document.getElementById('shareBtn'); | |
const roiScore = document.getElementById('roiScore'); | |
// Slider elements for personal brand | |
const socialFollowing = document.getElementById('socialFollowing'); | |
const socialFollowingValue = document.getElementById('socialFollowingValue'); | |
const engagementRate = document.getElementById('engagementRate'); | |
const engagementRateValue = document.getElementById('engagementRateValue'); | |
const contentQuality = document.getElementById('contentQuality'); | |
const contentQualityValue = document.getElementById('contentQualityValue'); | |
const networkingScore = document.getElementById('networkingScore'); | |
const networkingScoreValue = document.getElementById('networkingScoreValue'); | |
const industryAuthority = document.getElementById('industryAuthority'); | |
const industryAuthorityValue = document.getElementById('industryAuthorityValue'); | |
// Slider elements for business brand | |
const brandAwareness = document.getElementById('brandAwareness'); | |
const brandAwarenessValue = document.getElementById('brandAwarenessValue'); | |
const customerLoyalty = document.getElementById('customerLoyalty'); | |
const customerLoyaltyValue = document.getElementById('customerLoyaltyValue'); | |
const marketingSpend = document.getElementById('marketingSpend'); | |
const marketingSpendValue = document.getElementById('marketingSpendValue'); | |
const brandDifferentiation = document.getElementById('brandDifferentiation'); | |
const brandDifferentiationValue = document.getElementById('brandDifferentiationValue'); | |
const marketPosition = document.getElementById('marketPosition'); | |
const marketPositionValue = document.getElementById('marketPositionValue'); | |
// Progress bars | |
const brandStrengthBar = document.getElementById('brandStrengthBar'); | |
const monetizationBar = document.getElementById('monetizationBar'); | |
const influenceBar = document.getElementById('influenceBar'); | |
// Badges | |
const influencerBadge = document.getElementById('influencerBadge'); | |
const thoughtLeaderBadge = document.getElementById('thoughtLeaderBadge'); | |
const monetizerBadge = document.getElementById('monetizerBadge'); | |
const connectorBadge = document.getElementById('connectorBadge'); | |
// Insight texts | |
const personalInsightText = document.getElementById('personalInsightText'); | |
const businessInsightText = document.getElementById('businessInsightText'); | |
// Toggle between personal and business brand | |
personalBtn.addEventListener('click', () => { | |
personalBtn.classList.add('bg-primary', 'text-white'); | |
personalBtn.classList.remove('bg-transparent', 'text-dark'); | |
businessBtn.classList.remove('bg-primary', 'text-white'); | |
businessBtn.classList.add('bg-transparent', 'text-dark'); | |
personalMetrics.classList.remove('hidden'); | |
businessMetrics.classList.add('hidden'); | |
personalInsights.classList.remove('hidden'); | |
businessInsights.classList.add('hidden'); | |
}); | |
businessBtn.addEventListener('click', () => { | |
businessBtn.classList.add('bg-primary', 'text-white'); | |
businessBtn.classList.remove('bg-transparent', 'text-dark'); | |
personalBtn.classList.remove('bg-primary', 'text-white'); | |
personalBtn.classList.add('bg-transparent', 'text-dark'); | |
businessMetrics.classList.remove('hidden'); | |
personalMetrics.classList.add('hidden'); | |
businessInsights.classList.remove('hidden'); | |
personalInsights.classList.add('hidden'); | |
}); | |
// Update slider values in real-time | |
socialFollowing.addEventListener('input', () => { | |
socialFollowingValue.textContent = numberWithCommas(socialFollowing.value); | |
}); | |
engagementRate.addEventListener('input', () => { | |
engagementRateValue.textContent = engagementRate.value + '%'; | |
}); | |
contentQuality.addEventListener('input', () => { | |
contentQualityValue.textContent = contentQuality.value + '/10'; | |
}); | |
networkingScore.addEventListener('input', () => { | |
networkingScoreValue.textContent = networkingScore.value + '/10'; | |
}); | |
industryAuthority.addEventListener('input', () => { | |
industryAuthorityValue.textContent = industryAuthority.value + '/10'; | |
}); | |
brandAwareness.addEventListener('input', () => { | |
brandAwarenessValue.textContent = brandAwareness.value + '%'; | |
}); | |
customerLoyalty.addEventListener('input', () => { | |
customerLoyaltyValue.textContent = customerLoyalty.value + '/10'; | |
}); | |
marketingSpend.addEventListener('input', () => { | |
marketingSpendValue.textContent = '$' + numberWithCommas(marketingSpend.value); | |
}); | |
brandDifferentiation.addEventListener('input', () => { | |
brandDifferentiationValue.textContent = brandDifferentiation.value + '/10'; | |
}); | |
marketPosition.addEventListener('input', () => { | |
marketPositionValue.textContent = marketPosition.value + '/10'; | |
}); | |
// Calculate ROI | |
calculateBtn.addEventListener('click', () => { | |
// Show loading state | |
calculateBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Calculating...'; | |
// Simulate calculation delay | |
setTimeout(() => { | |
let score, brandStrength, monetization, influence; | |
if (!businessMetrics.classList.contains('hidden')) { | |
// Business brand calculation | |
score = calculateBusinessROI(); | |
updateBusinessInsights(score); | |
} else { | |
// Personal brand calculation | |
score = calculatePersonalROI(); | |
updatePersonalInsights(score); | |
} | |
// Update UI | |
updateROIDisplay(score); | |
updateBadges(score); | |
// Reset button | |
calculateBtn.innerHTML = 'Calculate My Brand ROI'; | |
// Scroll to results | |
document.querySelector('.bg-white.p-6.rounded-xl.shadow-lg').scrollIntoView({ behavior: 'smooth' }); | |
}, 1000); | |
}); | |
// Share results | |
shareBtn.addEventListener('click', () => { | |
alert('Share functionality would be implemented here! In a real app, this would share your Brand ROI score on social media.'); | |
}); | |
// Helper functions | |
function numberWithCommas(x) { | |
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); | |
} | |
function calculatePersonalROI() { | |
const followingScore = Math.min(100, parseInt(socialFollowing.value) / 10000); | |
const engagementScore = parseInt(engagementRate.value) * 5; | |
const contentScore = parseInt(contentQuality.value) * 10; | |
const networkScore = parseInt(networkingScore.value) * 10; | |
const authorityScore = parseInt(industryAuthority.value) * 10; | |
// Weighted average | |
const totalScore = (followingScore * 0.2) + (engagementScore * 0.25) + | |
(contentScore * 0.25) + (networkScore * 0.15) + | |
(authorityScore * 0.15); | |
// Cap at 100 | |
return Math.min(100, Math.round(totalScore)); | |
} | |
function calculateBusinessROI() { | |
const awarenessScore = parseInt(brandAwareness.value); | |
const loyaltyScore = parseInt(customerLoyalty.value) * 10; | |
const spendEfficiency = Math.min(100, 100 - (parseInt(marketingSpend.value) / 1000)); | |
const differentiationScore = parseInt(brandDifferentiation.value) * 10; | |
const positionScore = parseInt(marketPosition.value) * 10; | |
// Weighted average | |
const totalScore = (awarenessScore * 0.3) + (loyaltyScore * 0.25) + | |
(spendEfficiency * 0.15) + (differentiationScore * 0.15) + | |
(positionScore * 0.15); | |
// Cap at 100 | |
return Math.min(100, Math.round(totalScore)); | |
} | |
function updateROIDisplay(score) { | |
// Animate the score increase | |
let currentScore = 0; | |
const increment = score / 20; | |
const timer = setInterval(() => { | |
currentScore += increment; | |
if (currentScore >= score) { | |
currentScore = score; | |
clearInterval(timer); | |
} | |
roiScore.textContent = Math.round(currentScore); | |
// Update progress circle | |
const circle = document.querySelector('.progress-ring__circle'); | |
const radius = 70; | |
const circumference = radius * 2 * Math.PI; | |
const offset = circumference - (currentScore / 100) * circumference; | |
circle.style.strokeDasharray = `${circumference} ${circumference}`; | |
circle.style.strokeDashoffset = offset; | |
// Update progress bars | |
brandStrengthBar.style.width = `${Math.min(100, score + 10)}%`; | |
monetizationBar.style.width = `${Math.min(100, score - 5)}%`; | |
influenceBar.style.width = `${Math.min(100, score + 5)}%`; | |
}, 50); | |
} | |
function updatePersonalInsights(score) { | |
let insight = ''; | |
if (score < 30) { | |
insight = 'Your personal brand is in the early stages. Focus on building your online presence and creating valuable content to establish your authority.'; | |
} else if (score < 60) { | |
insight = 'Your personal brand is growing! Continue engaging with your audience and expanding your network to increase your influence.'; | |
} else if (score < 80) { | |
insight = 'Strong personal brand! You have good recognition in your industry. Consider monetizing your influence through partnerships or products.'; | |
} else { | |
insight = 'Exceptional personal brand! You are a recognized authority with significant influence. Leverage this to create new opportunities and scale your impact.'; | |
} | |
personalInsightText.textContent = insight; | |
} | |
function updateBusinessInsights(score) { | |
let insight = ''; | |
if (score < 30) { | |
insight = 'Your business brand needs more recognition. Invest in marketing and brand differentiation to stand out in your market.'; | |
} else if (score < 60) { | |
insight = 'Your business brand is gaining traction. Focus on customer loyalty and consistent messaging to strengthen your position.'; | |
} else if (score < 80) { | |
insight = 'Strong business brand! You have good market awareness. Optimize your marketing spend to improve ROI and consider expanding your offerings.'; | |
} else { | |
insight = 'Exceptional business brand! You are a market leader with strong customer loyalty. Explore new markets and innovative ways to leverage your brand equity.'; | |
} | |
businessInsightText.textContent = insight; | |
} | |
function updateBadges(score) { | |
// Reset all badges | |
[influencerBadge, thoughtLeaderBadge, monetizerBadge, connectorBadge].forEach(badge => { | |
badge.classList.add('opacity-50'); | |
badge.querySelector('i').classList.remove('text-primary'); | |
badge.querySelector('i').classList.add('text-gray-400'); | |
badge.classList.remove('border-primary', 'pulse-animation'); | |
}); | |
// Award badges based on score and metrics | |
if (score >= 40) { | |
if (!businessMetrics.classList.contains('hidden')) { | |
// Business brand badges | |
if (parseInt(brandAwareness.value) >= 50) { | |
influencerBadge.classList.remove('opacity-50'); | |
influencerBadge.querySelector('i').classList.remove('text-gray-400'); | |
influencerBadge.querySelector('i').classList.add('text-primary'); | |
influencerBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (parseInt(brandDifferentiation.value) >= 7) { | |
thoughtLeaderBadge.classList.remove('opacity-50'); | |
thoughtLeaderBadge.querySelector('i').classList.remove('text-gray-400'); | |
thoughtLeaderBadge.querySelector('i').classList.add('text-primary'); | |
thoughtLeaderBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (score >= 70) { | |
monetizerBadge.classList.remove('opacity-50'); | |
monetizerBadge.querySelector('i').classList.remove('text-gray-400'); | |
monetizerBadge.querySelector('i').classList.add('text-primary'); | |
monetizerBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (parseInt(customerLoyalty.value) >= 7) { | |
connectorBadge.classList.remove('opacity-50'); | |
connectorBadge.querySelector('i').classList.remove('text-gray-400'); | |
connectorBadge.querySelector('i').classList.add('text-primary'); | |
connectorBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
} else { | |
// Personal brand badges | |
if (parseInt(socialFollowing.value) >= 10000) { | |
influencerBadge.classList.remove('opacity-50'); | |
influencerBadge.querySelector('i').classList.remove('text-gray-400'); | |
influencerBadge.querySelector('i').classList.add('text-primary'); | |
influencerBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (parseInt(industryAuthority.value) >= 7) { | |
thoughtLeaderBadge.classList.remove('opacity-50'); | |
thoughtLeaderBadge.querySelector('i').classList.remove('text-gray-400'); | |
thoughtLeaderBadge.querySelector('i').classList.add('text-primary'); | |
thoughtLeaderBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (score >= 70) { | |
monetizerBadge.classList.remove('opacity-50'); | |
monetizerBadge.querySelector('i').classList.remove('text-gray-400'); | |
monetizerBadge.querySelector('i').classList.add('text-primary'); | |
monetizerBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
if (parseInt(networkingScore.value) >= 7) { | |
connectorBadge.classList.remove('opacity-50'); | |
connectorBadge.querySelector('i').classList.remove('text-gray-400'); | |
connectorBadge.querySelector('i').classList.add('text-primary'); | |
connectorBadge.classList.add('border-primary', 'pulse-animation'); | |
} | |
} | |
} | |
} | |
// Initialize progress circle | |
document.addEventListener('DOMContentLoaded', () => { | |
const circle = document.querySelector('.progress-ring__circle'); | |
const radius = 70; | |
const circumference = radius * 2 * Math.PI; | |
circle.style.strokeDasharray = `${circumference} ${circumference}`; | |
circle.style.strokeDashoffset = circumference; | |
}); | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=JayStormX8/brand-roi-calculator" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |