feat: complete user authentication, admin guard, customer account dashboard and branded HTML emails

This commit is contained in:
2026-11-01 13:55:45 +01:00
parent b6ee6938cb
commit ee89da5e61
37 changed files with 1895 additions and 22 deletions
+95
View File
@@ -0,0 +1,95 @@
@extends('layouts.app')
@section('title', 'Inloggen | Jouwdriedee.nl')
@section('content')
<div class="min-h-[70vh] flex items-center justify-center py-10 px-4 sm:px-6 lg:px-8">
<div class="w-full max-w-md space-y-6">
<!-- Header -->
<div class="text-center space-y-2">
<div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl bg-amber-100 text-amber-900 shadow-2xs mb-1">
<i data-lucide="log-in" class="w-6 h-6 text-amber-600"></i>
</div>
<h1 class="font-heading text-2xl sm:text-3xl font-black text-slate-900 tracking-tight">Welkom terug</h1>
<p class="text-xs text-slate-500">Log in met jouw e-mailadres en wachtwoord</p>
</div>
<!-- Form Card -->
<div class="p-6 sm:p-8 rounded-3xl bg-white border border-slate-200/80 shadow-lg space-y-5">
<form action="{{ route('login.submit') }}" method="POST" class="space-y-4">
@csrf
<!-- E-mailadres -->
<div class="space-y-1.5">
<label for="email" class="block text-xs font-bold text-slate-700">E-mailadres</label>
<div class="relative">
<input
type="email"
name="email"
id="email"
value="{{ old('email') }}"
required
autofocus
placeholder="jouw@email.nl"
class="w-full bg-slate-50 border border-slate-200 rounded-xl pl-9 pr-3.5 py-2.5 text-xs text-slate-900 font-semibold placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400 @error('email') border-rose-400 @enderror"
>
<i data-lucide="mail" class="w-4 h-4 text-slate-400 absolute left-3 top-1/2 -translate-y-1/2"></i>
</div>
@error('email')
<p class="text-[11px] font-bold text-rose-500 mt-1">{{ $message }}</p>
@enderror
</div>
<!-- Wachtwoord -->
<div class="space-y-1.5">
<div class="flex items-center justify-between">
<label for="password" class="block text-xs font-bold text-slate-700">Wachtwoord</label>
<a href="{{ route('password.request') }}" class="text-[11px] font-bold text-rose-600 hover:text-rose-700 transition">
Wachtwoord vergeten?
</a>
</div>
<div class="relative">
<input
type="password"
name="password"
id="password"
required
placeholder="••••••••"
class="w-full bg-slate-50 border border-slate-200 rounded-xl pl-9 pr-3.5 py-2.5 text-xs text-slate-900 font-semibold placeholder-slate-400 focus:bg-white focus:outline-none focus:ring-2 focus:ring-amber-400 @error('password') border-rose-400 @enderror"
>
<i data-lucide="lock" class="w-4 h-4 text-slate-400 absolute left-3 top-1/2 -translate-y-1/2"></i>
</div>
@error('password')
<p class="text-[11px] font-bold text-rose-500 mt-1">{{ $message }}</p>
@enderror
</div>
<!-- Onthoud mij -->
<div class="flex items-center justify-between pt-1">
<label class="flex items-center space-x-2 cursor-pointer">
<input type="checkbox" name="remember" value="1" class="w-4 h-4 rounded text-amber-500 focus:ring-amber-400 border-slate-300">
<span class="text-xs font-bold text-slate-600">Onthoud mij op dit apparaat</span>
</label>
</div>
<!-- Submit Button -->
<div class="pt-2">
<button type="submit" class="w-full py-3 px-5 rounded-2xl bg-amber-400 hover:bg-amber-300 text-slate-950 font-black text-xs sm:text-sm transition flex items-center justify-center space-x-2 shadow-xs cursor-pointer">
<span>Inloggen</span>
<i data-lucide="arrow-right" class="w-4 h-4"></i>
</button>
</div>
</form>
<div class="pt-4 border-t border-slate-100 text-center text-xs font-bold text-slate-600">
<span>Nog geen account?</span>
<a href="{{ route('register') }}" class="text-rose-600 hover:text-rose-700 underline ml-1">
Direct registreren
</a>
</div>
</div>
</div>
</div>
@endsection