updates for admin area
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
@extends('layouts.account')
|
||||
@section('title','My bookings — BeatBook')
|
||||
@section('account-content')
|
||||
<div class="page-heading"><div><div class="eyebrow">Your account</div><h1>Bookings</h1><p>Your confirmed and pending events in one place.</p></div></div>
|
||||
<div class="panel table-panel"><div class="responsive-table"><table><thead><tr><th>DJ</th><th>Event date</th><th>Total</th><th>Deposit</th><th>Payment</th><th>Status</th></tr></thead><tbody>
|
||||
@forelse($bookings as $item)<tr><td><strong>{{ $item->djProfile?->stage_name ?? 'DJ' }}</strong></td><td>{{ optional($item->event_date)->format('j M Y') }}</td><td>£{{ number_format((float)$item->total,2) }}</td><td>£{{ number_format((float)$item->deposit,2) }}</td><td>{{ $item->paid_at ? 'Paid' : 'Outstanding' }}</td><td><span class="status-pill">{{ ucfirst($item->status) }}</span></td></tr>@empty<tr><td colspan="6"><div class="empty-state">No bookings yet.</div></td></tr>@endforelse
|
||||
</tbody></table></div></div>{{ $bookings->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,16 @@
|
||||
@extends('layouts.account')
|
||||
@section('title','Dashboard — BeatBook')
|
||||
@section('account-content')
|
||||
<div class="page-heading"><div><div class="eyebrow">Your account</div><h1>Welcome back, {{ Str::before($user->name, ' ') }}</h1><p>Manage your enquiries, bookings and account details.</p></div><a class="button" href="{{ route('djs.index') }}">Find a DJ</a></div>
|
||||
<div class="account-stats">
|
||||
@foreach($stats as $label => $value)<div class="account-stat"><span>{{ ucfirst($label) }}</span><strong>{{ $value }}</strong></div>@endforeach
|
||||
</div>
|
||||
<div class="dashboard-grid">
|
||||
<section class="panel"><div class="panel-head"><h2>Recent enquiries</h2><a href="{{ route('account.enquiries') }}">View all</a></div>
|
||||
@forelse($enquiries as $enquiry)<a class="list-row" href="{{ route('account.enquiries') }}"><div><strong>{{ $enquiry->djProfile?->stage_name ?? 'DJ' }}</strong><span>{{ $enquiry->event_type }} · {{ optional($enquiry->event_date)->format('j M Y') }}</span></div><span class="status-pill">{{ ucfirst($enquiry->status) }}</span></a>@empty<div class="empty-state">No enquiries yet. Find a DJ and send your first enquiry.</div>@endforelse
|
||||
</section>
|
||||
<section class="panel"><div class="panel-head"><h2>Bookings</h2><a href="{{ route('account.bookings') }}">View all</a></div>
|
||||
@forelse($bookings as $booking)<a class="list-row" href="{{ route('account.bookings') }}"><div><strong>{{ $booking->djProfile?->stage_name ?? 'DJ' }}</strong><span>{{ optional($booking->event_date)->format('j M Y') }} · £{{ number_format((float)$booking->total,2) }}</span></div><span class="status-pill">{{ ucfirst($booking->status) }}</span></a>@empty<div class="empty-state">You do not have any bookings yet.</div>@endforelse
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,8 @@
|
||||
@extends('layouts.account')
|
||||
@section('title','My enquiries — BeatBook')
|
||||
@section('account-content')
|
||||
<div class="page-heading"><div><div class="eyebrow">Your account</div><h1>Enquiries</h1><p>Track every enquiry you have sent to a DJ.</p></div><a class="button" href="{{ route('djs.index') }}">New enquiry</a></div>
|
||||
<div class="panel table-panel"><div class="responsive-table"><table><thead><tr><th>DJ</th><th>Event</th><th>Date</th><th>Venue</th><th>Budget</th><th>Status</th></tr></thead><tbody>
|
||||
@forelse($enquiries as $item)<tr><td><strong>{{ $item->djProfile?->stage_name ?? 'DJ' }}</strong></td><td>{{ $item->event_type }}</td><td>{{ optional($item->event_date)->format('j M Y') }}</td><td>{{ $item->venue }}</td><td>{{ $item->budget ? '£'.number_format((float)$item->budget,2) : '—' }}</td><td><span class="status-pill">{{ ucfirst($item->status) }}</span></td></tr>@empty<tr><td colspan="6"><div class="empty-state">No enquiries yet.</div></td></tr>@endforelse
|
||||
</tbody></table></div></div>{{ $enquiries->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,13 @@
|
||||
@extends('layouts.account')
|
||||
@section('title','Account details — BeatBook')
|
||||
@section('account-content')
|
||||
<div class="page-heading"><div><div class="eyebrow">Your account</div><h1>Account details</h1><p>Keep your contact information up to date.</p></div></div>
|
||||
<div class="panel form-panel"><form method="post" action="{{ route('account.profile.update') }}" class="settings-form">@csrf @method('PATCH')
|
||||
<label><span>Name</span><input name="name" value="{{ old('name',$user->name) }}" required></label>
|
||||
<label><span>Email</span><input type="email" name="email" value="{{ old('email',$user->email) }}" required></label>
|
||||
<label><span>Phone</span><input name="phone" value="{{ old('phone',$user->phone) }}"></label>
|
||||
<label class="check-line"><input type="checkbox" name="marketing_opt_in" value="1" @checked(old('marketing_opt_in',$user->marketing_opt_in))><span>Send me relevant BeatBook news and offers.</span></label>
|
||||
@if($errors->any())<div class="form-errors">@foreach($errors->all() as $error)<div>{{ $error }}</div>@endforeach</div>@endif
|
||||
<div><button class="button" type="submit">Save changes</button></div>
|
||||
</form></div>
|
||||
@endsection
|
||||
@@ -1,41 +1,12 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>BeatBook Admin</title>
|
||||
@vite(['resources/css/app.css'])
|
||||
</head>
|
||||
<body>
|
||||
<div class="admin">
|
||||
<aside class="sidebar">
|
||||
<a class="brand" href="{{ route('admin.dashboard') }}"><b>◉</b> BeatBook</a>
|
||||
<p class="muted">Administration</p>
|
||||
<a href="{{ route('admin.dashboard') }}">Dashboard</a>
|
||||
@foreach([
|
||||
'users' => 'Users', 'djs' => 'DJs & Businesses', 'clients' => 'Clients',
|
||||
'bookings' => 'Bookings', 'payments' => 'Payments', 'reviews' => 'Reviews',
|
||||
'messages' => 'Messages', 'notifications' => 'Notifications', 'support' => 'Support',
|
||||
'reports' => 'Reports', 'content' => 'Content', 'roles' => 'Roles & Permissions',
|
||||
'privacy' => 'Privacy', 'settings' => 'Settings'
|
||||
] as $key => $label)
|
||||
<a href="{{ route('admin.section', $key) }}">{{ $label }}</a>
|
||||
@endforeach
|
||||
<a href="{{ route('home') }}">Back to site</a>
|
||||
</aside>
|
||||
<main class="admin-main">
|
||||
<h1>Dashboard</h1>
|
||||
<p style="color:#64748b">Marketplace overview and moderation queue.</p>
|
||||
<div class="stats">
|
||||
@foreach($stats as $key => $value)
|
||||
<div class="stat"><span>{{ ucfirst($key) }}</span><strong>{{ number_format($value) }}</strong></div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="stat" style="margin-top:22px;min-height:330px">
|
||||
<h2>Operations</h2>
|
||||
<p style="color:#64748b">Revenue charts, recent bookings, verification requests, support tickets and review moderation plug into this dashboard.</p>
|
||||
</div>
|
||||
</main>
|
||||
@extends('layouts.admin')
|
||||
@section('title','Dashboard')
|
||||
@section('page-title','Dashboard')
|
||||
@section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Marketplace control centre</div><h1>Dashboard</h1><p>Live overview of users, DJs, bookings and moderation.</p></div></div>
|
||||
<div class="admin-stats">@foreach($stats as $key=>$value)<a class="admin-stat" href="{{ $key === 'pending reviews' ? route('admin.section','reviews') : ($key === 'djs' ? route('admin.section','djs') : ($key === 'bookings' ? route('admin.section','bookings') : route('admin.section','users'))) }}"><span>{{ ucfirst($key) }}</span><strong>{{ number_format($value) }}</strong><small>Open section →</small></a>@endforeach</div>
|
||||
<div class="admin-grid">
|
||||
<section class="admin-card"><div class="panel-head"><h2>Newest users</h2><a href="{{ route('admin.section','users') }}">Manage</a></div>@forelse($recentUsers as $user)<div class="admin-list-row"><div><strong>{{ $user->name }}</strong><span>{{ $user->email }}</span></div><span>{{ $user->created_at?->diffForHumans() }}</span></div>@empty<div class="empty-state">No users yet.</div>@endforelse</section>
|
||||
<section class="admin-card"><div class="panel-head"><h2>Latest enquiries</h2><a href="{{ route('admin.section','clients') }}">Clients</a></div>@forelse($recentEnquiries as $item)<div class="admin-list-row"><div><strong>{{ $item->user?->name }}</strong><span>{{ $item->djProfile?->stage_name }} · {{ $item->event_type }}</span></div><span class="status-pill">{{ ucfirst($item->status) }}</span></div>@empty<div class="empty-state">No enquiries yet.</div>@endforelse</section>
|
||||
<section class="admin-card admin-card-wide"><div class="panel-head"><h2>Recent bookings</h2><a href="{{ route('admin.section','bookings') }}">View all</a></div><div class="responsive-table"><table><thead><tr><th>Client</th><th>DJ</th><th>Date</th><th>Total</th><th>Status</th></tr></thead><tbody>@forelse($recentBookings as $item)<tr><td>{{ $item->client?->name }}</td><td>{{ $item->djProfile?->stage_name }}</td><td>{{ optional($item->event_date)->format('j M Y') }}</td><td>£{{ number_format((float)$item->total,2) }}</td><td><span class="status-pill">{{ ucfirst($item->status) }}</span></td></tr>@empty<tr><td colspan="5">No bookings yet.</td></tr>@endforelse</tbody></table></div></section>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@endsection
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Bookings') @section('page-title','Bookings') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Events</div><h1>Bookings</h1><p>All marketplace bookings and event values.</p></div><span class="metric-chip">{{ number_format($counts['bookings']) }} bookings</span></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>Client</th><th>DJ</th><th>Event date</th><th>Total</th><th>Deposit</th><th>Status</th></tr></thead><tbody>@forelse($bookings as $item)<tr><td>{{ $item->client?->name }}</td><td>{{ $item->djProfile?->stage_name }}</td><td>{{ optional($item->event_date)->format('j M Y') }}</td><td>£{{ number_format((float)$item->total,2) }}</td><td>£{{ number_format((float)$item->deposit,2) }}</td><td><span class="status-pill">{{ ucfirst($item->status) }}</span></td></tr>@empty<tr><td colspan="6">No bookings yet.</td></tr>@endforelse</tbody></table></div></div>{{ $bookings->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Clients') @section('page-title','Clients') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Customers</div><h1>Clients</h1><p>Review client activity across enquiries and bookings.</p></div><span class="metric-chip">{{ number_format($counts['clients']) }} clients</span></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>Client</th><th>Phone</th><th>Enquiries</th><th>Bookings</th><th>Joined</th></tr></thead><tbody>@forelse($clients as $client)<tr><td><strong>{{ $client->name }}</strong><small>{{ $client->email }}</small></td><td>{{ $client->phone ?: '—' }}</td><td>{{ $client->enquiries_count }}</td><td>{{ $client->bookings_count }}</td><td>{{ $client->created_at?->format('j M Y') }}</td></tr>@empty<tr><td colspan="5">No clients yet.</td></tr>@endforelse</tbody></table></div></div>{{ $clients->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Content') @section('page-title','Content') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Website</div><h1>Content</h1><p>Public-site content and marketplace presentation.</p></div></div>
|
||||
<div class="settings-grid"><a class="admin-card action-card" href="{{ route('home') }}"><h2>Homepage</h2><p>Review hero, featured DJs, how it works and DJ proposition.</p><span>Open page →</span></a><a class="admin-card action-card" href="{{ route('djs.index') }}"><h2>DJ directory</h2><p>Review public listings, filtering and profile presentation.</p><span>Open directory →</span></a><a class="admin-card action-card" href="{{ route('privacy') }}"><h2>Legal content</h2><p>Review privacy, cookie and terms content.</p><span>Open privacy →</span></a></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','DJs & businesses') @section('page-title','DJs & businesses') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Marketplace supply</div><h1>DJs & businesses</h1><p>Control visibility and featured placement.</p></div><span class="metric-chip">{{ number_format($counts['djs']) }} profiles</span></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>DJ</th><th>Owner</th><th>City</th><th>Price</th><th>Published</th><th>Featured</th></tr></thead><tbody>@forelse($djs as $dj)<tr><td><strong>{{ $dj->stage_name }}</strong><small>{{ $dj->business?->name ?: 'Independent' }}</small></td><td>{{ $dj->user?->email }}</td><td>{{ $dj->city }}</td><td>{{ $dj->price_from ? '£'.number_format((float)$dj->price_from) : '—' }}</td><td><form method="post" action="{{ route('admin.djs.published',$dj) }}">@csrf @method('PATCH')<button class="toggle-button {{ $dj->is_published ? 'on' : '' }}" type="submit">{{ $dj->is_published ? 'Published' : 'Hidden' }}</button></form></td><td><form method="post" action="{{ route('admin.djs.featured',$dj) }}">@csrf @method('PATCH')<button class="toggle-button {{ $dj->is_featured ? 'on' : '' }}" type="submit">{{ $dj->is_featured ? 'Featured' : 'Standard' }}</button></form></td></tr>@empty<tr><td colspan="6">No DJ profiles yet.</td></tr>@endforelse</tbody></table></div></div>{{ $djs->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Messages') @section('page-title','Messages') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Communication</div><h1>Messages</h1><p>Marketplace messaging will appear here once conversations are created.</p></div></div>
|
||||
<div class="admin-card"><div class="feature-empty"><div class="feature-icon">✉</div><h2>No conversations yet</h2><p>Enquiry messaging can be added here without exposing private contact details between clients and DJs.</p><a class="admin-button" href="{{ route('admin.section','clients') }}">View clients</a></div></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Notifications') @section('page-title','Notifications') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Delivery</div><h1>Notifications</h1><p>System alerts and delivery health.</p></div></div>
|
||||
<div class="settings-grid"><div class="admin-card"><h2>Notification channels</h2><div class="settings-list"><div><strong>Email</strong><span>Laravel mail channel</span><span class="status-pill">Configured</span></div><div><strong>Database</strong><span>In-app notifications</span><span class="status-pill">Ready</span></div></div></div><div class="admin-card"><h2>Recommended events</h2><p class="admin-muted">Booking confirmation, new enquiry, review request, payment receipt and support replies can be delivered from this area.</p></div></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Payments') @section('page-title','Payments') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Finance</div><h1>Payments</h1><p>Payment state and booking value overview.</p></div></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>Booking</th><th>Client</th><th>DJ</th><th>Total</th><th>Deposit</th><th>Payment</th></tr></thead><tbody>@forelse($bookings as $item)<tr><td>{{ Str::limit($item->id,10,'…') }}</td><td>{{ $item->client?->name }}</td><td>{{ $item->djProfile?->stage_name }}</td><td>£{{ number_format((float)$item->total,2) }}</td><td>£{{ number_format((float)$item->deposit,2) }}</td><td><span class="status-pill">{{ $item->paid_at ? 'Paid' : 'Outstanding' }}</span></td></tr>@empty<tr><td colspan="6">No payment records yet.</td></tr>@endforelse</tbody></table></div></div>{{ $bookings->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Privacy') @section('page-title','Privacy') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Compliance</div><h1>Privacy</h1><p>Quick access to the public legal policies and privacy controls.</p></div></div>
|
||||
<div class="settings-grid"><a class="admin-card action-card" href="{{ route('privacy') }}"><h2>Privacy policy</h2><p>Review the current public privacy policy.</p><span>Open policy →</span></a><a class="admin-card action-card" href="{{ route('cookies') }}"><h2>Cookie policy</h2><p>Review necessary, analytics and marketing cookie information.</p><span>Open policy →</span></a><a class="admin-card action-card" href="{{ route('terms') }}"><h2>Terms</h2><p>Review marketplace terms shown to users.</p><span>Open terms →</span></a></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Reports') @section('page-title','Reports') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Performance</div><h1>Reports</h1><p>Marketplace totals calculated from live BeatBook data.</p></div></div>
|
||||
<div class="admin-stats"><div class="admin-stat"><span>Booking value</span><strong>£{{ number_format((float)$report['booking_value'],2) }}</strong></div><div class="admin-stat"><span>Deposits</span><strong>£{{ number_format((float)$report['deposits'],2) }}</strong></div><div class="admin-stat"><span>Published DJs</span><strong>{{ $report['published_djs'] }}</strong></div><div class="admin-stat"><span>Pending reviews</span><strong>{{ $report['pending_reviews'] }}</strong></div></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Reviews') @section('page-title','Reviews') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Trust & safety</div><h1>Reviews</h1><p>Moderate feedback before it appears publicly.</p></div><span class="metric-chip">{{ number_format($counts['reviews']) }} reviews</span></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>Reviewer</th><th>DJ</th><th>Rating</th><th>Review</th><th>Status</th><th>Moderate</th></tr></thead><tbody>@forelse($reviews as $review)<tr><td>{{ $review->user?->name }}</td><td>{{ $review->djProfile?->stage_name }}</td><td>★ {{ $review->rating }}/5</td><td><strong>{{ $review->title ?: 'Review' }}</strong><small>{{ Str::limit($review->body,80) }}</small></td><td><span class="status-pill">{{ ucfirst($review->status) }}</span></td><td><form class="inline-controls" method="post" action="{{ route('admin.reviews.status',$review) }}">@csrf @method('PATCH')<select name="status"><option value="pending" @selected($review->status==='pending')>Pending</option><option value="published" @selected($review->status==='published')>Published</option><option value="rejected" @selected($review->status==='rejected')>Rejected</option></select><button class="admin-button">Save</button></form></td></tr>@empty<tr><td colspan="6">No reviews yet.</td></tr>@endforelse</tbody></table></div></div>{{ $reviews->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Roles & permissions') @section('page-title','Roles & permissions') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Access control</div><h1>Roles & permissions</h1><p>Roles currently available to BeatBook accounts.</p></div></div>
|
||||
<div class="role-grid">@foreach($roles as $role)<div class="admin-card"><span class="role-badge">{{ $role->name }}</span><strong class="role-count">{{ $role->users_count }}</strong><p>{{ Str::plural('user',$role->users_count) }}</p></div>@endforeach</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Settings') @section('page-title','Settings') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Application</div><h1>Settings</h1><p>Operational controls for the BeatBook installation.</p></div></div>
|
||||
<div class="settings-grid"><div class="admin-card"><h2>Environment</h2><div class="settings-list"><div><strong>Application</strong><span>{{ config('app.name') }}</span></div><div><strong>Environment</strong><span>{{ app()->environment() }}</span></div><div><strong>URL</strong><span>{{ config('app.url') }}</span></div></div></div><div class="admin-card"><h2>Maintenance</h2><p class="admin-muted">Clear application cache after configuration or content changes.</p><form method="post" action="{{ route('admin.settings.clear-cache') }}">@csrf<button class="admin-button" type="submit">Clear application cache</button></form></div></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Support') @section('page-title','Support') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">Customer care</div><h1>Support</h1><p>Central area for customer and DJ support cases.</p></div></div>
|
||||
<div class="admin-card"><div class="feature-empty"><div class="feature-icon">?</div><h2>No open support cases</h2><p>The support queue is ready for a ticket model and inbound support form when you enable that workflow.</p></div></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,4 @@
|
||||
@extends('layouts.admin') @section('title','Users') @section('page-title','Users') @section('content')
|
||||
<div class="page-heading admin-heading"><div><div class="eyebrow">People</div><h1>Users</h1><p>Manage accounts and assign marketplace roles.</p></div><span class="metric-chip">{{ number_format($counts['users']) }} users</span></div>
|
||||
<div class="admin-card table-card"><div class="responsive-table"><table><thead><tr><th>User</th><th>Role</th><th>Joined</th><th>Change role</th></tr></thead><tbody>@foreach($users as $user)<tr><td><strong>{{ $user->name }}</strong><small>{{ $user->email }}</small></td><td>{{ $user->getRoleNames()->join(', ') ?: 'No role' }}</td><td>{{ $user->created_at?->format('j M Y') }}</td><td><form class="inline-controls" method="post" action="{{ route('admin.users.role',$user) }}">@csrf @method('PATCH')<select name="role">@foreach(['client','dj','support','moderator','admin','super-admin'] as $role)<option value="{{ $role }}" @selected($user->hasRole($role))>{{ ucfirst($role) }}</option>@endforeach</select><button class="admin-button" type="submit">Save</button></form></td></tr>@endforeach</tbody></table></div></div>{{ $users->links() }}
|
||||
@endsection
|
||||
@@ -1 +1 @@
|
||||
<article class="card"><div class="card-img" style="background-image:url('{{ $dj->profile_photo ?: 'https://images.unsplash.com/photo-1571266028243-d220c9c3b2d2?auto=format&fit=crop&w=700&q=80' }}')"></div><div class="card-body"><h3>{{ $dj->stage_name }} @if($dj->verified_at) ✓ @endif</h3><div class="stars">★★★★★ <span class="muted">{{ number_format($dj->average_rating,1) }} ({{ $dj->review_count }})</span></div><p class="muted">{{ $dj->city }} · {{ $dj->headline }}</p><div class="price">From £{{ number_format($dj->price_from,0) }}</div><a class="button" href="{{ route('djs.show',$dj) }}">View profile</a></div></article>
|
||||
<article class="card dj-card"><a class="card-img" href="{{ route('djs.show',$dj) }}" style="background-image:url('{{ $dj->profile_photo ?: 'https://images.unsplash.com/photo-1571266028243-d220c9c3b2d2?auto=format&fit=crop&w=900&q=82' }}')"></a><div class="card-body"><div class="card-title-line"><h3>{{ $dj->stage_name }}</h3>@if($dj->verified_at)<span class="verified" title="Verified">✓</span>@endif</div><div class="stars">★★★★★ <span>{{ number_format($dj->average_rating,1) }} ({{ $dj->review_count }})</span></div><p>{{ $dj->city }}@if($dj->headline) · {{ Str::limit($dj->headline,48) }}@endif</p><div class="card-foot"><strong>{{ $dj->price_from ? 'From £'.number_format($dj->price_from,0) : 'Ask for a quote' }}</strong><a href="{{ route('djs.show',$dj) }}">View profile →</a></div></div></article>
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
@extends('layouts.app') @section('title','Find DJs — BeatBook') @section('content')<main class="section"><div class="shell"><div class="eyebrow">Discover</div><h1 style="font-size:48px">Find your DJ</h1><form class="searchbox" style="margin:25px 0 35px"><input name="location" value="{{ request('location') }}" placeholder="Town or city"><input name="max_price" type="number" value="{{ request('max_price') }}" placeholder="Maximum price"><select><option>Highest rated</option></select><button class="button">Filter</button></form><div class="cards">@foreach($djs as $dj) @include('djs._card') @endforeach</div><div style="margin-top:30px">{{ $djs->links() }}</div></div></main>@endsection
|
||||
@extends('layouts.app')
|
||||
@section('title','Find DJs — BeatBook')
|
||||
@section('content')
|
||||
<main class="directory-page"><div class="shell"><div class="directory-heading"><div><div class="eyebrow">Discover</div><h1>Find your DJ</h1><p>Search trusted DJs by location and budget.</p></div><span class="results-count">{{ $djs->total() }} {{ Str::plural('DJ',$djs->total()) }}</span></div>
|
||||
<form class="filterbar" method="get"><label><span>Location</span><input name="location" value="{{ request('location') }}" placeholder="Town or city"></label><label><span>Maximum price</span><input name="max_price" type="number" min="0" value="{{ request('max_price') }}" placeholder="Any budget"></label><label><span>Sort</span><select name="sort"><option value="rating" @selected(request('sort')==='rating')>Highest rated</option><option value="price_low" @selected(request('sort')==='price_low')>Price: low to high</option><option value="price_high" @selected(request('sort')==='price_high')>Price: high to low</option></select></label><button class="button" type="submit">Apply filters</button></form>
|
||||
<div class="cards dj-cards directory-cards">@forelse($djs as $dj) @include('djs._card') @empty <div class="empty-state directory-empty"><h2>No DJs matched your search</h2><p>Try removing a filter or searching a nearby town.</p><a class="button ghost" href="{{ route('djs.index') }}">Clear filters</a></div>@endforelse</div><div class="pagination-wrap">{{ $djs->withQueryString()->links() }}</div></div></main>
|
||||
@endsection
|
||||
|
||||
@@ -1 +1,8 @@
|
||||
@extends('layouts.app') @section('title',$dj->stage_name.' — BeatBook') @section('content')<div class="profile-hero" style="background-image:linear-gradient(#0002,#0008),url('{{ $dj->cover_photo ?: $dj->profile_photo }}')"></div><main class="shell"><section class="profile-panel"><img class="avatar" src="{{ $dj->profile_photo }}" alt="{{ $dj->stage_name }}"><div><h1 style="margin:0">{{ $dj->stage_name }} @if($dj->verified_at)<span style="color:#2563eb">✓</span>@endif</h1><div class="stars">★★★★★ <span style="color:#64748b">{{ $dj->average_rating }} · {{ $dj->review_count }} reviews</span></div><p>{{ $dj->headline }}</p><div class="chips">@foreach($dj->genres as $genre)<span class="chip">{{ $genre->name }}</span>@endforeach</div></div><aside><span>From</span><div style="font-size:34px;font-weight:900">£{{ number_format($dj->price_from,0) }}</div><span>per event</span><br><br><a class="button" href="#enquire">Request a quote</a></aside></section><section class="section" style="padding-top:15px"><div style="display:grid;grid-template-columns:2fr 1fr;gap:35px"><div><h2>About {{ $dj->stage_name }}</h2><p class="muted" style="font-size:17px;line-height:1.8">{{ $dj->bio }}</p><h2>Reviews</h2>@foreach($dj->reviews as $review)<div class="card" style="padding:20px;margin-bottom:12px"><div class="stars">{{ str_repeat('★',$review->rating) }}</div><h3>{{ $review->title }}</h3><p>{{ $review->body }}</p></div>@endforeach</div><aside id="enquire" class="card" style="padding:22px;height:max-content"><h2>Check availability</h2>@auth<form method="post" action="{{ route('enquiries.store',$dj) }}">@csrf<input name="event_type" placeholder="Event type" required style="width:100%;padding:12px;margin:5px 0"><input name="event_date" type="date" required style="width:100%;padding:12px;margin:5px 0"><input name="venue" placeholder="Venue / town" required style="width:100%;padding:12px;margin:5px 0"><input name="budget" type="number" placeholder="Budget £" style="width:100%;padding:12px;margin:5px 0"><textarea name="message" required placeholder="Tell the DJ about your event" style="width:100%;min-height:130px;padding:12px;margin:5px 0"></textarea><button class="button">Send enquiry</button></form>@else<p class="muted">Sign in to send a secure enquiry.</p><a class="button" href="{{ route('login') }}">Sign in</a>@endauth</aside></div></section></main>@endsection
|
||||
@extends('layouts.app')
|
||||
@section('title',$dj->stage_name.' — BeatBook')
|
||||
@section('content')
|
||||
<div class="profile-hero" style="background-image:linear-gradient(180deg,rgba(7,10,25,.1),rgba(7,10,25,.78)),url('{{ $dj->cover_photo ?: $dj->profile_photo }}')"></div>
|
||||
<main class="shell profile-shell"><section class="profile-panel"><img class="avatar" src="{{ $dj->profile_photo }}" alt="{{ $dj->stage_name }}"><div class="profile-summary"><div class="profile-title"><h1>{{ $dj->stage_name }}</h1>@if($dj->verified_at)<span class="verified large">✓</span>@endif</div><div class="stars">★★★★★ <span>{{ $dj->average_rating }} · {{ $dj->review_count }} reviews</span></div><p>{{ $dj->headline }}</p><div class="chips">@foreach($dj->genres as $genre)<span class="chip">{{ $genre->name }}</span>@endforeach</div></div><aside class="profile-price"><span>From</span><strong>£{{ number_format($dj->price_from,0) }}</strong><small>per event</small><a class="button" href="#enquire">Request a quote</a></aside></section>
|
||||
<div class="profile-grid"><section class="profile-main"><div class="profile-section"><h2>About {{ $dj->stage_name }}</h2><p class="profile-bio">{{ $dj->bio }}</p></div><div class="profile-section"><div class="panel-head"><h2>Reviews</h2><span>{{ $dj->review_count }} total</span></div>@forelse($dj->reviews->where('status','published') as $review)<article class="review-card"><div class="stars">{{ str_repeat('★',$review->rating) }}</div><h3>{{ $review->title }}</h3><p>{{ $review->body }}</p></article>@empty<div class="empty-state">No published reviews yet.</div>@endforelse</div></section>
|
||||
<aside id="enquire" class="enquiry-card"><h2>Check availability</h2><p>Tell {{ $dj->stage_name }} about your event.</p>@auth<form class="enquiry-form" method="post" action="{{ route('enquiries.store',$dj) }}">@csrf<label><span>Event type</span><input name="event_type" placeholder="Wedding, party…" required></label><label><span>Event date</span><input name="event_date" type="date" required></label><label><span>Venue / town</span><input name="venue" required></label><label><span>Budget</span><input name="budget" type="number" placeholder="£"></label><label><span>Event details</span><textarea name="message" required placeholder="Guests, timings, music, venue details…"></textarea></label><button class="button full" type="submit">Send enquiry</button></form>@else<p class="muted">Sign in to send a secure enquiry.</p><a class="button full" href="{{ route('login') }}">Sign in to enquire</a>@endauth</aside></div></main>
|
||||
@endsection
|
||||
|
||||
@@ -1 +1,8 @@
|
||||
@extends('layouts.app') @section('content')<section class="hero"><div class="shell hero-copy"><div class="eyebrow">Music creates memories</div><h1>Find your <span>perfect DJ</span></h1><p>Discover trusted DJs for weddings, parties, corporate events and clubs. Compare profiles, reviews and prices, then enquire with confidence.</p><form class="searchbox" action="{{ route('djs.index') }}"><input name="location" placeholder="Town or postcode"><select name="event_type"><option value="">Event type</option><option>Wedding</option><option>Party</option><option>Corporate</option><option>Club</option></select><input type="date" name="date"><button class="button">Search DJs</button></form></div></section><section class="section"><div class="shell"><div class="section-head"><div><div class="eyebrow">Top talent</div><h2>Featured DJs</h2></div><a class="button ghost" href="{{ route('djs.index') }}">View all DJs</a></div><div class="cards">@forelse($featured as $dj) @include('djs._card',['dj'=>$dj]) @empty @foreach([['DJ Luna','London',350,'photo-1516280440614-37939bbacd81'],['DJ Maverick','Manchester',400,'photo-1571266028243-d220c9c3b2d2'],['DJ Rhythm','Birmingham',300,'photo-1524368535928-5b5e00ddc76b'],['DJ Serenity','Leeds',320,'photo-1506157786151-b8491531f063']] as $d)<article class="card"><div class="card-img" style="background-image:url('https://images.unsplash.com/{{ $d[3] }}?auto=format&fit=crop&w=700&q=80')"></div><div class="card-body"><h3>{{ $d[0] }}</h3><div class="stars">★★★★★ <span class="muted">4.9</span></div><p class="muted">{{ $d[1] }} · Weddings · Parties</p><div class="price">From £{{ $d[2] }}</div><a class="button" href="{{ route('djs.index') }}">View profile</a></div></article>@endforeach @endforelse</div></div></section><section id="how" class="section" style="background:#0d1228"><div class="shell"><div class="eyebrow">Simple & secure</div><h2>From search to dance floor</h2><div class="cards" style="margin-top:30px">@foreach(['Search'=>'Find DJs by location, date, event and budget.','Compare'=>'Review portfolios, pricing and verified feedback.','Enquire'=>'Send your event details without exposing private contact data.','Book & review'=>'Confirm securely and review after the event.'] as $a=>$b)<div class="card"><div class="card-body"><h3>{{ $a }}</h3><p class="muted">{{ $b }}</p></div></div>@endforeach</div></div></section><section id="for-djs" class="section"><div class="shell"><div class="section-head"><div><div class="eyebrow">For professionals</div><h2>Grow your DJ business</h2></div></div><div class="cards"><div class="card"><div class="card-body"><h3>Professional profile</h3><p class="muted">Show your sound, experience, service area and pricing in one trusted profile.</p></div></div><div class="card"><div class="card-body"><h3>Qualified enquiries</h3><p class="muted">Receive structured event details so you can quote quickly and accurately.</p></div></div><div class="card"><div class="card-body"><h3>Verified reviews</h3><p class="muted">Build reputation from completed BeatBook bookings.</p></div></div><div class="card"><div class="card-body"><h3>Business tools</h3><p class="muted">Manage bookings, payments and customer communication from your dashboard.</p></div></div></div></div></section><section id="pricing" class="section" style="background:#0d1228"><div class="shell"><div class="eyebrow">Straightforward pricing</div><h2>Built for clients and DJs</h2><p class="muted" style="max-width:720px">Browsing and creating a client account is free. DJ subscription and payment options can be configured from the BeatBook billing area as the marketplace launches.</p></div></section>@endsection
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<section class="hero"><div class="hero-shade"></div><div class="shell hero-layout"><div class="hero-copy"><div class="eyebrow">Music creates memories</div><h1>Find the DJ that <span>fits your night.</span></h1><p>Discover trusted professionals for weddings, parties, corporate events and clubs. Compare profiles, reviews and prices, then enquire directly.</p><form class="searchbox" action="{{ route('djs.index') }}"><label><span>Where?</span><input name="location" placeholder="Town or postcode"></label><label><span>Event</span><select name="event_type"><option value="">Any event</option><option>Wedding</option><option>Party</option><option>Corporate</option><option>Club</option></select></label><label><span>Date</span><input type="date" name="date"></label><button class="button" type="submit">Search DJs</button></form><div class="hero-proof"><span>✓ Verified profiles</span><span>✓ Genuine reviews</span><span>✓ Secure enquiries</span></div></div></div></section>
|
||||
<section class="section"><div class="shell"><div class="section-head"><div><div class="eyebrow">Top talent</div><h2>Featured DJs</h2><p>Standout professionals ready for your next event.</p></div><a class="button ghost" href="{{ route('djs.index') }}">Browse all DJs</a></div><div class="cards dj-cards">@forelse($featured as $dj) @include('djs._card',['dj'=>$dj]) @empty @foreach([['DJ Luna','London',350,'photo-1516280440614-37939bbacd81'],['DJ Maverick','Manchester',400,'photo-1571266028243-d220c9c3b2d2'],['DJ Rhythm','Birmingham',300,'photo-1524368535928-5b5e00ddc76b'],['DJ Serenity','Leeds',320,'photo-1506157786151-b8491531f063']] as $d)<article class="card dj-card"><div class="card-img" style="background-image:url('https://images.unsplash.com/{{ $d[3] }}?auto=format&fit=crop&w=900&q=82')"></div><div class="card-body"><div class="card-title-line"><h3>{{ $d[0] }}</h3><span class="verified">✓</span></div><div class="stars">★★★★★ <span>4.9</span></div><p>{{ $d[1] }} · Weddings · Parties</p><div class="card-foot"><strong>From £{{ $d[2] }}</strong><a href="{{ route('djs.index') }}">View profile →</a></div></div></article>@endforeach @endforelse</div></div></section>
|
||||
<section id="how" class="section section-alt"><div class="shell"><div class="section-intro"><div class="eyebrow">Simple & secure</div><h2>From search to dance floor</h2><p>BeatBook keeps finding and booking entertainment straightforward.</p></div><div class="steps">@foreach([['01','Search','Find DJs by location, event and budget.'],['02','Compare','See experience, pricing and verified feedback.'],['03','Enquire','Share your event details securely.'],['04','Book','Confirm your event and review afterwards.']] as $step)<div class="step-card"><span>{{ $step[0] }}</span><h3>{{ $step[1] }}</h3><p>{{ $step[2] }}</p></div>@endforeach</div></div></section>
|
||||
<section id="for-djs" class="section"><div class="shell split-feature"><div><div class="eyebrow">For professionals</div><h2>Turn more enquiries into bookings.</h2><p class="lead">Build a trusted profile, receive structured leads and manage your work from one place.</p><a class="button" href="{{ route('register') }}">Join as a DJ</a></div><div class="feature-list"><div><strong>Professional presence</strong><span>Show your music, experience, service area and pricing.</span></div><div><strong>Better enquiries</strong><span>Get the event details you need before you quote.</span></div><div><strong>Reputation</strong><span>Build trust with reviews from completed bookings.</span></div><div><strong>One dashboard</strong><span>Keep enquiries, bookings and account details together.</span></div></div></div></section>
|
||||
<section id="pricing" class="section pricing-section"><div class="shell pricing-box"><div><div class="eyebrow">Straightforward pricing</div><h2>Free for clients. Built to grow with DJs.</h2><p>Clients can browse and enquire without a subscription. DJ plans and payment services can be introduced as the marketplace grows.</p></div><a class="button ghost" href="{{ route('register') }}">Create an account</a></div></section>
|
||||
@endsection
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<main class="account-page">
|
||||
<div class="shell account-shell">
|
||||
<aside class="account-sidebar">
|
||||
<div class="account-person">
|
||||
<div class="account-avatar">{{ strtoupper(substr(auth()->user()->name,0,1)) }}</div>
|
||||
<div><strong>{{ auth()->user()->name }}</strong><span>{{ auth()->user()->email }}</span></div>
|
||||
</div>
|
||||
<nav class="account-nav">
|
||||
<a class="{{ request()->routeIs('dashboard') ? 'active' : '' }}" href="{{ route('dashboard') }}">Overview</a>
|
||||
<a class="{{ request()->routeIs('account.enquiries') ? 'active' : '' }}" href="{{ route('account.enquiries') }}">Enquiries</a>
|
||||
<a class="{{ request()->routeIs('account.bookings') ? 'active' : '' }}" href="{{ route('account.bookings') }}">Bookings</a>
|
||||
<a class="{{ request()->routeIs('account.profile*') ? 'active' : '' }}" href="{{ route('account.profile') }}">Account details</a>
|
||||
@if(auth()->user()->hasAnyRole(['admin','super-admin']))
|
||||
<a href="{{ route('admin.dashboard') }}">Administration</a>
|
||||
@endif
|
||||
</nav>
|
||||
</aside>
|
||||
<section class="account-content">@yield('account-content')</section>
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
@@ -0,0 +1,47 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<title>@yield('title', 'Administration') — BeatBook</title>
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
<body class="admin-body">
|
||||
<div class="admin-shell">
|
||||
<aside class="admin-sidebar" id="adminSidebar">
|
||||
<div class="admin-sidebar-head">
|
||||
<a class="brand" href="{{ route('admin.dashboard') }}"><b>◉</b> BeatBook</a>
|
||||
<button class="icon-button admin-close" type="button" data-admin-close aria-label="Close menu">×</button>
|
||||
</div>
|
||||
<div class="admin-kicker">Administration</div>
|
||||
<nav class="admin-nav">
|
||||
<a class="{{ request()->routeIs('admin.dashboard') ? 'active' : '' }}" href="{{ route('admin.dashboard') }}">Overview</a>
|
||||
@foreach([
|
||||
'users' => 'Users', 'djs' => 'DJs & businesses', 'clients' => 'Clients', 'bookings' => 'Bookings',
|
||||
'payments' => 'Payments', 'reviews' => 'Reviews', 'messages' => 'Messages', 'notifications' => 'Notifications',
|
||||
'support' => 'Support', 'reports' => 'Reports', 'content' => 'Content', 'roles' => 'Roles & permissions',
|
||||
'privacy' => 'Privacy', 'settings' => 'Settings'
|
||||
] as $key => $label)
|
||||
<a class="{{ request()->is('admin/'.$key) ? 'active' : '' }}" href="{{ route('admin.section', $key) }}">{{ $label }}</a>
|
||||
@endforeach
|
||||
</nav>
|
||||
<div class="admin-sidebar-foot">
|
||||
<a href="{{ route('home') }}">View public site</a>
|
||||
<a href="{{ route('dashboard') }}">My account</a>
|
||||
<form method="post" action="{{ route('logout') }}">@csrf<button type="submit">Sign out</button></form>
|
||||
</div>
|
||||
</aside>
|
||||
<div class="admin-overlay" data-admin-overlay></div>
|
||||
<main class="admin-content">
|
||||
<header class="admin-topbar">
|
||||
<button class="icon-button admin-menu" type="button" data-admin-open aria-label="Open menu">☰</button>
|
||||
<div><strong>@yield('page-title', 'Administration')</strong><span>{{ auth()->user()->name }}</span></div>
|
||||
<a class="button small" href="{{ route('home') }}">Public site</a>
|
||||
</header>
|
||||
@if(session('success'))<div class="admin-flash">{{ session('success') }}</div>@endif
|
||||
<div class="admin-page">@yield('content')</div>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -2,69 +2,45 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<meta name="description" content="Find and book outstanding DJs for weddings, parties, clubs and corporate events.">
|
||||
<title>@yield('title', 'BeatBook — Find Your Perfect DJ')</title>
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<header class="site-header">
|
||||
<div class="shell nav">
|
||||
<a class="brand" href="{{ route('home') }}"><b>◉</b> BeatBook</a>
|
||||
<nav class="navlinks">
|
||||
<a href="{{ route('djs.index') }}">Find a DJ</a>
|
||||
<a href="{{ route('home') }}#how">How it works</a>
|
||||
<a href="{{ route('home') }}#for-djs">For DJs</a>
|
||||
<a href="{{ route('home') }}#pricing">Pricing</a>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
@auth
|
||||
@if(auth()->user()->hasAnyRole(['admin', 'super-admin']))
|
||||
<a class="button ghost" href="{{ route('admin.dashboard') }}">Admin</a>
|
||||
@endif
|
||||
<a class="button ghost" href="{{ route('dashboard') }}">Dashboard</a>
|
||||
<form method="post" action="{{ route('logout') }}" class="inline-form">
|
||||
@csrf
|
||||
<button class="button" type="submit">Sign out</button>
|
||||
</form>
|
||||
@else
|
||||
<a class="button ghost" href="{{ route('login') }}">Sign in</a>
|
||||
<a class="button" href="{{ route('register') }}">Join</a>
|
||||
@endauth
|
||||
<button class="mobile-menu-button" type="button" data-menu-toggle aria-label="Open navigation" aria-expanded="false">☰</button>
|
||||
<div class="nav-panel" data-menu-panel>
|
||||
<nav class="navlinks">
|
||||
<a href="{{ route('djs.index') }}">Find a DJ</a>
|
||||
<a href="{{ route('home') }}#how">How it works</a>
|
||||
<a href="{{ route('home') }}#for-djs">For DJs</a>
|
||||
<a href="{{ route('home') }}#pricing">Pricing</a>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
@auth
|
||||
<a class="nav-account-link" href="{{ route('dashboard') }}"><span class="mini-avatar">{{ strtoupper(substr(auth()->user()->name,0,1)) }}</span><span>My account</span></a>
|
||||
@if(auth()->user()->hasAnyRole(['admin', 'super-admin']))<a class="button ghost small" href="{{ route('admin.dashboard') }}">Admin</a>@endif
|
||||
<form method="post" action="{{ route('logout') }}" class="inline-form">@csrf<button class="text-button" type="submit">Sign out</button></form>
|
||||
@else
|
||||
<a class="text-button" href="{{ route('login') }}">Sign in</a>
|
||||
<a class="button small" href="{{ route('register') }}">Join BeatBook</a>
|
||||
@endauth
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="shell flash success">{{ session('success') }}</div>
|
||||
@endif
|
||||
@if(session('status'))
|
||||
<div class="shell flash success">{{ session('status') }}</div>
|
||||
@endif
|
||||
|
||||
@if(session('success'))<div class="shell flash success">{{ session('success') }}</div>@endif
|
||||
@if(session('status'))<div class="shell flash success">{{ session('status') }}</div>@endif
|
||||
@yield('content')
|
||||
|
||||
<footer class="section footer">
|
||||
<div class="shell">
|
||||
<b class="brand">BeatBook</b>
|
||||
<p class="muted">DJs for every moment. Secure enquiries, bookings and verified reviews.</p>
|
||||
<p>
|
||||
<a href="{{ route('privacy') }}" class="muted">Privacy</a> ·
|
||||
<a href="{{ route('cookies') }}" class="muted">Cookies</a> ·
|
||||
<a href="{{ route('terms') }}" class="muted">Terms</a>
|
||||
</p>
|
||||
</div>
|
||||
<footer class="site-footer">
|
||||
<div class="shell footer-grid"><div><a class="brand" href="{{ route('home') }}"><b>◉</b> BeatBook</a><p>DJs for every moment. Search, compare and book with confidence.</p></div><div><strong>Discover</strong><a href="{{ route('djs.index') }}">Find a DJ</a><a href="{{ route('home') }}#how">How it works</a><a href="{{ route('home') }}#for-djs">For DJs</a></div><div><strong>Legal</strong><a href="{{ route('privacy') }}">Privacy</a><a href="{{ route('cookies') }}">Cookies</a><a href="{{ route('terms') }}">Terms</a></div></div>
|
||||
<div class="shell footer-bottom">© {{ date('Y') }} BeatBook. All rights reserved.</div>
|
||||
</footer>
|
||||
|
||||
<div class="cookie" id="cookie">
|
||||
<strong>Your privacy matters</strong>
|
||||
<p>We use necessary cookies to run BeatBook. Analytics and marketing remain off until you choose them.</p>
|
||||
<button class="button" type="button" onclick="localStorage.setItem('cookieChoice','necessary');document.getElementById('cookie').remove()">Necessary only</button>
|
||||
<button class="button ghost cookie-secondary" type="button" onclick="localStorage.setItem('cookieChoice','all');document.getElementById('cookie').remove()">Accept all</button>
|
||||
</div>
|
||||
<script>
|
||||
if (localStorage.getItem('cookieChoice')) document.getElementById('cookie')?.remove();
|
||||
</script>
|
||||
<div class="cookie" id="cookie"><div><strong>Your privacy matters</strong><p>Necessary cookies keep BeatBook working. Optional analytics and marketing stay off unless you accept them.</p></div><div class="cookie-actions"><button class="button small" type="button" onclick="localStorage.setItem('cookieChoice','necessary');document.getElementById('cookie').remove()">Necessary only</button><button class="button ghost small" type="button" onclick="localStorage.setItem('cookieChoice','all');document.getElementById('cookie').remove()">Accept all</button></div></div>
|
||||
<script>if(localStorage.getItem('cookieChoice')) document.getElementById('cookie')?.remove();</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user