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,90 @@
|
||||
<!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>Your Details — 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>
|
||||
</head>
|
||||
<body class="bg-stone text-ink min-h-screen pb-12">
|
||||
|
||||
<!-- NOTE: New step in the guest booking flow, inserted between
|
||||
"18-NextChair - Customer - Booking.html" (barber/date/time) and
|
||||
"9-NextChair - Customer - Review.html" (review). Previously the flow
|
||||
had no way to capture a guest's identity at all — see
|
||||
docs/implementation-plan.md §6. Logged-in customers skip this step
|
||||
entirely (their saved details are used on the Review screen). -->
|
||||
|
||||
<header class="px-6 py-6">
|
||||
<button onclick="history.back()" class="w-10 h-10 rounded-full border border-line flex items-center justify-center mb-8">
|
||||
<i class="fa-solid fa-arrow-left text-sm"></i>
|
||||
</button>
|
||||
<h1 class="text-3xl font-bold tracking-tight">Your Details</h1>
|
||||
<p class="text-muted mt-2">We'll use this to confirm your booking and send reminders.</p>
|
||||
</header>
|
||||
|
||||
<main class="px-6 space-y-6">
|
||||
<form class="space-y-4">
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold uppercase tracking-widest text-muted mb-2 ml-1">First Name</label>
|
||||
<input type="text" placeholder="Alex" class="w-full bg-white border border-line rounded-xl px-5 py-4 focus:ring-2 focus:ring-ink outline-none transition-all">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold uppercase tracking-widest text-muted mb-2 ml-1">Last Name</label>
|
||||
<input type="text" placeholder="Chen" class="w-full bg-white border border-line rounded-xl px-5 py-4 focus:ring-2 focus:ring-ink outline-none transition-all">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold uppercase tracking-widest text-muted mb-2 ml-1">Email Address</label>
|
||||
<input type="email" placeholder="name@example.com" class="w-full bg-white border border-line rounded-xl px-5 py-4 focus:ring-2 focus:ring-ink outline-none transition-all">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold uppercase tracking-widest text-muted mb-2 ml-1">Phone Number</label>
|
||||
<input type="tel" placeholder="+44 7700 900000" class="w-full bg-white border border-line rounded-xl px-5 py-4 focus:ring-2 focus:ring-ink outline-none transition-all">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Optional account creation -->
|
||||
<div class="bg-white rounded-jumbo border border-line p-5">
|
||||
<label class="flex items-start gap-3 cursor-pointer">
|
||||
<input type="checkbox" id="create-account-toggle" onchange="document.getElementById('password-field').classList.toggle('hidden', !this.checked)" class="mt-1 w-4 h-4 rounded border-line text-accent focus:ring-accent">
|
||||
<div>
|
||||
<span class="text-sm font-bold block">Create an account</span>
|
||||
<span class="text-xs text-muted">Track this booking, save your details for next time, and start earning loyalty stamps.</span>
|
||||
</div>
|
||||
</label>
|
||||
<div id="password-field" class="hidden mt-4 pt-4 border-t border-line">
|
||||
<label class="block text-[10px] font-bold uppercase tracking-widest text-muted mb-2 ml-1">Create a Password</label>
|
||||
<input type="password" placeholder="••••••••" class="w-full bg-stone border border-line rounded-xl px-5 py-4 focus:ring-2 focus:ring-ink outline-none transition-all">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-[10px] text-muted leading-relaxed px-1">
|
||||
By continuing, you agree to our <a href="#" class="underline">Terms of Service</a> and <a href="#" class="underline">Privacy Policy</a>. You can access this booking any time via a secure link sent to your email.
|
||||
</p>
|
||||
|
||||
<button onclick="location.href='9-NextChair - Customer - Review.html'" class="w-full bg-ink text-white py-5 rounded-full font-bold uppercase tracking-widest hover:bg-black transition-all shadow-lg shadow-ink/10">
|
||||
Continue to Review
|
||||
</button>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user