Add employee presence with kiosk sign-in, QR badges, and mobile step-out.
Deploy Ladill Frontdesk / deploy (push) Failing after 26s

Enables staff roster, PIN/code kiosk flow, attendance reports, evacuation staff roll call, webhooks, branch mismatch warnings, and a linked-user My presence portal.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-28 21:11:18 +00:00
co-authored by Cursor
parent 905d7268e4
commit 890c2c71e3
40 changed files with 2613 additions and 53 deletions
+19
View File
@@ -9,6 +9,8 @@ use App\Http\Controllers\Frontdesk\BuildingController;
use App\Http\Controllers\Frontdesk\ComplianceController;
use App\Http\Controllers\Frontdesk\DashboardController;
use App\Http\Controllers\Frontdesk\DeviceController;
use App\Http\Controllers\Frontdesk\EmployeeController;
use App\Http\Controllers\Frontdesk\EmployeePortalController;
use App\Http\Controllers\Frontdesk\HostController;
use App\Http\Controllers\Frontdesk\HostPortalController;
use App\Http\Controllers\Frontdesk\IntegrationController;
@@ -17,6 +19,7 @@ use App\Http\Controllers\Frontdesk\KioskDeviceController;
use App\Http\Controllers\Frontdesk\MemberController;
use App\Http\Controllers\Frontdesk\OnboardingController;
use App\Http\Controllers\Frontdesk\ProController;
use App\Http\Controllers\Frontdesk\QrScanController;
use App\Http\Controllers\Frontdesk\ReceptionDeskController;
use App\Http\Controllers\Frontdesk\ReportController;
use App\Http\Controllers\Frontdesk\SecurityController;
@@ -50,6 +53,7 @@ Route::get('/integrations/ical/{organization}', IcalFeedController::class)->name
Route::middleware(['frontdesk.device:kiosk', 'throttle:kiosk-device'])->prefix('kiosk/d')->group(function () {
Route::get('/{token}', [KioskDeviceController::class, 'show'])->name('frontdesk.kiosk.device');
Route::post('/{token}/check-in', [KioskDeviceController::class, 'checkIn'])->name('frontdesk.kiosk.device.check-in');
Route::post('/{token}/staff/action', [KioskDeviceController::class, 'staffAction'])->name('frontdesk.kiosk.device.staff.action');
});
Route::middleware(['auth', 'platform.session'])->group(function () {
@@ -107,6 +111,20 @@ Route::middleware(['auth', 'platform.session'])->group(function () {
Route::put('/hosts/{host}', [HostController::class, 'update'])->name('frontdesk.hosts.update');
Route::delete('/hosts/{host}', [HostController::class, 'destroy'])->name('frontdesk.hosts.destroy');
Route::get('/employees', [EmployeeController::class, 'index'])->name('frontdesk.employees.index');
Route::get('/employees/create', [EmployeeController::class, 'create'])->name('frontdesk.employees.create');
Route::post('/employees', [EmployeeController::class, 'store'])->name('frontdesk.employees.store');
Route::get('/employees/import', [EmployeeController::class, 'importForm'])->name('frontdesk.employees.import');
Route::post('/employees/import', [EmployeeController::class, 'import'])->name('frontdesk.employees.import.store');
Route::get('/employees/{employee}/edit', [EmployeeController::class, 'edit'])->name('frontdesk.employees.edit');
Route::get('/employees/{employee}/badge', [EmployeeController::class, 'badge'])->name('frontdesk.employees.badge');
Route::put('/employees/{employee}', [EmployeeController::class, 'update'])->name('frontdesk.employees.update');
Route::delete('/employees/{employee}', [EmployeeController::class, 'destroy'])->name('frontdesk.employees.destroy');
Route::get('/employees/export/attendance', [EmployeeController::class, 'exportAttendance'])->name('frontdesk.employees.export.attendance');
Route::get('/employee', [EmployeePortalController::class, 'index'])->name('frontdesk.employee.portal');
Route::post('/employee/action', [EmployeePortalController::class, 'action'])->name('frontdesk.employee.portal.action');
Route::get('/kiosk', [KioskController::class, 'show'])->name('frontdesk.kiosk');
Route::post('/kiosk/check-in', [KioskController::class, 'checkIn'])->name('frontdesk.kiosk.check-in');
@@ -126,6 +144,7 @@ Route::middleware(['auth', 'platform.session'])->group(function () {
Route::get('/security', [SecurityController::class, 'index'])->name('frontdesk.security.index');
Route::get('/security/evacuation', [SecurityController::class, 'evacuation'])->name('frontdesk.security.evacuation');
Route::get('/security/evacuation/export', [SecurityController::class, 'evacuationExport'])->name('frontdesk.security.evacuation.export');
Route::get('/security/evacuation/badges', [SecurityController::class, 'evacuationBadges'])->name('frontdesk.security.evacuation.badges');
Route::get('/security/verify', [SecurityController::class, 'verifyForm'])->name('frontdesk.security.verify');
Route::post('/security/verify', [SecurityController::class, 'verify'])->name('frontdesk.security.verify.lookup');