auto-forecast-rev1 / index.html
jisaacso219's picture
Add 2 files
cc98ed6 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AutoParts Forecast Pro</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">
<style>
.gradient-bg {
background: linear-gradient(135deg, #1e3a8a 0%, #0ea5e9 100%);
}
.chart-container {
height: 400px;
position: relative;
}
.highlight-cell {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { background-color: rgba(239, 68, 68, 0.1); }
50% { background-color: rgba(239, 68, 68, 0.3); }
100% { background-color: rgba(239, 68, 68, 0.1); }
}
.file-upload {
border: 2px dashed #cbd5e0;
transition: all 0.3s ease;
}
.file-upload:hover {
border-color: #3b82f6;
background-color: #f8fafc;
}
.tag-input {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
padding: 0.5rem;
border: 1px solid #d1d5db;
border-radius: 0.375rem;
min-height: 2.5rem;
}
.tag {
background-color: #e0e7ff;
color: #4f46e5;
padding: 0.25rem 0.5rem;
border-radius: 9999px;
display: flex;
align-items: center;
font-size: 0.875rem;
}
.tag-remove {
margin-left: 0.25rem;
cursor: pointer;
}
</style>
</head>
<body class="bg-gray-50 font-sans">
<div class="min-h-screen flex flex-col">
<!-- Header -->
<header class="gradient-bg text-white shadow-lg">
<div class="container mx-auto px-4 py-6">
<div class="flex justify-between items-center">
<div class="flex items-center space-x-3">
<i class="fas fa-car-side text-3xl"></i>
<h1 class="text-2xl font-bold">AutoParts Forecast Pro</h1>
</div>
<nav>
<ul class="flex space-x-6">
<li><a href="#" class="hover:text-blue-200 transition"><i class="fas fa-home mr-1"></i> Home</a></li>
<li><a href="#" class="hover:text-blue-200 transition"><i class="fas fa-chart-line mr-1"></i> Analytics</a></li>
<li><a href="#" class="hover:text-blue-200 transition"><i class="fas fa-cog mr-1"></i> Settings</a></li>
</ul>
</nav>
</div>
</div>
</header>
<!-- Main Content -->
<main class="flex-grow container mx-auto px-4 py-8">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<!-- Left Sidebar - Data Input -->
<div class="lg:col-span-1 space-y-6">
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold text-gray-800 mb-4 flex items-center">
<i class="fas fa-database mr-2 text-blue-500"></i> Data Input
</h2>
<!-- File Upload -->
<div class="file-upload rounded-lg p-4 mb-6 text-center cursor-pointer">
<input type="file" id="salesData" class="hidden" accept=".csv,.xlsx,.xls">
<label for="salesData" class="cursor-pointer">
<i class="fas fa-file-upload text-4xl text-blue-400 mb-2"></i>
<p class="font-medium text-gray-700">Upload Sales Data</p>
<p class="text-sm text-gray-500 mt-1">CSV or Excel format</p>
</label>
</div>
<div class="file-upload rounded-lg p-4 mb-6 text-center cursor-pointer">
<input type="file" id="carParcData" class="hidden" accept=".csv,.xlsx,.xls">
<label for="carParcData" class="cursor-pointer">
<i class="fas fa-car text-4xl text-blue-400 mb-2"></i>
<p class="font-medium text-gray-700">Upload Car Parc Data</p>
<p class="text-sm text-gray-500 mt-1">Vehicle population statistics</p>
</label>
</div>
<!-- Parameters -->
<div class="space-y-4">
<h3 class="font-medium text-gray-700 flex items-center">
<i class="fas fa-sliders-h mr-2 text-blue-500"></i> Forecast Parameters
</h3>
<div>
<label for="forecastPeriod" class="block text-sm font-medium text-gray-700 mb-1">Forecast Period (months)</label>
<select id="forecastPeriod" class="w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500">
<option>6</option>
<option selected>12</option>
<option>18</option>
<option>24</option>
</select>
</div>
<div>
<label for="category" class="block text-sm font-medium text-gray-700 mb-1">Product Categories</label>
<div class="tag-input" id="categoryContainer">
<input type="text" id="categoryInput" class="flex-grow outline-none bg-transparent" placeholder="Add a category...">
</div>
<p class="text-xs text-gray-500 mt-1">Press Enter to add a category</p>
</div>
<div>
<label for="region" class="block text-sm font-medium text-gray-700 mb-1">Region</label>
<select id="region" class="w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500">
<option>Global</option>
<option>North America</option>
<option>Europe</option>
<option>Asia Pacific</option>
<option>Latin America</option>
<option>Middle East & Africa</option>
<option>North America - USA</option>
<option>North America - Canada</option>
<option>Europe - Western</option>
<option>Europe - Eastern</option>
<option>Asia - China</option>
<option>Asia - Japan</option>
<option>Asia - India</option>
</select>
</div>
<button id="generateForecast" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition flex items-center justify-center">
<i class="fas fa-bolt mr-2"></i> Generate Forecast
</button>
</div>
</div>
<!-- Data Preview -->
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold text-gray-800 mb-4 flex items-center">
<i class="fas fa-table mr-2 text-blue-500"></i> Data Preview
</h2>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Month</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Sales</th>
</tr>
</thead>
<tbody id="dataPreview" class="bg-white divide-y divide-gray-200">
<tr><td colspan="2" class="px-4 py-4 text-sm text-gray-500 text-center">Upload data to preview</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Main Content - Results -->
<div class="lg:col-span-2 space-y-6">
<!-- Forecast Summary -->
<div class="bg-white rounded-xl shadow-md p-6">
<div class="flex justify-between items-center mb-6">
<h2 class="text-xl font-semibold text-gray-800 flex items-center">
<i class="fas fa-chart-bar mr-2 text-blue-500"></i> Forecast Summary
</h2>
<div class="flex space-x-2">
<button class="bg-gray-100 hover:bg-gray-200 text-gray-700 px-3 py-1 rounded-md text-sm flex items-center">
<i class="fas fa-download mr-1"></i> Export
</button>
<button class="bg-gray-100 hover:bg-gray-200 text-gray-700 px-3 py-1 rounded-md text-sm flex items-center">
<i class="fas fa-print mr-1"></i> Print
</button>
</div>
</div>
<!-- Key Metrics -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
<div class="bg-blue-50 p-4 rounded-lg border border-blue-100">
<p class="text-sm text-blue-600 font-medium">Projected Growth</p>
<p class="text-2xl font-bold text-blue-800">+12.5%</p>
<p class="text-xs text-blue-500">vs previous period</p>
</div>
<div class="bg-green-50 p-4 rounded-lg border border-green-100">
<p class="text-sm text-green-600 font-medium">Market Coverage</p>
<p class="text-2xl font-bold text-green-800">78%</p>
<p class="text-xs text-green-500">of vehicle parc</p>
</div>
<div class="bg-purple-50 p-4 rounded-lg border border-purple-100">
<p class="text-sm text-purple-600 font-medium">Potential Revenue</p>
<p class="text-2xl font-bold text-purple-800">$2.4M</p>
<p class="text-xs text-purple-500">next 12 months</p>
</div>
</div>
<!-- Chart -->
<div class="chart-container mb-6">
<canvas id="forecastChart"></canvas>
</div>
<!-- Coverage Gaps -->
<div>
<h3 class="font-medium text-gray-700 mb-3 flex items-center">
<i class="fas fa-exclamation-triangle mr-2 text-yellow-500"></i> Coverage Gaps
</h3>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Vehicle Make</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Model</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Year Range</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Parc Size</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Current Coverage</th>
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase">Potential</th>
</tr>
</thead>
<tbody id="coverageGaps" class="bg-white divide-y divide-gray-200">
<tr class="highlight-cell">
<td class="px-4 py-3 text-sm font-medium text-gray-900">Honda</td>
<td class="px-4 py-3 text-sm text-gray-500">Accord</td>
<td class="px-4 py-3 text-sm text-gray-500">2018-2022</td>
<td class="px-4 py-3 text-sm text-gray-500">1,240,000</td>
<td class="px-4 py-3 text-sm text-red-500 font-medium">32%</td>
<td class="px-4 py-3 text-sm text-green-600 font-medium">$420K</td>
</tr>
<tr>
<td class="px-4 py-3 text-sm font-medium text-gray-900">Toyota</td>
<td class="px-4 py-3 text-sm text-gray-500">Camry</td>
<td class="px-4 py-3 text-sm text-gray-500">2017-2021</td>
<td class="px-4 py-3 text-sm text-gray-500">1,150,000</td>
<td class="px-4 py-3 text-sm text-yellow-500 font-medium">58%</td>
<td class="px-4 py-3 text-sm text-green-600 font-medium">$310K</td>
</tr>
<tr class="highlight-cell">
<td class="px-4 py-3 text-sm font-medium text-gray-900">Volkswagen</td>
<td class="px-4 py-3 text-sm text-gray-500">Golf</td>
<td class="px-4 py-3 text-sm text-gray-500">2015-2020</td>
<td class="px-4 py-3 text-sm text-gray-500">2,850,000</td>
<td class="px-4 py-3 text-sm text-red-500 font-medium">28%</td>
<td class="px-4 py-3 text-sm text-green-600 font-medium">$780K</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Recommendations -->
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold text-gray-800 mb-4 flex items-center">
<i class="fas fa-lightbulb mr-2 text-yellow-500"></i> Strategic Recommendations
</h2>
<div class="space-y-4">
<div class="flex items-start">
<div class="flex-shrink-0 bg-yellow-100 p-2 rounded-full mr-3">
<i class="fas fa-box-open text-yellow-600"></i>
</div>
<div>
<h4 class="font-medium text-gray-800">Expand Product Line</h4>
<p class="text-sm text-gray-600">Develop parts for Honda Accord 2018-2022 models to capture estimated $420K in potential revenue from this segment.</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 bg-blue-100 p-2 rounded-full mr-3">
<i class="fas fa-percentage text-blue-600"></i>
</div>
<div>
<h4 class="font-medium text-gray-800">Promotional Campaign</h4>
<p class="text-sm text-gray-600">Target Volkswagen Golf owners with special bundle offers to increase market penetration from current 28% to at least 45%.</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 bg-green-100 p-2 rounded-full mr-3">
<i class="fas fa-store text-green-600"></i>
</div>
<div>
<h4 class="font-medium text-gray-800">Distribution Strategy</h4>
<p class="text-sm text-gray-600">Prioritize partnerships with retailers in regions with high concentrations of under-served vehicle models.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<!-- Footer -->
<footer class="bg-gray-800 text-white py-6">
<div class="container mx-auto px-4">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-4 md:mb-0">
<p class="text-sm">© 2023 AutoParts Forecast Pro. All rights reserved.</p>
</div>
<div class="flex space-x-4">
<a href="#" class="text-gray-300 hover:text-white transition">
<i class="fab fa-facebook-f"></i>
</a>
<a href="#" class="text-gray-300 hover:text-white transition">
<i class="fab fa-twitter"></i>
</a>
<a href="#" class="text-gray-300 hover:text-white transition">
<i class="fab fa-linkedin-in"></i>
</a>
</div>
</div>
</div>
</footer>
</div>
<!-- Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize chart
const ctx = document.getElementById('forecastChart').getContext('2d');
const forecastChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [
{
label: 'Historical Sales',
data: [120, 135, 142, 148, 155, 162, 158, 165, 172, 180, 188, 195],
borderColor: '#9CA3AF',
backgroundColor: 'transparent',
borderWidth: 2,
borderDash: [5, 5],
tension: 0.1
},
{
label: 'Forecasted Sales',
data: [195, 205, 215, 225, 235, 245, 255, 265, 275, 285, 295, 305],
borderColor: '#3B82F6',
backgroundColor: 'transparent',
borderWidth: 3,
tension: 0.1
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
},
tooltip: {
mode: 'index',
intersect: false,
}
},
scales: {
y: {
beginAtZero: false,
title: {
display: true,
text: 'Sales Volume'
}
}
}
}
});
// Tag input functionality for categories
const categoryContainer = document.getElementById('categoryContainer');
const categoryInput = document.getElementById('categoryInput');
const categories = new Set();
categoryInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter' && this.value.trim() !== '') {
const category = this.value.trim();
if (!categories.has(category)) {
categories.add(category);
addCategoryTag(category);
this.value = '';
}
}
});
function addCategoryTag(category) {
const tag = document.createElement('div');
tag.className = 'tag';
tag.innerHTML = `
${category}
<span class="tag-remove" data-category="${category}">
<i class="fas fa-times"></i>
</span>
`;
categoryContainer.insertBefore(tag, categoryInput);
// Add remove functionality
tag.querySelector('.tag-remove').addEventListener('click', function() {
categories.delete(this.dataset.category);
tag.remove();
});
}
// File upload preview
document.getElementById('salesData').addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
// Simulate data processing
setTimeout(() => {
const previewBody = document.getElementById('dataPreview');
previewBody.innerHTML = `
<tr>
<td class="px-4 py-2 text-sm font-medium text-gray-900">Jan 2023</td>
<td class="px-4 py-2 text-sm text-gray-500">120</td>
</tr>
<tr>
<td class="px-4 py-2 text-sm font-medium text-gray-900">Feb 2023</td>
<td class="px-4 py-2 text-sm text-gray-500">135</td>
</tr>
<tr>
<td class="px-4 py-2 text-sm font-medium text-gray-900">Mar 2023</td>
<td class="px-4 py-2 text-sm text-gray-500">142</td>
</tr>
<tr>
<td class="px-4 py-2 text-sm font-medium text-gray-900">Apr 2023</td>
<td class="px-4 py-2 text-sm text-gray-500">148</td>
</tr>
<tr>
<td class="px-4 py-2 text-sm font-medium text-gray-900">May 2023</td>
<td class="px-4 py-2 text-sm text-gray-500">155</td>
</tr>
`;
}, 1000);
}
});
// Generate forecast button
document.getElementById('generateForecast').addEventListener('click', function() {
// Show loading state
this.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Processing...';
this.disabled = true;
// Simulate forecast generation
setTimeout(() => {
// Update chart with new data
forecastChart.data.datasets[1].data = [210, 225, 240, 255, 270, 285, 300, 315, 330, 345, 360, 375];
forecastChart.update();
// Reset button
this.innerHTML = '<i class="fas fa-check mr-2"></i> Forecast Generated';
setTimeout(() => {
this.innerHTML = '<i class="fas fa-bolt mr-2"></i> Generate Forecast';
this.disabled = false;
}, 2000);
// Show success message
const toast = document.createElement('div');
toast.className = 'fixed bottom-4 right-4 bg-green-500 text-white px-4 py-2 rounded-md shadow-lg flex items-center';
toast.innerHTML = '<i class="fas fa-check-circle mr-2"></i> Forecast successfully generated!';
document.body.appendChild(toast);
setTimeout(() => toast.remove(), 3000);
}, 2000);
});
});
</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=jisaacso219/auto-forecast-rev1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>