Base app architecture:
Route groups for customer, staff and owner.
* Reusable design system with around 20 UI components.
* Complete Prisma schema.
* Authentication with email/password and Google.
* Role and permission model.
* Protected routes.
* Clean separation between features, services, components and shared utilities.
140 lines
6.4 KiB
HTML
Executable File
140 lines
6.4 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<script>
|
|
window.FontAwesomeConfig = {
|
|
autoReplaceSvg: 'nest'
|
|
};
|
|
</script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<title>Appointments</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: {
|
|
appbg: '#f8f9f8',
|
|
cardbg: '#ffffff',
|
|
ink: '#111b15',
|
|
muted: '#8a948e',
|
|
line: '#eaeaeb',
|
|
brandbtn: '#4887a0',
|
|
pillbg: '#e4e6e5'
|
|
},
|
|
fontFamily: { sans: ['Inter', 'sans-serif'] },
|
|
boxShadow: {
|
|
'card': '0 2px 10px rgba(0, 0, 0, 0.03)'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body class="bg-appbg text-ink min-h-screen pb-28 font-sans">
|
|
|
|
<!-- Header -->
|
|
<header class="px-5 py-6 bg-appbg sticky top-0 z-40">
|
|
<h1 class="text-3xl font-bold tracking-tight">Appointments</h1>
|
|
</header>
|
|
|
|
<main class="px-5 max-w-md mx-auto">
|
|
|
|
<!-- Section Header -->
|
|
<div class="py-4">
|
|
<h2 class="text-sm font-medium text-muted uppercase tracking-wide">Finished Appointments</h2>
|
|
</div>
|
|
|
|
<!-- Appointments List -->
|
|
<div class="space-y-4">
|
|
|
|
<!-- Appointment Card 1 -->
|
|
<div class="bg-cardbg rounded-2xl shadow-card p-4 flex">
|
|
<!-- Left Side Details -->
|
|
<div class="flex-1 pr-4">
|
|
<span class="inline-block px-3 py-1 bg-pillbg text-muted text-xs font-medium rounded-full mb-3">Finished</span>
|
|
|
|
<h3 class="text-[14px] font-semibold leading-tight text-ink mb-1">Haircut & Style (Skin fade/Taper not included)</h3>
|
|
<p class="text-sm text-muted mb-3">with Jay The Barber</p>
|
|
|
|
<button class="bg-brandbtn text-white px-5 py-2.5 rounded-lg text-sm font-medium hover:bg-opacity-90 transition-opacity">
|
|
Book again
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Right Side Date/Time -->
|
|
<div class="w-20 pl-4 border-l border-line flex flex-col items-center justify-center text-center">
|
|
<span class="text-[15px] text-ink mb-1">August</span>
|
|
<span class="text-4xl font-light text-ink mb-2">1</span>
|
|
<span class="text-[15px] text-ink">11:55</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Appointment Card 2 -->
|
|
<div class="bg-cardbg rounded-2xl shadow-card p-4 flex">
|
|
<!-- Left Side Details -->
|
|
<div class="flex-1 pr-4">
|
|
<span class="inline-block px-3 py-1 bg-pillbg text-muted text-xs font-medium rounded-full mb-3">Finished</span>
|
|
|
|
<h3 class="text-[14px] font-semibold leading-tight text-ink mb-1">Haircut & Style (Skin fade/Taper not included)</h3>
|
|
<p class="text-sm text-muted mb-3">with Jay The Barber</p>
|
|
|
|
<button class="bg-brandbtn text-white px-5 py-2.5 rounded-lg text-sm font-medium hover:bg-opacity-90 transition-opacity">
|
|
Book again
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Right Side Date/Time -->
|
|
<div class="w-20 pl-4 border-l border-line flex flex-col items-center justify-center text-center">
|
|
<span class="text-[15px] text-ink mb-1">June</span>
|
|
<span class="text-4xl font-light text-ink mb-2">17</span>
|
|
<span class="text-[15px] text-ink">10:00</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Appointment Card 3 -->
|
|
<div class="bg-cardbg rounded-2xl shadow-card p-4 flex">
|
|
<!-- Left Side Details -->
|
|
<div class="flex-1 pr-4">
|
|
<span class="inline-block px-3 py-1 bg-pillbg text-muted text-xs font-medium rounded-full mb-3">Cancelled</span>
|
|
|
|
<h3 class="text-[14px] font-semibold leading-tight text-ink mb-1">Haircut & Style (Skin fade/Taper not included)</h3>
|
|
<p class="text-sm text-muted mb-3">with Jay The Barber</p>
|
|
|
|
<button class="bg-brandbtn text-white px-5 py-2.5 rounded-lg text-sm font-medium hover:bg-opacity-90 transition-opacity">
|
|
Book again
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Right Side Date/Time -->
|
|
<div class="w-20 pl-4 border-l border-line flex flex-col items-center justify-center text-center">
|
|
<span class="text-[15px] text-ink mb-1">April</span>
|
|
<span class="text-4xl font-light text-ink mb-2">15</span>
|
|
<span class="text-[15px] text-ink">10:00</span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</main>
|
|
|
|
<!-- Bottom Navigation -->
|
|
<nav class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t border-line py-4 px-10 flex justify-between items-center">
|
|
<a href="Home__mobile.html" class="flex flex-col items-center gap-1 text-muted hover:text-ink transition-colors">
|
|
<i class="fa-solid fa-house text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Home</span>
|
|
</a>
|
|
<a href="Appointments__mobile.html" class="flex flex-col items-center gap-1 text-ink">
|
|
<i class="fa-solid fa-calendar-check text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Bookings</span>
|
|
</a>
|
|
<a href="Settings__mobile.html" class="flex flex-col items-center gap-1 text-muted hover:text-ink transition-colors">
|
|
<i class="fa-solid fa-user text-xl"></i>
|
|
<span class="text-[10px] font-bold uppercase tracking-widest">Settings</span>
|
|
</a>
|
|
</nav>
|
|
|
|
</body>
|
|
</html> |