$totalPages) { $page = $totalPages; } $offset = ($page - 1) * $perPage; $requests = fetch_requests($statusFilter !== '' ? $statusFilter : null, $searchQuery, $perPage, $offset); $metrics = dashboard_metrics(); $showingStart = $totalRequests > 0 ? $offset + 1 : 0; $showingEnd = $totalRequests > 0 ? $offset + count($requests) : 0; $hasActiveFilters = $statusFilter !== '' || $searchQuery !== ''; $buildDashboardUrl = static function (array $overrides = []) use ($statusFilter, $searchQuery, $page): string { $params = [ 'status' => $statusFilter, 'q' => $searchQuery, 'page' => $page, ]; foreach ($overrides as $key => $value) { $params[$key] = $value; } foreach ($params as $key => $value) { if ($value === '' || $value === null || ($key === 'page' && (int) $value <= 1)) { unset($params[$key]); } } $query = http_build_query($params); return '/dashboard.php' . ($query !== '' ? '?' . $query : ''); }; render_head(project_name() . ' | Dashboard', 'Admin dashboard for reviewing incoming project requests.', true); render_navbar('dashboard'); render_flash_toast(); ?>
Dashboard

Project request queue

Review the latest submissions, search contacts or companies, filter by status, and open each request detail page.

Create another request
Total requests
New
Reviewed
Qualified

All requests

Search by reference, name, email, company, or project type, then paginate through the queue.

All $label): ?>
Showing of request.
Filtered results are based on your current search and status selection.

No matching requests

Try a different keyword or clear the filters to see the full queue again.

Clear filters

No requests yet

Submit the first project request from the home page to populate the queue.

Create the first request
Reference Contact Type Timeline Status Submitted Action
Open
1): ?>