Positioned after the HR group, before Reports in the global sidebar accordion.
Icon: person-badge (or user-check). Permission gate: visitor_access. Entire group hidden if role lacks this permission.
Expandable accordion with 5 sub-groups listed above. Active section auto-expands on load.
Route Map
GET /visitor → Dashboard GET /visitor/visitors → Visitor list GET /visitor/visitors/{id} → Visitor profile GET /visitor/visitors/create → New entry (4-step stepper) GET /visitor/checkin → Check-in desk (kiosk-friendly) GET /visitor/preregistration → Pre-reg list GET /visitor/preregistration/create → New pre-registration GET /visitor/vip → VIP guest management GET /visitor/complaints → Complaint list GET /visitor/complaints/{id} → Complaint detail + timeline GET /visitor/complaints/create → New complaint GET /visitor/feedback → Feedback list + detail GET /visitor/notifications → Notification log GET /visitor/reports → Reports + export GET /visitor/settings → Settings (admin gate)
👤 Visitor ├─ Dashboard ├─ Visitors │ ├─ All visitors │ └─ Check-in desk ├─ Pre-registration │ ├─ All pre-registrations │ └─ VIP guests ├─ Complaints │ ├─ All complaints │ └─ Notification log ├─ Feedback └─ Reports & Settings (admin)
Visitor / Complaints / #C-0091
Visitor / Visitors / Ramesh Kumar
Visitor / Pre-registration / New
Page titles follow Worksuite convention: [Module] — [Page name] in <title>. H1 heading inside content area.
| Role | Dashboard | Check-in/out | Complaints | Reports | Settings |
|---|---|---|---|---|---|
| Receptionist | View | Full | Create only | — | — |
| Helpdesk | View | Read-only | Assign + update | Own dept | — |
| Dept. staff | Own dept | — | Assigned only | — | — |
| Admin | Full | Full | Full | Full | Full |
| Super admin | All tenants | Full | Full + escalate | Cross-tenant | Full |
visitor_view_dashboard, visitor_manage_checkin, visitor_manage_complaints, visitor_assign_complaints, visitor_view_reports, visitor_export_reports, visitor_manage_settingsPurpose: First thing a receptionist sees at shift start. Shows today's footfall, live check-ins, complaint status and activity feed.
Primary roles: Receptionist, Helpdesk, Admin
| Visitor | Purpose | In | Token | Status | |
|---|---|---|---|---|---|
RKRamesh Kumar | HR / Job inquiry | 09:14 | VIS-2841 | Checked in | |
PPPriya Patel | Admin / Complaint | 10:02 | VIS-2842 | VIP | |
MJMohan Joshi | Finance / Admission | 11:30 | VIS-2843 | Checked in |
Empty: "No visitors today. Ready for walk-in entry." with large + CTA centered.
Loading: Skeleton bars on all cards and table rows.
Error: Inline top banner: "Could not load visitor data — Retry"
aria-live="polite" on activity feed for real-time updates.
Tab order: CTAs → stat cards → table rows → feed.
Mobile: Stat cards collapse to 2×2. Table becomes per-visitor card with swipe-to-checkout. Feed moves below table.
Full historical list of all visitors. Searchable, filterable. Entry point for re-check-in of returning visitors.
Roles: All (filtered by dept for Dept. staff)
Date range · VIP only (checkbox) · Reason of visit · Department · Check-in status (Active / Checked out / All)
Search: mobile number or name with live debounce (300ms)
| # | Visitor | Mobile | Last visit | Total visits | Tag | Status | Actions |
|---|---|---|---|---|---|---|---|
| 001 | RKRamesh Kumar | +91 98765 43210 | 9 Apr 2026 | 8 | VIP | Active | |
| 002 | PPPriya Patel | +91 98712 34567 | 9 Apr 2026 | 3 | VIP | Active | |
| 003 | DSDeepa Sharma | +91 97654 32109 | 7 Apr 2026 | 2 | — | Checked out |
"No visitors found for these filters. Try widening the date range or clearing filters."
Profile header (avatar, name, mobile, visit count, VIP badge, quick actions) → 2-col body: left = full visit timeline, right = complaint history + notes
Each visit card shows: date, token (VIS-XXXX), purpose, host dept, duration, assigned staff, any complaints raised. Expandable per visit.
Visit history
VIS-2844VIS-2798VIS-2741Cmd+Enter or F10 = Confirm check-in.Step 1 — Visitor lookup
Step 2 — Visitor details (pre-filled for returning)
Step 3 — Purpose
Step 4 — Token / QR
Check-out flow
Admin or helpdesk pre-registers an expected visitor. On arrival, the receptionist sees a yellow "Pre-registered" banner in the check-in flow and the record is auto-matched by mobile number.
Name · Mobile · Expected date/time · Purpose · Host name/dept · VIP toggle · Notes for receptionist · Attachment (optional)
| Visitor | Mobile | Expected | Purpose | Host | VIP | Status | Actions |
|---|---|---|---|---|---|---|---|
| Ramesh Kumar | +91 98765 43210 | 9 Apr 10:00 | Admission letter | Finance | VIP | Arrived | |
| Ananya Singh | +91 91234 56789 | 9 Apr 14:30 | Job inquiry | HR | — | Pending | |
| Vikram Rao | +91 99887 76655 | 10 Apr 11:00 | Complaint | Admin | — | Pending |
VIP-tagged visitors receive: automatic SMS on arrival to their host, priority indicator on the dashboard active table, VIP badge (primary / header color) throughout all screens.
Tag/untag VIP from visitor profile or this page. Add internal notes per VIP (e.g. "Minister's office — always alert HOD"). Full visit history visible.
Status · Source · Type · Department · Assigned staff · Date range · SLA breached (checkbox)
Rows with breached SLA get a very faint red background (5% opacity). SLA bar in each row: green → amber at 60% elapsed → red at 85%.
Select rows → "Assign selected to department" / "Change status" / "Export selected". Confirmation required for bulk status change.
C-0091Work in progress| Type | Service delay |
| Source | Direct office |
| Department | Finance |
| Priority | High |
| SLA deadline | 11 Apr · 1d 13h |
| Name | Ramesh Kumar |
| Mobile | +91 98765 43210 |
| Token | VIS-2844 |
| Tag | VIP |
Opens a right-side drawer (not a modal) to search staff within a department. Avoids full-page interruption while maintaining context.
Each status pipeline button is focusable and announces its action. Timeline is a role="list". Status change requires confirmation dialog: "Change status to Completed? This will trigger a feedback SMS."
Complainant
Complaint details
SLA preview
Feedback SMS/WhatsApp sent automatically when complaint status → Completed, after a configurable delay (default 1 hour). Link opens a minimal branded page (or SMS-reply code for no-smartphone users).
Star rating (large 1–5 display) · Visitor comment · Resolution summary · Staff internal review textarea · Complaint link · Handling staff name
| Visitor | Complaint | Rating | Comment | Resolved by | Date | Internal remark |
|---|---|---|---|---|---|---|
| Deepa Sharma | C-0082 | ⭐⭐⭐⭐⭐ 5/5 | Very quick response | Kavita R. | 7 Apr | |
| Rohit Nair | C-0079 | ⭐⭐⭐ 3/5 | Took 3 days, expected 1 | Suresh M. | 5 Apr | Review noted |
| Time | Channel | Recipient | Event | Message preview | Status | |
|---|---|---|---|---|---|---|
| 11:39 | SMS | Ramesh K. (+91 98765…) | Complaint update | "Your complaint #C-0091 is being…" | Delivered | |
| 11:22 | Suresh M. (+91 98100…) | Assignment | "Complaint #C-0091 assigned to…" | Delivered | ||
| 10:43 | SMS | Ramesh K. (+91 98765…) | Complaint registered | "Complaint registered #C-0091" | Delivered | |
| 10:14 | SMS | Meena T. (+91 97654…) | Check-in alert | "Your visitor Priya Patel has…" | Failed |
Delivery status fetched from SMS/WhatsApp gateway webhooks. Failed notifications show a retry button inline. Log is append-only (no deletion) for audit compliance.
Report filters
Export
Preview — Visitor summary (top 50 rows)
| Date | Visitor | Purpose | Department | Duration | Complaints | Status |
|---|---|---|---|---|---|---|
| 9 Apr | Ramesh Kumar | Admission letter | Finance | Ongoing | 1 | Checked in |
| 9 Apr | Priya Patel | Complaint | Admin | Ongoing | 0 | VIP |
| 7 Apr | Deepa Sharma | Suggestion | HR | 24 min | 0 | Checked out |
Add/edit/reorder complaint types and complaint sources. Drag-and-drop reorder. Each type has a name, color chip, and default SLA override.
Map departments for assignment. Set default duty officer per dept. Department head receives escalation SMS if SLA breaches.
SMS and WhatsApp message templates per event: Check-in, Complaint registered, Status changed, Feedback request. Variable picker: {'{{'}visitor_name{'}}'}, {'{{'}token{'}}'}, {'{{'}complaint_id{'}}'}, {'{{'}dept{'}}'}
Hours-to-resolve per priority: Low 72h, Medium 48h, High 24h, Critical 4h. Escalation contact per priority tier.
Token prefix (default: VIS-). Auto-feedback trigger toggle. Delay after resolution (default 1h). Kiosk mode toggle (Phase 2, grayed out with "Coming soon" badge).
Flow 1 — New walk-in visitor
Optional: Photo capture prompted after manual entry. Dept notified automatically. Token printed or SMS'd on confirmation.
Flow 2 — Returning visitor repeat entry
Flow 3 — Pre-registered VIP arrival
Pre-registration match is surfaced as a yellow banner in step 3 of check-in. VIP lane skips photo/ID prompts by default.
Flow 4 — Complaint registration and assignment
Opening complaint inline from check-in purpose = Complaint auto-links visitor and pre-fills source as "Direct office".
Flow 5 — Complaint status transitions
Every status change: (1) records in timeline with actor + timestamp, (2) triggers SMS to visitor if "notify visitor" is on for that event, (3) logs notification in notification log.
Flow 6 — Feedback capture
Flow 7 — Report export
| Token | Value | Usage | Where defined |
|---|---|---|---|
--header_color | #171f29 (default) | Primary buttons, active sidebar/tab, stepper, links | resources/views/sections/theme_css.blade.php — per company |
--color-page-bg | #f3f5f8 | Main content wrapper (main-container / bg-additional-grey) | public/css/main.css utility classes |
--color-vip-badge | outline + header | VIP label — use .badge + border or reuse warning/primary variant | Keep consistent with existing badge components |
| Visit token font | font-family: monospace | VIS-XXXX display, token in tables | Use existing font-mono variable |
| SLA bar height | 6px | SLA progress bar — slightly thicker than standard for urgency | Inline component style |
| SLA amber threshold | 60% | Bar color changes to amber at 60% elapsed | Component logic |
| SLA red threshold | 85% | Bar color changes to red at 85% elapsed | Component logic |
Recommended Livewire components
Real-time mobile/name search as user types. Debounce 300ms. Returns: existing record or "new visitor" prompt. Highlights pre-registered match.
Manages 4-step state, saves draft to session between steps. Emits VisitorCheckedIn event on confirmation.
Inline status change with note textarea. Triggers notification job. Records timeline entry. Returns updated timeline HTML.
Live table preview as filters change. Debounce 500ms. Top 50 rows only. Export triggers server-side queue job for large datasets.
Events & Jobs
// Events fired VisitorCheckedIn → SendVisitorNotification, NotifyDutyOfficer VisitorCheckedOut → LogVisitDuration, TriggerFeedbackRequest (if configured) ComplaintCreated → SendComplaintRegisteredSms, NotifyAssignedDept ComplaintAssigned → SendAssignmentNotification ComplaintStatusChanged → SendComplaintUpdateSms, LogNotificationAttempt ComplaintCompleted → ScheduleFeedbackRequest (delayed by config hours) SlaBreached → SendEscalationAlert (to dept head)
Blade component reuse
{{-- Reuse existing --}} @include('components.status-badge', ['status' => $complaint->status]) @include('components.avatar', ['name' => $visitor->name]) @include('components.datatable', ['columns' => $columns, 'rows' => $rows]) {{-- New Visitor module components --}} @include('visitor.components.visit-token', ['token' => $visit->token]) @include('visitor.components.sla-bar', ['percent' => $slaPercent]) @include('visitor.components.timeline', ['events' => $complaint->timeline]) @include('visitor.components.pre-reg-banner', ['preReg' => $preReg])
Permission gates (Spatie)
visitor_view_dashboard visitor_manage_checkin visitor_manage_complaints visitor_assign_complaints visitor_view_reports visitor_export_reports visitor_manage_settings
Database notes
visitors · visits · pre_registrations · complaints · complaint_timeline · notifications_log · feedback
visits.token: Unique, indexed, format VIS-NNNN. Prefix configurable in settings.
All tables include tenant_id (or use team scoping via team_id following Worksuite's existing pattern). Notifications log scoped per tenant. Reports filtered by tenant automatically.
| Phase | Features | Rationale |
|---|---|---|
| MVP Phase 1 |
|
Core operational loop. Reception desk can function from day 1. Complaints tracked and routed to departments. Enough for go-live. |
| Phase 2 |
|
Adds operational polish, compliance history, and self-service admin. Delivers value to helpdesk and management layer. |
| Phase 3 |
|
Advanced automation and alternative interfaces. Defer until Phase 1 + 2 adoption is proven. |
Visual system: Worksuite admin — loads
public/css/main.css + vendor CSS like layouts/app · --header_color (theme_css) · Bootstrap body font stack · .bg-additional-grey (#f2f4f7) page · white cards