Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Luminous Laser - Client Management</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> | |
/* Custom scrollbar */ | |
::-webkit-scrollbar { | |
width: 8px; | |
} | |
::-webkit-scrollbar-track { | |
background: #f8fafc; | |
} | |
::-webkit-scrollbar-thumb { | |
background: #cbd5e1; | |
border-radius: 4px; | |
} | |
::-webkit-scrollbar-thumb:hover { | |
background: #94a3b8; | |
} | |
/* Calendar animation */ | |
@keyframes fadeIn { | |
from { opacity: 0; transform: translateY(-10px); } | |
to { opacity: 1; transform: translateY(0); } | |
} | |
.calendar-dropdown { | |
animation: fadeIn 0.2s ease-out; | |
} | |
/* Pulse animation for active treatments */ | |
@keyframes pulse { | |
0% { box-shadow: 0 0 0 0 rgba(168, 85, 247, 0.4); } | |
70% { box-shadow: 0 0 0 10px rgba(168, 85, 247, 0); } | |
100% { box-shadow: 0 0 0 0 rgba(168, 85, 247, 0); } | |
} | |
.active-treatment { | |
animation: pulse 2s infinite; | |
} | |
</style> | |
</head> | |
<body class="bg-rose-50 font-sans"> | |
<div class="min-h-screen flex flex-col"> | |
<!-- Header --> | |
<header class="bg-gradient-to-r from-purple-600 to-pink-500 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-bolt text-2xl"></i> | |
<h1 class="text-2xl font-bold">Luminous Laser</h1> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<button class="bg-white text-purple-600 px-4 py-2 rounded-full font-medium hover:bg-purple-50 transition"> | |
<i class="fas fa-plus mr-2"></i>New Client | |
</button> | |
<div class="w-10 h-10 rounded-full bg-white flex items-center justify-center text-purple-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
</div> | |
</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-4 gap-6"> | |
<!-- Sidebar --> | |
<div class="lg:col-span-1 bg-white rounded-xl shadow-md p-6 h-fit"> | |
<div class="mb-6"> | |
<h2 class="text-xl font-semibold text-gray-800 mb-4">Quick Stats</h2> | |
<div class="space-y-4"> | |
<div class="bg-purple-50 p-4 rounded-lg"> | |
<p class="text-sm text-purple-600">Total Clients</p> | |
<p class="text-2xl font-bold text-purple-800">142</p> | |
</div> | |
<div class="bg-pink-50 p-4 rounded-lg"> | |
<p class="text-sm text-pink-600">Appointments Today</p> | |
<p class="text-2xl font-bold text-pink-800">8</p> | |
</div> | |
<div class="bg-rose-50 p-4 rounded-lg"> | |
<p class="text-sm text-rose-600">Follow-ups Needed</p> | |
<p class="text-2xl font-bold text-rose-800">12</p> | |
</div> | |
</div> | |
</div> | |
<div> | |
<h2 class="text-xl font-semibold text-gray-800 mb-4">Quick Actions</h2> | |
<div class="space-y-3"> | |
<button class="w-full flex items-center space-x-3 bg-gray-100 hover:bg-gray-200 p-3 rounded-lg transition"> | |
<i class="fas fa-calendar-check text-purple-600"></i> | |
<span>Schedule Appointment</span> | |
</button> | |
<button class="w-full flex items-center space-x-3 bg-gray-100 hover:bg-gray-200 p-3 rounded-lg transition"> | |
<i class="fas fa-bell text-pink-600"></i> | |
<span>Send Reminders</span> | |
</button> | |
<button class="w-full flex items-center space-x-3 bg-gray-100 hover:bg-gray-200 p-3 rounded-lg transition"> | |
<i class="fas fa-chart-line text-rose-600"></i> | |
<span>View Reports</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Main Panel --> | |
<div class="lg:col-span-3 space-y-6"> | |
<!-- Search and Filter --> | |
<div class="bg-white rounded-xl shadow-md p-6"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="relative flex-grow"> | |
<i class="fas fa-search absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400"></i> | |
<input type="text" placeholder="Search clients..." class="w-full pl-10 pr-4 py-2 border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent"> | |
</div> | |
<div class="flex space-x-3"> | |
<div class="relative"> | |
<button id="dateDropdownButton" class="flex items-center space-x-2 bg-gray-100 hover:bg-gray-200 px-4 py-2 rounded-lg transition"> | |
<i class="fas fa-calendar-alt text-purple-600"></i> | |
<span>Select Date</span> | |
<i class="fas fa-chevron-down text-xs"></i> | |
</button> | |
<div id="dateDropdown" class="hidden absolute right-0 mt-2 w-72 bg-white rounded-lg shadow-xl z-10 calendar-dropdown p-4 border border-gray-200"> | |
<div class="flex justify-between items-center mb-4"> | |
<button class="text-gray-500 hover:text-gray-700"> | |
<i class="fas fa-chevron-left"></i> | |
</button> | |
<h3 class="font-medium">June 2023</h3> | |
<button class="text-gray-500 hover:text-gray-700"> | |
<i class="fas fa-chevron-right"></i> | |
</button> | |
</div> | |
<div class="grid grid-cols-7 gap-1 text-center"> | |
<div class="text-sm font-medium text-gray-500 py-1">Sun</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Mon</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Tue</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Wed</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Thu</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Fri</div> | |
<div class="text-sm font-medium text-gray-500 py-1">Sat</div> | |
<!-- Calendar days --> | |
<div class="py-1 text-gray-400">28</div> | |
<div class="py-1 text-gray-400">29</div> | |
<div class="py-1 text-gray-400">30</div> | |
<div class="py-1 text-gray-400">31</div> | |
<div class="py-1">1</div> | |
<div class="py-1">2</div> | |
<div class="py-1">3</div> | |
<div class="py-1">4</div> | |
<div class="py-1">5</div> | |
<div class="py-1">6</div> | |
<div class="py-1">7</div> | |
<div class="py-1">8</div> | |
<div class="py-1">9</div> | |
<div class="py-1">10</div> | |
<div class="py-1">11</div> | |
<div class="py-1">12</div> | |
<div class="py-1">13</div> | |
<div class="py-1">14</div> | |
<div class="py-1">15</div> | |
<div class="py-1">16</div> | |
<div class="py-1">17</div> | |
<div class="py-1">18</div> | |
<div class="py-1">19</div> | |
<div class="py-1">20</div> | |
<div class="py-1">21</div> | |
<div class="py-1">22</div> | |
<div class="py-1">23</div> | |
<div class="py-1">24</div> | |
<div class="py-1">25</div> | |
<div class="py-1">26</div> | |
<div class="py-1">27</div> | |
<div class="py-1">28</div> | |
<div class="py-1">29</div> | |
<div class="py-1">30</div> | |
<div class="py-1 text-gray-400">1</div> | |
</div> | |
<div class="mt-4 flex justify-between"> | |
<button class="text-sm text-gray-500 hover:text-gray-700">Today</button> | |
<button class="text-sm text-purple-600 hover:text-purple-800 font-medium">Apply</button> | |
</div> | |
</div> | |
</div> | |
<button class="flex items-center space-x-2 bg-purple-600 hover:bg-purple-700 text-white px-4 py-2 rounded-lg transition"> | |
<i class="fas fa-filter"></i> | |
<span>Filter</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Client List --> | |
<div class="bg-white rounded-xl shadow-md overflow-hidden"> | |
<div class="p-6 border-b border-gray-200"> | |
<h2 class="text-xl font-semibold text-gray-800">Recent Clients</h2> | |
</div> | |
<div class="divide-y divide-gray-200 max-h-[500px] overflow-y-auto"> | |
<!-- Client Card 1 --> | |
<div class="p-6 hover:bg-purple-50 transition cursor-pointer"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="flex items-center space-x-4"> | |
<div class="w-12 h-12 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
<div> | |
<h3 class="font-medium text-gray-800">Sarah Johnson</h3> | |
<p class="text-sm text-gray-500">Last visit: 2 days ago</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Treatment Area</p> | |
<p class="font-medium">Underarms</p> | |
</div> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Sessions</p> | |
<p class="font-medium">3/6</p> | |
</div> | |
<div class="bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm font-medium"> | |
Active | |
</div> | |
<button class="text-gray-400 hover:text-purple-600"> | |
<i class="fas fa-ellipsis-v"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Client Card 2 --> | |
<div class="p-6 hover:bg-purple-50 transition cursor-pointer"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="flex items-center space-x-4"> | |
<div class="w-12 h-12 rounded-full bg-pink-100 flex items-center justify-center text-pink-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
<div> | |
<h3 class="font-medium text-gray-800">Michael Chen</h3> | |
<p class="text-sm text-gray-500">Last visit: 1 week ago</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Treatment Area</p> | |
<p class="font-medium">Full Legs</p> | |
</div> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Sessions</p> | |
<p class="font-medium">5/8</p> | |
</div> | |
<div class="bg-pink-100 text-pink-800 px-3 py-1 rounded-full text-sm font-medium"> | |
Follow-up | |
</div> | |
<button class="text-gray-400 hover:text-pink-600"> | |
<i class="fas fa-ellipsis-v"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Client Card 3 --> | |
<div class="p-6 hover:bg-purple-50 transition cursor-pointer active-treatment"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="flex items-center space-x-4"> | |
<div class="w-12 h-12 rounded-full bg-rose-100 flex items-center justify-center text-rose-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
<div> | |
<h3 class="font-medium text-gray-800">Emily Rodriguez</h3> | |
<p class="text-sm text-gray-500">Appointment today</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Treatment Area</p> | |
<p class="font-medium">Brazilian</p> | |
</div> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Sessions</p> | |
<p class="font-medium">2/6</p> | |
</div> | |
<div class="bg-rose-100 text-rose-800 px-3 py-1 rounded-full text-sm font-medium"> | |
Today | |
</div> | |
<button class="text-gray-400 hover:text-rose-600"> | |
<i class="fas fa-ellipsis-v"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Client Card 4 --> | |
<div class="p-6 hover:bg-purple-50 transition cursor-pointer"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="flex items-center space-x-4"> | |
<div class="w-12 h-12 rounded-full bg-indigo-100 flex items-center justify-center text-indigo-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
<div> | |
<h3 class="font-medium text-gray-800">David Wilson</h3> | |
<p class="text-sm text-gray-500">Last visit: 3 weeks ago</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Treatment Area</p> | |
<p class="font-medium">Back</p> | |
</div> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Sessions</p> | |
<p class="font-medium">6/6</p> | |
</div> | |
<div class="bg-indigo-100 text-indigo-800 px-3 py-1 rounded-full text-sm font-medium"> | |
Completed | |
</div> | |
<button class="text-gray-400 hover:text-indigo-600"> | |
<i class="fas fa-ellipsis-v"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
<!-- Client Card 5 --> | |
<div class="p-6 hover:bg-purple-50 transition cursor-pointer"> | |
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4"> | |
<div class="flex items-center space-x-4"> | |
<div class="w-12 h-12 rounded-full bg-amber-100 flex items-center justify-center text-amber-600 font-bold"> | |
<i class="fas fa-user"></i> | |
</div> | |
<div> | |
<h3 class="font-medium text-gray-800">Jennifer Lee</h3> | |
<p class="text-sm text-gray-500">Last visit: 1 month ago</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Treatment Area</p> | |
<p class="font-medium">Face</p> | |
</div> | |
<div class="hidden md:block"> | |
<p class="text-sm text-gray-500">Sessions</p> | |
<p class="font-medium">4/8</p> | |
</div> | |
<div class="bg-amber-100 text-amber-800 px-3 py-1 rounded-full text-sm font-medium"> | |
Paused | |
</div> | |
<button class="text-gray-400 hover:text-amber-600"> | |
<i class="fas fa-ellipsis-v"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</main> | |
<!-- Footer --> | |
<footer class="bg-white border-t border-gray-200 py-6"> | |
<div class="container mx-auto px-4"> | |
<div class="flex flex-col md:flex-row justify-between items-center"> | |
<div class="flex items-center space-x-2 mb-4 md:mb-0"> | |
<i class="fas fa-bolt text-purple-600"></i> | |
<span class="font-medium">Luminous Laser</span> | |
</div> | |
<div class="flex space-x-6"> | |
<a href="#" class="text-gray-500 hover:text-purple-600 transition">Privacy</a> | |
<a href="#" class="text-gray-500 hover:text-purple-600 transition">Terms</a> | |
<a href="#" class="text-gray-500 hover:text-purple-600 transition">Help</a> | |
</div> | |
<div class="mt-4 md:mt-0 text-sm text-gray-500"> | |
© 2023 Luminous Laser. All rights reserved. | |
</div> | |
</div> | |
</div> | |
</footer> | |
</div> | |
<script> | |
// Toggle calendar dropdown | |
const dateDropdownButton = document.getElementById('dateDropdownButton'); | |
const dateDropdown = document.getElementById('dateDropdown'); | |
dateDropdownButton.addEventListener('click', function() { | |
dateDropdown.classList.toggle('hidden'); | |
}); | |
// Close dropdown when clicking outside | |
document.addEventListener('click', function(event) { | |
if (!dateDropdownButton.contains(event.target) && !dateDropdown.contains(event.target)) { | |
dateDropdown.classList.add('hidden'); | |
} | |
}); | |
// Sample client data (would normally come from a database) | |
const clients = [ | |
{ name: "Sarah Johnson", lastVisit: "2 days ago", area: "Underarms", sessions: "3/6", status: "Active" }, | |
{ name: "Michael Chen", lastVisit: "1 week ago", area: "Full Legs", sessions: "5/8", status: "Follow-up" }, | |
{ name: "Emily Rodriguez", lastVisit: "Appointment today", area: "Brazilian", sessions: "2/6", status: "Today" }, | |
{ name: "David Wilson", lastVisit: "3 weeks ago", area: "Back", sessions: "6/6", status: "Completed" }, | |
{ name: "Jennifer Lee", lastVisit: "1 month ago", area: "Face", sessions: "4/8", status: "Paused" } | |
]; | |
// You would typically have more JavaScript here to: | |
// 1. Fetch client data from an API | |
// 2. Handle form submissions | |
// 3. Manage the calendar functionality | |
// 4. Implement search/filter functionality | |
</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=Cezarxil/client-app" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |