Skip to main content

Interface Tour

A comprehensive walkthrough of the Shyfts interface, covering navigation, layouts, and key UI elements across all user roles.


Interface Overview

Shyfts uses a modern, responsive interface with glassmorphism design. The interface automatically adapts based on your user role:

RolePrimary InterfaceNavigation Items
System AdminAdmin DashboardCompanies, Users, Inbox
Company ManagerManager DashboardStaff, Calendar, Analytics, Inbox
Staff MemberStaff PortalSchedule, Timesheet, Leave Requests, Inbox

The navigation bar appears at the top of every page (except authentication pages) and provides consistent access to all features.

Desktop Navigation

┌─────────────────────────────────────────────────────────────────────────┐
│ [C] Shyfts │ Dashboard Staff Calendar Analytics Inbox │ 🔔 👤 │
│ Logo │ Navigation Links (role-based) │ Actions │
└─────────────────────────────────────────────────────────────────────────┘

Source: src/components/navigation/GlobalNavigation.tsx:94-226

ComponentLocationPurpose
LogoLeftReturns to home/dashboard
Navigation LinksCentreRole-based page links
Session RefreshRightRefresh authentication session
DocumentationRightOpens docs.shyfts.app
Notification BellRightView notifications
User MenuRightProfile, settings, logout

System Admin Navigation:

// Source: src/config/navigationConfig.ts:24-29
case 'SYSTEM_ADMIN':
return [
{ href: '/admin', label: 'Admin Dashboard', icon: Activity },
{ href: '/admin/companies', label: 'Companies', icon: Building },
{ href: '/admin/users', label: 'Users', icon: Users },
{ href: '/messages', label: 'Inbox', icon: MessageSquare },
]

Company Manager Navigation:

// Source: src/config/navigationConfig.ts:31-38
case 'COMPANY_MANAGER':
return [
{ href: '/dashboard', label: 'Dashboard', icon: Activity },
{ href: '/dashboard/staff', label: terminology?.staff || 'Staff', icon: Users },
{ href: '/dashboard/calendar', label: 'Calendar', icon: Calendar },
{ href: '/dashboard/analytics', label: 'Analytics', icon: FileText },
{ href: '/messages', label: 'Inbox', icon: MessageSquare },
]

Staff Member Navigation:

// Source: src/config/navigationConfig.ts:40-47
case 'STAFF':
return [
{ href: '/staff', label: 'My Portal', icon: Activity },
{ href: '/staff/schedule', label: 'My Schedule', icon: Calendar },
{ href: '/staff/timesheet', label: 'Timesheet', icon: FileText },
{ href: '/staff/leave', label: 'Leave Requests', icon: FileText },
{ href: '/messages', label: 'Inbox', icon: MessageSquare },
]
Industry Terminology

Navigation labels adapt to your industry. For example, "Staff" may display as "Team Members" or another industry-specific term based on your company's configuration.


User Menu

The user dropdown menu provides quick access to account-related actions.

┌─────────────────────────┐
│ user@example.com │
├─────────────────────────┤
│ 👤 Profile │
│ ⚙️ Settings │
├─────────────────────────┤
│ 🚪 Logout │
└─────────────────────────┘
OptionAction
ProfileView and edit your personal profile
SettingsAccess system settings
LogoutSign out with confirmation modal

Source: src/components/navigation/GlobalNavigation.tsx:169-208

Logout Confirmation

When clicking logout, a confirmation modal appears to prevent accidental sign-out:

┌────────────────────────────────────────┐
│ Confirm Logout │
├────────────────────────────────────────┤
│ Are you sure you want to log out? │
│ Any unsaved changes will be lost. │
│ │
│ [Cancel] [Logout] │
└────────────────────────────────────────┘

Mobile Navigation

On mobile devices (screen width < 768px), the navigation transforms into a slide-out menu.

Mobile Menu Structure

┌───────────────────────┐
│ [C] Shyfts [X] │ Header with close button
├───────────────────────┤
│ 👤 User Name │ User info
│ user@email.com │
├───────────────────────┤
│ 📊 Dashboard │
│ 👥 Staff │ Role-based
│ 📅 Calendar │ navigation
│ 📈 Analytics │ links
│ 💬 Inbox │
├───────────────────────┤
│ 👤 Profile │
│ ⚙️ Settings │ Quick links
│ 📖 Documentation │
│ 🔔 Notifications │
│ 🚪 Logout │
├───────────────────────┤
│ Swipe left to close │ Footer hint
└───────────────────────┘

Source: src/components/navigation/MobileMenu.tsx:125-261

Mobile Menu Features

FeatureDescription
Touch TargetsAll buttons are 44px minimum for easy tapping
Swipe to CloseSwipe left anywhere in the menu to close
Focus TrapTab key cycles within menu when open
Escape KeyPress Escape to close menu
BackdropSemi-transparent backdrop, tap to close
// Source: src/components/navigation/MobileMenu.tsx:64-66
// Swipe left to close (threshold of 50px)
if (diffX > 50) {
onClose()
}

Opening Mobile Menu

Tap the hamburger menu icon (☰) in the top-right corner when on mobile:

// Source: src/components/navigation/GlobalNavigation.tsx:211-222
<Button
variant="ghost"
size="icon"
className="md:hidden text-white hover:bg-white/10"
onClick={onMenuClick}
aria-label={mobileMenuOpen ? "Close mobile menu" : "Open mobile menu"}
>
<Menu className="w-6 h-6" />
</Button>

Breadcrumb navigation shows your current location and provides quick navigation to parent pages.

Desktop Breadcrumbs

Home > Dashboard > Staff > John Smith

Mobile Breadcrumbs

On mobile, breadcrumbs show only the last 2 items to save space:

Staff > John Smith

Source: src/components/navigation/Breadcrumbs.tsx:22-24

// Only show last 2 breadcrumbs on mobile
const mobileBreadcrumbs = useMemo(
() => breadcrumbs.length > 2 ? breadcrumbs.slice(-2) : breadcrumbs,
[breadcrumbs]
)

Breadcrumbs are hidden on:

  • Authentication pages (login, password reset)
  • Home page
  • Pages with only one breadcrumb level

Dashboard Layouts

Company Manager Dashboard

┌─────────────────────────────────────────────────────────────────┐
│ Global Navigation Bar │
├─────────────────────────────────────────────────────────────────┤
│ Home > Dashboard │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Total Staff │ │ On Shift │ │ On Leave │ │ Pending │ │
│ │ 24 │ │ 12 │ │ 3 │ │ 5 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Today's Schedule │ │
│ │ Room 1: ████████░░░░████████░░░░ │ │
│ │ Room 2: ░░░░████████████████████ │ │
│ │ Room 3: ████████████░░░░░░░░████ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Pending Requests │ │ Recent Activity │ │
│ │ - Leave request │ │ - Shift assigned │ │
│ │ - Swap request │ │ - Staff clocked in │ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Staff Portal Dashboard

┌─────────────────────────────────────────────────────────────────┐
│ Global Navigation Bar │
├─────────────────────────────────────────────────────────────────┤
│ Home > My Portal │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Welcome, [Name] [Clock In] button │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Today's Shift │ │
│ │ Room 1 - 09:00 to 17:00 │ │
│ │ Status: Scheduled │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Upcoming Shifts │ │
│ │ Tomorrow: Room 2 - 08:00 to 16:00 │ │
│ │ Wednesday: Room 1 - 10:00 to 18:00 │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Leave Balance │ │ Timesheet Status │ │
│ │ Annual: 15 days │ │ Current week: │ │
│ │ Sick: 10 days │ │ Submitted ✓ │ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

System Admin Dashboard

┌─────────────────────────────────────────────────────────────────┐
│ Global Navigation Bar │
├─────────────────────────────────────────────────────────────────┤
│ Home > Admin Dashboard │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ Companies │ │ Total Users │ │ Active Now │ │ Pending │ │
│ │ 12 │ │ 156 │ │ 45 │ │ 3 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Company List │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ ABC Medical │ GP Practice │ 24 staff │ Active │ │ │
│ │ │ XYZ Dental │ Dental │ 18 staff │ Active │ │ │
│ │ │ Main St Cafe │ Restaurant │ 12 staff │ Pending │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ │ [+ Create Company] │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Design System

Glassmorphism Style

Shyfts uses glassmorphism throughout the interface:

/* Source: Applied throughout components */
backdrop-blur-md bg-white/10 border border-white/20
ElementDescription
Blurbackdrop-blur-md creates frosted glass effect
Backgroundbg-white/10 provides subtle white overlay
Borderborder-white/20 defines container edges

Colour Palette

ColourHexUsage
Coral#FFB5B0Primary accent, buttons
Coral Light#FFC5C0Gradients, hover states
White#FFFFFFText, icons
White/70rgba(255,255,255,0.7)Secondary text
White/20rgba(255,255,255,0.2)Borders, dividers

Touch Targets

All interactive elements maintain 44px minimum size for accessibility:

// Source: src/components/navigation/MobileMenu.tsx:193
className="min-h-[44px]" // 44px touch target

Notification System

Notification Bell

The notification bell in the navigation shows unread notification count:

// Source: src/components/navigation/GlobalNavigation.tsx:166
<NotificationBell className="text-white/70 hover:text-white" />

Notification Types

TypeIconDescription
Shift Assigned📅New shift scheduled
Leave ApprovedLeave request approved
Leave RejectedLeave request rejected
Swap Request🔄Shift swap requested
Timesheet DueTimesheet submission reminder

Keyboard Navigation

Global Shortcuts

KeyAction
TabMove to next focusable element
Shift + TabMove to previous focusable element
EscapeClose modals and menus
EnterActivate focused button/link

Mobile Menu Shortcuts

KeyAction
TabCycle through menu items (trapped)
EscapeClose mobile menu

Source: src/components/navigation/MobileMenu.tsx:85-110


Responsive Breakpoints

BreakpointWidthBehaviour
Mobile< 768pxMobile menu, simplified breadcrumbs
Tablet768px - 1024pxDesktop nav, responsive layouts
Desktop> 1024pxFull navigation, maximum features


Source Files:

  • src/components/navigation/GlobalNavigation.tsx - Main navigation bar
  • src/components/navigation/MobileMenu.tsx - Mobile navigation
  • src/components/navigation/Breadcrumbs.tsx - Breadcrumb navigation
  • src/components/navigation/NavigationProvider.tsx - Navigation wrapper
  • src/config/navigationConfig.ts - Navigation configuration