Phase 2
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.
This commit is contained in:
201 files changed
+31984
No files matched your search
@@ -0,0 +1,191 @@
|
||||
<!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>Home — TrimTime</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<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: { ink: '#111b15', stone: '#f4f6f4', surface: '#ffffff', muted: '#6c7870', line: '#e1e7e2', accent: '#10b981' },
|
||||
fontFamily: { sans: ['Inter', 'sans-serif'] },
|
||||
borderRadius: { jumbo: '1.5rem', tile: '1rem' }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.no-scrollbar::-webkit-scrollbar { display: none; }
|
||||
.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-stone text-ink min-h-screen pb-32">
|
||||
|
||||
<!-- NOTE: This is the personalized, logged-in customer home. The public
|
||||
business-discovery page lives at "15-NextChair - Customer - Home.html"
|
||||
(mistitled in the original export — see docs/implementation-plan.md §2). -->
|
||||
|
||||
<!-- Header -->
|
||||
<header class="px-6 pt-12 pb-4 flex items-center justify-between">
|
||||
<div>
|
||||
<p class="text-xs text-muted font-medium">Good afternoon</p>
|
||||
<h1 class="text-2xl font-bold tracking-tight">Alex Chen</h1>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<button class="w-11 h-11 rounded-full bg-white border border-line flex items-center justify-center relative">
|
||||
<i class="fa-regular fa-bell text-ink"></i>
|
||||
<span class="absolute top-2 right-2.5 w-1.5 h-1.5 bg-accent rounded-full"></span>
|
||||
</button>
|
||||
<a href="10-NextChair - Customer - Setting.html">
|
||||
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-1.jpg" class="w-11 h-11 rounded-full border border-line object-cover" alt="Alex Chen">
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="px-6 space-y-6">
|
||||
|
||||
<!-- Upcoming Appointment Card -->
|
||||
<a href="25-NextChair - Customer - Appointment Details.html" class="block bg-ink text-white p-6 rounded-jumbo shadow-xl relative overflow-hidden">
|
||||
<div class="relative z-10">
|
||||
<div class="flex items-center justify-between mb-6">
|
||||
<span class="text-[10px] font-bold uppercase tracking-widest text-white/50">Your Next Visit</span>
|
||||
<span class="text-[10px] font-bold uppercase tracking-widest bg-accent/20 text-accent px-3 py-1 rounded-full">In 2 days</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-4 mb-6">
|
||||
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-3.jpg" class="w-14 h-14 rounded-full border-2 border-white/20" alt="Marcus Reed">
|
||||
<div>
|
||||
<h2 class="text-lg font-bold">Standard Cut</h2>
|
||||
<p class="text-sm text-white/60">with Marcus Reed</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center justify-between pt-5 border-t border-white/10">
|
||||
<div>
|
||||
<p class="text-sm font-bold">Sat, Oct 12 • 2:00 PM</p>
|
||||
<p class="text-[10px] text-white/50 uppercase tracking-widest mt-0.5">Blake Heritage Barbershop</p>
|
||||
</div>
|
||||
<div class="flex items-center gap-1 text-white/60 text-xs font-bold uppercase tracking-widest">
|
||||
Details <i class="fa-solid fa-chevron-right text-[10px]"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="absolute -right-10 -bottom-10 w-40 h-40 bg-accent/10 rounded-full blur-3xl"></div>
|
||||
</a>
|
||||
|
||||
<!-- Quick Actions -->
|
||||
<div class="grid grid-cols-2 gap-3">
|
||||
<a href="24-NextChair - Customer - Appointments Upcoming.html" class="bg-white border border-line rounded-jumbo p-5 flex flex-col gap-3 hover:border-ink transition-all">
|
||||
<div class="w-10 h-10 bg-stone rounded-xl flex items-center justify-center text-ink"><i class="fa-solid fa-rotate-right"></i></div>
|
||||
<span class="text-sm font-bold">Book Again</span>
|
||||
</a>
|
||||
<a href="15-NextChair - Customer - Home.html" class="bg-white border border-line rounded-jumbo p-5 flex flex-col gap-3 hover:border-ink transition-all">
|
||||
<div class="w-10 h-10 bg-stone rounded-xl flex items-center justify-center text-ink"><i class="fa-solid fa-plus"></i></div>
|
||||
<span class="text-sm font-bold">Book New</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Loyalty Teaser -->
|
||||
<a href="11-NextChair - Customer - Loyalty.html" class="block bg-white p-5 rounded-jumbo border border-line shadow-sm">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-10 h-10 bg-amber-50 rounded-xl flex items-center justify-center text-amber-500"><i class="fa-solid fa-award"></i></div>
|
||||
<div>
|
||||
<p class="text-sm font-bold">Loyalty Card</p>
|
||||
<p class="text-[11px] text-muted">3 more visits until your free cut</p>
|
||||
</div>
|
||||
</div>
|
||||
<i class="fa-solid fa-chevron-right text-[10px] text-muted"></i>
|
||||
</div>
|
||||
<div class="h-2 w-full bg-stone rounded-full overflow-hidden">
|
||||
<div class="bg-amber-500 h-full rounded-full" style="width: 70%;"></div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- Your Barbers -->
|
||||
<section>
|
||||
<div class="flex items-center justify-between mb-4 px-1">
|
||||
<h3 class="text-[10px] font-bold uppercase tracking-widest text-muted">Your Barbers</h3>
|
||||
<a href="15-NextChair - Customer - Home.html" class="text-[10px] font-bold uppercase tracking-widest text-ink border-b border-ink">See all</a>
|
||||
</div>
|
||||
<div class="flex gap-5 overflow-x-auto no-scrollbar">
|
||||
<div class="w-20 shrink-0 text-center">
|
||||
<div class="relative">
|
||||
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-3.jpg" class="w-20 h-20 rounded-full object-cover mb-2 border-2 border-accent" alt="Marcus Reed">
|
||||
<span class="absolute -bottom-1 right-1 bg-accent text-white text-[7px] font-bold uppercase px-1.5 py-0.5 rounded-full">Fave</span>
|
||||
</div>
|
||||
<p class="text-xs font-medium">Marcus</p>
|
||||
</div>
|
||||
<div class="w-20 shrink-0 text-center">
|
||||
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-4.jpg" class="w-20 h-20 rounded-full object-cover mb-2 border border-line" alt="Leo Vance">
|
||||
<p class="text-xs font-medium">Leo</p>
|
||||
</div>
|
||||
<div class="w-20 shrink-0 text-center">
|
||||
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-2.jpg" class="w-20 h-20 rounded-full object-cover mb-2 border border-line" alt="Sasha Gray">
|
||||
<p class="text-xs font-medium">Sasha</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Popular Services -->
|
||||
<section>
|
||||
<div class="flex items-center justify-between mb-4 px-1">
|
||||
<h3 class="text-[10px] font-bold uppercase tracking-widest text-muted">Popular Services</h3>
|
||||
<a href="15-NextChair - Customer - Home.html" class="text-[10px] font-bold uppercase tracking-widest text-ink border-b border-ink">See all</a>
|
||||
</div>
|
||||
<div class="bg-white rounded-jumbo border border-line divide-y divide-line overflow-hidden">
|
||||
<div class="px-5 py-4 flex items-center justify-between">
|
||||
<div>
|
||||
<p class="text-sm font-bold">Skinfade & Style</p>
|
||||
<p class="text-xs text-muted mt-0.5">30m</p>
|
||||
</div>
|
||||
<span class="text-sm font-bold">£25.00</span>
|
||||
</div>
|
||||
<div class="px-5 py-4 flex items-center justify-between">
|
||||
<div>
|
||||
<p class="text-sm font-bold">Haircut & Beard</p>
|
||||
<p class="text-xs text-muted mt-0.5">40m</p>
|
||||
</div>
|
||||
<span class="text-sm font-bold">£30.00</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Reviews Teaser -->
|
||||
<a href="15-NextChair - Customer - Home.html" class="flex items-center justify-between bg-white p-5 rounded-jumbo border border-line">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="flex items-center gap-1 text-amber-500 text-sm">
|
||||
<i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i><i class="fa-solid fa-star"></i>
|
||||
</div>
|
||||
<span class="text-sm font-bold">5.0</span>
|
||||
<span class="text-xs text-muted">· 1,142 reviews</span>
|
||||
</div>
|
||||
<i class="fa-solid fa-chevron-right text-[10px] text-muted"></i>
|
||||
</a>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Bottom Navigation -->
|
||||
<nav class="fixed bottom-0 left-0 right-0 z-50 bg-white border-t border-line py-2 px-5 flex justify-between items-center">
|
||||
<a href="23-NextChair - Customer - Home (Logged In).html" class="flex flex-col items-center gap-1 text-ink">
|
||||
<i class="fa-solid fa-house text-xl"></i>
|
||||
<span class="text-[10px] font-bold uppercase tracking-widest">Home</span>
|
||||
</a>
|
||||
<a href="24-NextChair - Customer - Appointments Upcoming.html" class="flex flex-col items-center gap-1 text-muted hover:text-ink transition-colors">
|
||||
<i class="fa-solid fa-calendar-check text-xl"></i>
|
||||
<span class="text-[10px] font-bold uppercase tracking-widest">Bookings</span>
|
||||
</a>
|
||||
<a href="10-NextChair - Customer - Setting.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>
|
||||
Reference in new issue
Block a user