deepsite-mining2 / index.html
pennypacker's picture
Add 3 files
c66b68a verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Iron Ore Mining Production Dashboard</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></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%, #0c4a6e 100%);
}
.sidebar {
transition: all 0.3s ease;
}
.card-hover:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}
.blink {
animation: blink-animation 1.5s infinite;
}
@keyframes blink-animation {
0% { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 1; }
}
.equipment-status {
position: relative;
}
.equipment-status::after {
content: '';
position: absolute;
top: 5px;
right: 5px;
width: 10px;
height: 10px;
border-radius: 50%;
}
.status-active::after {
background-color: #10b981;
}
.status-warning::after {
background-color: #f59e0b;
}
.status-danger::after {
background-color: #ef4444;
}
</style>
</head>
<body class="bg-gray-100 font-sans">
<div class="flex h-screen overflow-hidden">
<!-- Sidebar -->
<div class="sidebar bg-gray-900 text-white w-64 flex-shrink-0">
<div class="p-4 border-b border-gray-700">
<div class="flex items-center space-x-3">
<i class="fas fa-mountain text-blue-400 text-2xl"></i>
<h1 class="text-xl font-bold">IronCore Mining</h1>
</div>
</div>
<nav class="p-4">
<div class="mb-8">
<h2 class="text-gray-400 uppercase text-xs font-semibold mb-3">Main</h2>
<ul>
<li class="mb-2">
<a href="#" class="flex items-center p-2 bg-blue-800 rounded-lg">
<i class="fas fa-tachometer-alt mr-3 text-blue-300"></i>
<span>Dashboard</span>
</a>
</li>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-chart-line mr-3 text-gray-400"></i>
<span>Production Analytics</span>
</a>
</li>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-hard-hat mr-3 text-gray-400"></i>
<span>Equipment Status</span>
</a>
</li>
</ul>
</div>
<div class="mb-8">
<h2 class="text-gray-400 uppercase text-xs font-semibold mb-3">Operations</h2>
<ul>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-excavator mr-3 text-gray-400"></i>
<span>Excavation</span>
</a>
</li>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-truck-pickup mr-3 text-gray-400"></i>
<span>Haulage</span>
</a>
</li>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-industry mr-3 text-gray-400"></i>
<span>Processing</span>
</a>
</li>
</ul>
</div>
<div>
<h2 class="text-gray-400 uppercase text-xs font-semibold mb-3">Admin</h2>
<ul>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-users mr-3 text-gray-400"></i>
<span>Personnel</span>
</a>
</li>
<li class="mb-2">
<a href="#" class="flex items-center p-2 hover:bg-gray-800 rounded-lg">
<i class="fas fa-cog mr-3 text-gray-400"></i>
<span>Settings</span>
</a>
</li>
</ul>
</div>
</nav>
</div>
<!-- Main Content -->
<div class="flex-1 overflow-auto">
<!-- Header -->
<header class="bg-white shadow-sm">
<div class="flex items-center justify-between p-4">
<div class="flex items-center space-x-4">
<button class="text-gray-500 focus:outline-none lg:hidden">
<i class="fas fa-bars"></i>
</button>
<h1 class="text-xl font-semibold text-gray-800">Production Dashboard</h1>
</div>
<div class="flex items-center space-x-4">
<div class="relative">
<button class="text-gray-500 focus:outline-none">
<i class="fas fa-bell"></i>
<span class="absolute top-0 right-0 h-2 w-2 rounded-full bg-red-500"></span>
</button>
</div>
<div class="flex items-center space-x-2">
<div class="h-8 w-8 rounded-full bg-blue-500 flex items-center justify-center text-white font-semibold">JS</div>
<span class="text-gray-700">John Smith</span>
</div>
</div>
</div>
</header>
<!-- Dashboard Content -->
<main class="p-6">
<!-- Summary Cards -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6">
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover transition-all duration-300">
<div class="p-5">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500">Today's Production</p>
<h3 class="text-2xl font-bold text-gray-800 mt-1">24,580 <span class="text-sm text-gray-500">tons</span></h3>
</div>
<div class="bg-blue-100 p-3 rounded-full">
<i class="fas fa-chart-bar text-blue-500 text-xl"></i>
</div>
</div>
<div class="mt-4 flex items-center text-sm">
<span class="text-green-500 flex items-center">
<i class="fas fa-arrow-up mr-1"></i> 12.5%
</span>
<span class="text-gray-500 ml-2">vs yesterday</span>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover transition-all duration-300">
<div class="p-5">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500">Monthly Target</p>
<h3 class="text-2xl font-bold text-gray-800 mt-1">78%</h3>
</div>
<div class="bg-orange-100 p-3 rounded-full">
<i class="fas fa-bullseye text-orange-500 text-xl"></i>
</div>
</div>
<div class="mt-4">
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-orange-500 h-2 rounded-full" style="width: 78%"></div>
</div>
<p class="text-gray-500 text-sm mt-1">512,000/650,000 tons</p>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover transition-all duration-300">
<div class="p-5">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500">Equipment Utilization</p>
<h3 class="text-2xl font-bold text-gray-800 mt-1">86%</h3>
</div>
<div class="bg-green-100 p-3 rounded-full">
<i class="fas fa-cogs text-green-500 text-xl"></i>
</div>
</div>
<div class="mt-4">
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-500 h-2 rounded-full" style="width: 86%"></div>
</div>
<p class="text-gray-500 text-sm mt-1">32/37 units active</p>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-md overflow-hidden card-hover transition-all duration-300">
<div class="p-5">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500">Safety Days</p>
<h3 class="text-2xl font-bold text-gray-800 mt-1">127</h3>
</div>
<div class="bg-red-100 p-3 rounded-full">
<i class="fas fa-shield-alt text-red-500 text-xl"></i>
</div>
</div>
<div class="mt-4 flex items-center text-sm">
<span class="text-green-500 flex items-center">
<i class="fas fa-trophy mr-1"></i> Record: 183
</span>
</div>
</div>
</div>
</div>
<!-- Main Charts -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-6">
<!-- Production Trend -->
<div class="bg-white p-5 rounded-xl shadow-md lg:col-span-2">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Production Trend (Last 30 Days)</h2>
<div class="flex space-x-2">
<button class="px-3 py-1 text-xs bg-blue-100 text-blue-600 rounded-full">Tons</button>
<button class="px-3 py-1 text-xs bg-gray-100 text-gray-600 rounded-full">Grade</button>
</div>
</div>
<div class="h-80">
<canvas id="productionChart"></canvas>
</div>
</div>
<!-- Iron Grade Distribution -->
<div class="bg-white p-5 rounded-xl shadow-md">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Iron Grade Distribution</h2>
<div class="text-sm text-gray-500">Current Shift</div>
</div>
<div class="h-80">
<canvas id="gradeChart"></canvas>
</div>
</div>
</div>
<!-- Equipment Status and Alerts -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Equipment Status -->
<div class="bg-white p-5 rounded-xl shadow-md">
<h2 class="text-lg font-semibold text-gray-800 mb-4">Equipment Status</h2>
<div class="space-y-4">
<div class="equipment-status status-active bg-gray-50 p-4 rounded-lg">
<div class="flex items-center justify-between">
<div>
<h3 class="font-medium">Excavator #E-247</h3>
<p class="text-sm text-gray-500">Pit 3 - North Section</p>
</div>
<div class="text-green-500 text-sm">Active</div>
</div>
<div class="mt-3 flex justify-between text-xs">
<span>Utilization: 92%</span>
<span>Hours: 1,247</span>
</div>
</div>
<div class="equipment-status status-warning bg-gray-50 p-4 rounded-lg">
<div class="flex items-center justify-between">
<div>
<h3 class="font-medium">Haul Truck #HT-512</h3>
<p class="text-sm text-gray-500">Pit 2 - Transport</p>
</div>
<div class="text-yellow-500 text-sm">Maintenance</div>
</div>
<div class="mt-3 flex justify-between text-xs">
<span>Utilization: 65%</span>
<span>Hours: 3,512</span>
</div>
</div>
<div class="equipment-status status-danger bg-gray-50 p-4 rounded-lg">
<div class="flex items-center justify-between">
<div>
<h3 class="font-medium">Drill Rig #DR-108</h3>
<p class="text-sm text-gray-500">Pit 1 - Blasting Zone</p>
</div>
<div class="text-red-500 text-sm">Down</div>
</div>
<div class="mt-3 flex justify-between text-xs">
<span>Utilization: 28%</span>
<span>Hours: 4,108</span>
</div>
</div>
<button class="w-full py-2 text-sm text-blue-500 hover:bg-blue-50 rounded-lg">
View All Equipment (37)
</button>
</div>
</div>
<!-- Production Alerts -->
<div class="bg-white p-5 rounded-xl shadow-md">
<h2 class="text-lg font-semibold text-gray-800 mb-4">Production Alerts</h2>
<div class="space-y-4">
<div class="p-3 bg-red-50 rounded-lg border-l-4 border-red-500">
<div class="flex items-start">
<div class="flex-shrink-0 text-red-500 mt-1">
<i class="fas fa-exclamation-triangle"></i>
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-red-800">Conveyor Belt Jam</h3>
<p class="text-sm text-red-700">Processing Plant Line 2</p>
<p class="text-xs text-red-600 mt-1">Alerted 25 min ago</p>
</div>
</div>
</div>
<div class="p-3 bg-yellow-50 rounded-lg border-l-4 border-yellow-500">
<div class="flex items-start">
<div class="flex-shrink-0 text-yellow-500 mt-1">
<i class="fas fa-exclamation-circle"></i>
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-yellow-800">Low Iron Grade</h3>
<p class="text-sm text-yellow-700">Section B, Pit 3 (Fe 58%)</p>
<p class="text-xs text-yellow-600 mt-1">Alerted 1 hour ago</p>
</div>
</div>
</div>
<div class="p-3 bg-blue-50 rounded-lg border-l-4 border-blue-500">
<div class="flex items-start">
<div class="flex-shrink-0 text-blue-500 mt-1">
<i class="fas fa-info-circle"></i>
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-blue-800">Preventive Maintenance</h3>
<p class="text-sm text-blue-700">Crusher #CR-205 due in 2 days</p>
<p class="text-xs text-blue-600 mt-1">Scheduled</p>
</div>
</div>
</div>
<button class="w-full py-2 text-sm text-blue-500 hover:bg-blue-50 rounded-lg">
View All Alerts (8)
</button>
</div>
</div>
<!-- Shift Performance -->
<div class="bg-white p-5 rounded-xl shadow-md">
<h2 class="text-lg font-semibold text-gray-800 mb-4">Shift Performance</h2>
<div class="flex items-center justify-between mb-4">
<div>
<p class="text-gray-500">Current Shift</p>
<h3 class="text-xl font-bold">Shift B</h3>
<p class="text-sm text-gray-500">07:00 - 15:00</p>
</div>
<div class="bg-green-100 text-green-800 px-3 py-2 rounded-lg">
<span class="font-medium">On Target</span>
</div>
</div>
<div class="space-y-3">
<div>
<div class="flex justify-between text-sm mb-1">
<span>Production</span>
<span>1,850/2,400 tons</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-blue-500 h-2 rounded-full" style="width: 77%"></div>
</div>
</div>
<div>
<div class="flex justify-between text-sm mb-1">
<span>Equipment Used</span>
<span>18/22 units</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-500 h-2 rounded-full" style="width: 82%"></div>
</div>
</div>
<div>
<div class="flex justify-between text-sm mb-1">
<span>Safety Incidents</span>
<span>0</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-red-500 h-2 rounded-full" style="width: 0%"></div>
</div>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200">
<h3 class="text-sm font-medium text-gray-800 mb-2">Next Shift: Shift C</h3>
<div class="flex items-center justify-between text-sm">
<span class="text-gray-500">Starts in</span>
<span class="font-medium text-gray-800 blink">1 hour 22 minutes</span>
</div>
<button class="w-full mt-3 bg-blue-600 hover:bg-blue-700 text-white py-2 rounded-lg text-sm">
Prepare Shift Handover
</button>
</div>
</div>
</div>
</main>
</div>
</div>
<script>
// Production Trend Chart
const productionCtx = document.getElementById('productionChart').getContext('2d');
const productionChart = new Chart(productionCtx, {
type: 'line',
data: {
labels: Array.from({length: 30}, (_, i) => `Day ${i+1}`),
datasets: [
{
label: 'Ore Production (tons)',
data: Array.from({length: 30}, () => Math.floor(Math.random() * 3000) + 18000),
borderColor: '#3b82f6',
backgroundColor: 'rgba(59, 130, 246, 0.05)',
borderWidth: 2,
fill: true,
tension: 0.4
},
{
label: 'Target',
data: Array(30).fill(22000),
borderColor: '#10b981',
borderWidth: 1,
borderDash: [5, 5],
pointRadius: 0
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
},
tooltip: {
mode: 'index',
intersect: false,
}
},
scales: {
y: {
beginAtZero: false,
min: 15000,
ticks: {
callback: function(value) {
return value.toLocaleString() + 't';
}
}
}
}
}
});
// Grade Distribution Chart
const gradeCtx = document.getElementById('gradeChart').getContext('2d');
const gradeChart = new Chart(gradeCtx, {
type: 'doughnut',
data: {
labels: ['High Grade (Fe >62%)', 'Medium Grade (Fe 58-62%)', 'Low Grade (Fe <58%)'],
datasets: [{
data: [45, 35, 20],
backgroundColor: [
'#10b981',
'#f59e0b',
'#ef4444'
],
borderWidth: 0
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'right',
},
tooltip: {
callbacks: {
label: function(context) {
return context.label + ': ' + context.raw + '%';
}
}
}
},
cutout: '70%'
}
});
// Simulate real-time data updates
function updateProductionData() {
const newData = Array.from({length: 30}, () => Math.floor(Math.random() * 3000) + 18000);
productionChart.data.datasets[0].data = newData;
productionChart.update();
// Update summary card with random value ±500 from current
const currentProduction = document.querySelector('h3:contains("Today\'s Production")').nextElementSibling;
const currentValue = parseInt(currentProduction.textContent.replace(/,/g, ''));
const newValue = currentValue + Math.floor(Math.random() * 1000) - 500;
currentProduction.textContent = newValue.toLocaleString() + ' tons';
setTimeout(updateProductionData, 5000);
}
// Start updates after initial load
setTimeout(updateProductionData, 5000);
</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=pennypacker/deepsite-mining2" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>