cashierless-store / index.html
xmarva's picture
Add 3 files
ec2e174 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SmartStore Control Dashboard</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>
.sidebar-item:hover {
background-color: #f0fdf4;
border-left: 4px solid #22c55e;
}
.camera-feed {
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
}
.status-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
display: inline-block;
}
.status-active {
background-color: #22c55e;
}
.status-inactive {
background-color: #ef4444;
}
.status-warning {
background-color: #f59e0b;
}
.person-tag {
background-color: #dcfce7;
border: 1px solid #22c55e;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
.animate-pulse-slow {
animation: pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
</style>
</head>
<body class="bg-gray-50 font-sans">
<div class="flex h-screen overflow-hidden">
<!-- Sidebar -->
<div class="hidden md:flex md:flex-shrink-0">
<div class="flex flex-col w-64 border-r border-gray-200 bg-white">
<div class="flex items-center h-16 px-4 border-b border-gray-200">
<div class="flex items-center">
<i class="fas fa-store text-green-500 text-2xl mr-2"></i>
<span class="text-xl font-semibold text-gray-800">SmartStore</span>
</div>
</div>
<div class="flex flex-col flex-grow overflow-y-auto scrollbar-hide">
<nav class="flex-1 px-2 py-4 space-y-1">
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-900 rounded-md sidebar-item bg-green-50">
<i class="fas fa-tachometer-alt text-green-500 mr-3"></i>
Dashboard
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-shopping-basket text-green-500 mr-3"></i>
Products
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-users text-green-500 mr-3"></i>
Customers
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-receipt text-green-500 mr-3"></i>
Transactions
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-video text-green-500 mr-3"></i>
Surveillance
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-chart-line text-green-500 mr-3"></i>
Analytics
</a>
<a href="#" class="flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-md sidebar-item">
<i class="fas fa-cog text-green-500 mr-3"></i>
Settings
</a>
</nav>
</div>
<div class="p-4 border-t border-gray-200">
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/women/44.jpg" alt="Admin">
<div class="ml-3">
<p class="text-sm font-medium text-gray-700">Sarah Johnson</p>
<p class="text-xs font-medium text-gray-500">Store Manager</p>
</div>
</div>
</div>
</div>
</div>
<!-- Main content -->
<div class="flex flex-col flex-1 overflow-hidden">
<!-- Top navigation -->
<div class="flex items-center justify-between h-16 px-4 border-b border-gray-200 bg-white">
<div class="flex items-center">
<button class="md:hidden text-gray-500 focus:outline-none">
<i class="fas fa-bars"></i>
</button>
<h1 class="ml-4 text-lg font-semibold text-gray-800">Dashboard Overview</h1>
</div>
<div class="flex items-center space-x-4">
<button class="p-1 text-gray-500 rounded-full hover:bg-gray-100 focus:outline-none">
<i class="fas fa-bell"></i>
</button>
<button class="p-1 text-gray-500 rounded-full hover:bg-gray-100 focus:outline-none">
<i class="fas fa-envelope"></i>
</button>
<div class="relative">
<input type="text" placeholder="Search..." class="pl-8 pr-4 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-1 focus:ring-green-500">
<i class="fas fa-search absolute left-3 top-2.5 text-gray-400"></i>
</div>
</div>
</div>
<!-- Main content area -->
<div class="flex-1 overflow-auto p-4 bg-gray-50">
<!-- Stats cards -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Active Customers</p>
<p class="text-2xl font-semibold text-gray-800 mt-1">12</p>
</div>
<div class="p-3 rounded-full bg-green-50">
<i class="fas fa-user-friends text-green-500"></i>
</div>
</div>
<div class="mt-2 flex items-center text-sm text-green-600">
<i class="fas fa-arrow-up mr-1"></i>
<span>3 new today</span>
</div>
</div>
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Today's Sales</p>
<p class="text-2xl font-semibold text-gray-800 mt-1">$1,248</p>
</div>
<div class="p-3 rounded-full bg-green-50">
<i class="fas fa-dollar-sign text-green-500"></i>
</div>
</div>
<div class="mt-2 flex items-center text-sm text-green-600">
<i class="fas fa-arrow-up mr-1"></i>
<span>12% from yesterday</span>
</div>
</div>
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">Items in Stock</p>
<p class="text-2xl font-semibold text-gray-800 mt-1">1,842</p>
</div>
<div class="p-3 rounded-full bg-green-50">
<i class="fas fa-boxes text-green-500"></i>
</div>
</div>
<div class="mt-2 flex items-center text-sm text-red-500">
<i class="fas fa-arrow-down mr-1"></i>
<span>24 low stock items</span>
</div>
</div>
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between">
<div>
<p class="text-sm font-medium text-gray-500">System Status</p>
<p class="text-2xl font-semibold text-gray-800 mt-1">All Good</p>
</div>
<div class="p-3 rounded-full bg-green-50">
<i class="fas fa-check-circle text-green-500"></i>
</div>
</div>
<div class="mt-2 flex items-center text-sm text-green-600">
<span>6 cameras active</span>
</div>
</div>
</div>
<!-- Main grid -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Left column -->
<div class="lg:col-span-2 space-y-6">
<!-- Camera feeds -->
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Live Surveillance</h2>
<div class="flex space-x-2">
<button class="px-3 py-1 text-sm bg-green-50 text-green-600 rounded-md">All Cameras</button>
<button class="px-3 py-1 text-sm text-gray-600 hover:bg-gray-100 rounded-md">Entrance</button>
<button class="px-3 py-1 text-sm text-gray-600 hover:bg-gray-100 rounded-md">Aisles</button>
<button class="px-3 py-1 text-sm text-gray-600 hover:bg-gray-100 rounded-md">Checkout</button>
</div>
</div>
<div class="grid grid-cols-2 gap-4">
<div class="camera-feed rounded-lg overflow-hidden relative">
<div class="aspect-w-16 aspect-h-9 bg-gray-200 flex items-center justify-center">
<i class="fas fa-video text-gray-400 text-4xl"></i>
</div>
<div class="absolute top-2 left-2 bg-black bg-opacity-50 text-white px-2 py-1 rounded text-xs">
CAM-1: Entrance
</div>
<div class="absolute bottom-2 left-2 flex space-x-2">
<div class="bg-red-500 rounded-full w-3 h-3 animate-pulse-slow"></div>
<span class="text-white text-xs">LIVE</span>
</div>
</div>
<div class="camera-feed rounded-lg overflow-hidden relative">
<div class="aspect-w-16 aspect-h-9 bg-gray-200 flex items-center justify-center">
<i class="fas fa-video text-gray-400 text-4xl"></i>
</div>
<div class="absolute top-2 left-2 bg-black bg-opacity-50 text-white px-2 py-1 rounded text-xs">
CAM-2: Aisle 1
</div>
<div class="absolute bottom-2 left-2 flex space-x-2">
<div class="bg-red-500 rounded-full w-3 h-3 animate-pulse-slow"></div>
<span class="text-white text-xs">LIVE</span>
</div>
</div>
<div class="camera-feed rounded-lg overflow-hidden relative">
<div class="aspect-w-16 aspect-h-9 bg-gray-200 flex items-center justify-center">
<i class="fas fa-video text-gray-400 text-4xl"></i>
</div>
<div class="absolute top-2 left-2 bg-black bg-opacity-50 text-white px-2 py-1 rounded text-xs">
CAM-3: Aisle 2
</div>
<div class="absolute bottom-2 left-2 flex space-x-2">
<div class="bg-red-500 rounded-full w-3 h-3 animate-pulse-slow"></div>
<span class="text-white text-xs">LIVE</span>
</div>
</div>
<div class="camera-feed rounded-lg overflow-hidden relative">
<div class="aspect-w-16 aspect-h-9 bg-gray-200 flex items-center justify-center">
<i class="fas fa-video text-gray-400 text-4xl"></i>
</div>
<div class="absolute top-2 left-2 bg-black bg-opacity-50 text-white px-2 py-1 rounded text-xs">
CAM-4: Checkout
</div>
<div class="absolute bottom-2 left-2 flex space-x-2">
<div class="bg-red-500 rounded-full w-3 h-3 animate-pulse-slow"></div>
<span class="text-white text-xs">LIVE</span>
</div>
</div>
</div>
</div>
<!-- Recent transactions -->
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Recent Transactions</h2>
<button class="text-sm text-green-600 hover:text-green-700">View All</button>
</div>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Customer</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Items</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Amount</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#TXN-4829</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Michael Brown</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">5</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">$42.75</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Completed</span>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#TXN-4828</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Sarah Johnson</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">3</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">$28.50</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Completed</span>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#TXN-4827</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Robert Wilson</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">7</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">$65.25</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">Processing</span>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#TXN-4826</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Emily Davis</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">2</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">$15.99</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Completed</span>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#TXN-4825</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">David Miller</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">4</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">$37.20</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">Failed</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Right column -->
<div class="space-y-6">
<!-- Store activity -->
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<h2 class="text-lg font-semibold text-gray-800 mb-4">Store Activity</h2>
<div class="space-y-4">
<div class="flex items-start">
<div class="flex-shrink-0 mt-1">
<div class="h-8 w-8 rounded-full bg-green-50 flex items-center justify-center">
<i class="fas fa-user-plus text-green-500"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">New customer entered</p>
<p class="text-sm text-gray-500">Michael Brown entered the store at 10:42 AM</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 mt-1">
<div class="h-8 w-8 rounded-full bg-green-50 flex items-center justify-center">
<i class="fas fa-shopping-basket text-green-500"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Product picked up</p>
<p class="text-sm text-gray-500">Sarah Johnson picked up Organic Apples (Aisle 2)</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 mt-1">
<div class="h-8 w-8 rounded-full bg-green-50 flex items-center justify-center">
<i class="fas fa-check-circle text-green-500"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Transaction completed</p>
<p class="text-sm text-gray-500">Robert Wilson completed purchase of $65.25</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 mt-1">
<div class="h-8 w-8 rounded-full bg-green-50 flex items-center justify-center">
<i class="fas fa-exclamation-triangle text-yellow-500"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Low stock alert</p>
<p class="text-sm text-gray-500">Organic Milk is running low (8 remaining)</p>
</div>
</div>
<div class="flex items-start">
<div class="flex-shrink-0 mt-1">
<div class="h-8 w-8 rounded-full bg-green-50 flex items-center justify-center">
<i class="fas fa-door-open text-green-500"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Customer exited</p>
<p class="text-sm text-gray-500">Emily Davis left the store at 10:55 AM</p>
</div>
</div>
</div>
<button class="mt-4 w-full py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500">
View All Activity
</button>
</div>
<!-- Current customers -->
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Current Customers (5)</h2>
<button class="text-sm text-green-600 hover:text-green-700">View All</button>
</div>
<div class="space-y-4">
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/32.jpg" alt="">
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Michael Brown</p>
<p class="text-xs text-gray-500">In store: 12 min</p>
</div>
<div class="ml-auto flex space-x-1">
<span class="person-tag px-2 py-1 text-xs rounded-full">Aisle 1</span>
</div>
</div>
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/women/44.jpg" alt="">
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Sarah Johnson</p>
<p class="text-xs text-gray-500">In store: 8 min</p>
</div>
<div class="ml-auto flex space-x-1">
<span class="person-tag px-2 py-1 text-xs rounded-full">Aisle 2</span>
</div>
</div>
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/75.jpg" alt="">
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Robert Wilson</p>
<p class="text-xs text-gray-500">In store: 15 min</p>
</div>
<div class="ml-auto flex space-x-1">
<span class="person-tag px-2 py-1 text-xs rounded-full">Checkout</span>
</div>
</div>
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/women/63.jpg" alt="">
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Emily Davis</p>
<p class="text-xs text-gray-500">In store: 5 min</p>
</div>
<div class="ml-auto flex space-x-1">
<span class="person-tag px-2 py-1 text-xs rounded-full">Entrance</span>
</div>
</div>
<div class="flex items-center">
<img class="h-10 w-10 rounded-full" src="https://randomuser.me/api/portraits/men/22.jpg" alt="">
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">David Miller</p>
<p class="text-xs text-gray-500">In store: 3 min</p>
</div>
<div class="ml-auto flex space-x-1">
<span class="person-tag px-2 py-1 text-xs rounded-full">Aisle 3</span>
</div>
</div>
</div>
</div>
<!-- Low stock items -->
<div class="bg-white p-4 rounded-lg shadow-sm border border-gray-200">
<div class="flex items-center justify-between mb-4">
<h2 class="text-lg font-semibold text-gray-800">Low Stock Items</h2>
<button class="text-sm text-green-600 hover:text-green-700">Manage</button>
</div>
<div class="space-y-3">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-red-50 flex items-center justify-center">
<i class="fas fa-exclamation text-red-500"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Organic Milk</p>
<p class="text-xs text-gray-500">8 remaining (usually 40)</p>
</div>
</div>
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-yellow-50 flex items-center justify-center">
<i class="fas fa-exclamation text-yellow-500"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Whole Wheat Bread</p>
<p class="text-xs text-gray-500">5 remaining (usually 25)</p>
</div>
</div>
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-yellow-50 flex items-center justify-center">
<i class="fas fa-exclamation text-yellow-500"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Free Range Eggs</p>
<p class="text-xs text-gray-500">3 remaining (usually 20)</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Simple demo of live updates (would be replaced with real data in production)
function updateCustomerCount() {
const countElement = document.querySelector('.stats-grid div:nth-child(1) p:nth-child(2)');
const currentCount = parseInt(countElement.textContent);
const newCount = currentCount + (Math.random() > 0.5 ? 1 : -1);
if (newCount >= 0) {
countElement.textContent = newCount;
const changeElement = countElement.nextElementSibling.querySelector('span');
changeElement.textContent = newCount > currentCount ?
`${newCount - currentCount} new today` :
`${currentCount - newCount} left today`;
}
}
// Update stats every 30 seconds
setInterval(updateCustomerCount, 30000);
// Simulate camera feed clicks
document.querySelectorAll('.camera-feed').forEach(feed => {
feed.addEventListener('click', function() {
const cameraName = this.querySelector('div:nth-child(2)').textContent;
alert(`Opening full screen view for ${cameraName}`);
});
});
</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=xmarva/cashierless-store" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>