# 🧪 KROW Workforce Platform - QA Testing Checklist

**Version:** 1.0  
**Date:** February 1, 2026  
**Coverage:** Client App + Staff App  
**Purpose:** Manual QA and Regression Testing

---

## 📋 TABLE OF CONTENTS

1. [Feature-Level QA Checklist](#1️⃣-feature-level-qa-checklist)
   - [Client App Features](#client-app-features)
   - [Staff App Features](#staff-app-features)
2. [Cross-Application Test Scenarios](#2️⃣-cross-application-test-scenarios)
3. [Shared Infrastructure Validation](#3️⃣-shared-infrastructure-validation)
4. [Regression & Release Checklist](#4️⃣-regression--release-checklist)

---

## 1️⃣ FEATURE-LEVEL QA CHECKLIST

### CLIENT APP FEATURES

---

#### 📱 CLIENT-001: Authentication

**Applications:** Client  
**Entry Points:**
- Launch app → Get Started → Sign In
- Launch app → Get Started → Sign Up

**Happy Path Test Cases:**
- [ ] Sign in with valid email and password displays home dashboard
- [ ] Sign up with business details creates account and navigates to home

**Validation & Error States:**
- [ ] Invalid email format shows validation error
- [ ] Incorrect password shows authentication error
- [ ] Weak password in sign-up shows strength requirements
- [ ] Duplicate email in sign-up shows "already registered" error
- [ ] Empty fields show required field errors

**Loading & Empty States:**
- [ ] Loading spinner displays during authentication
- [ ] OAuth redirect shows appropriate loading state

---

#### 📱 CLIENT-002: Home Dashboard

**Applications:** Client  
**Entry Points:**
- Home tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Dashboard displays current day coverage widget
- [ ] Spending analytics widget shows correct totals
- [ ] Recent reorders display completed shift roles
- [ ] Quick action buttons navigate to correct features
- [ ] Drag-and-drop widget reordering works correctly

**Validation & Error States:**
- [ ] Empty state shows "No data available" when no orders exist

**Loading & Empty States:**
- [ ] Empty coverage shows "No shifts today"
- [ ] Empty reorders shows "No recent orders"

---

#### 📱 CLIENT-003: Create Order

**Applications:** Client  
**Entry Points:**
- Home → Create Order button
- Orders tab → + FAB button
- Order type → One-Time

**Happy Path Test Cases:**
- [ ] Order type selection displays.
- [ ] Hub selection shows list of business hubs
- [ ] Role selection displays vendor roles
- [ ] Position quantity can be incremented/decremented (min 1)
- [ ] Date picker displays correct calendar
- [ ] Time pickers show valid time ranges
- [ ] Break duration affects total hours calculation
- [ ] Cost preview calculates correctly (rate × positions × hours)
- [ ] Order submission creates order, shift, and shift roles
- [ ] Success confirmation displays after submission
- [ ] New order appears in View Orders list

**Validation & Error States:**
- [ ] Empty hub field shows validation error
- [ ] Empty role field shows validation error
- [ ] Zero positions shows validation error
- [ ] Invalid date (past) shows validation error
- [ ] Start time after end time shows validation error
- [ ] Missing required fields prevent submission
- [ ] Backend validation errors display appropriately

**Loading & Empty States:**
- [ ] Hub list shows "No hubs" if none exist
- [ ] Role list shows "No roles" if none configured
- [ ] Loading spinner displays during submission
- [ ] Submission progress indicator updates

---

#### 📱 CLIENT-004: View Orders

**Applications:** Client  
**Entry Points:**
- Orders tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Orders list displays orders for selected date
- [ ] Calendar date selection updates order list
- [ ] Each order card shows hub name and address
- [ ] Each order card shows shift time range
- [ ] Each order card shows role positions (filled/total)
- [ ] Each order card shows hourly rate and total cost
- [ ] Accepted applications section displays confirmed staff
- [ ] Staff names and photos display correctly
- [ ] Order list scrolls smoothly with many orders

**Validation & Error States:**
- [ ] Invalid date selection shows error

- [ ] Missing staff data shows placeholder

**Loading & Empty States:**
- [ ] Empty date shows "No orders for this date"
- [ ] Empty accepted applications shows "No confirmed staff"

---

#### 📱 CLIENT-005: Coverage Monitoring

**Applications:** Client  
**Entry Points:**
- Coverage tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Coverage overview displays current date
- [ ] Coverage stats show needed/confirmed/checked-in counts
- [ ] Shift cards display hub name and time range
- [ ] Worker cards show staff name and photo
- [ ] Check-in status indicators update correctly (late, en-route, checked-in)
- [ ] Late workers display with warning indicator
- [ ] Coverage progress bar updates correctly

**Validation & Error States:**
- [ ] Missing worker photo shows default avatar

**Loading & Empty States:**

- [ ] Empty coverage shows "No shifts today"
- [ ] No workers show "No staff assigned"

**State Persistence:**
- [ ] Coverage data refreshes automatically every X minutes
- [ ] Manual refresh via pull-to-refresh gesture

**Backend Dependency Validation:**
- [ ] `listShiftRolesByBusinessAndDateRange` returns shift requirements
- [ ] `listStaffsApplicationsByBusinessForDay` returns staff status
- [ ] Attendance status correctly mapped from backend

---

#### 📱 CLIENT-006: Billing & Invoices

**Applications:** Client  
**Entry Points:**
- Billing tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Current bill amount displays correctly
- [ ] Pending invoices list shows open invoices
- [ ] Invoice history shows paid invoices
- [ ] Savings amount displays correctly
- [ ] Spending breakdown shows costs by role
- [ ] Period filter (weekly/monthly) updates data
- [ ] Invoice detail view shows line items
- [ ] Invoice PDF download works (if implemented)

**Validation & Error States:**
- [ ] Zero billing shows $0.00 (not error)
- [ ] Negative savings shows correctly
- [ ] Missing invoice data shows placeholder

**Loading & Empty States:**
- [ ] Empty pending invoices shows "No pending invoices"
- [ ] Empty history shows "No invoice history"
- [ ] Empty spending breakdown shows "No spending data"


---

#### 📱 CLIENT-007: Hub Management

**Applications:** Client  
**Entry Points:**
- Settings → Hubs
- Create Order → Add Hub button

**Happy Path Test Cases:**
- [ ] Hubs list displays all business hubs
- [ ] Hub cards show name and full address
- [ ] Add hub button opens creation form
- [ ] Google Places autocomplete suggests addresses
- [ ] Address selection auto-fills all address fields
- [ ] Hub name can be customized
- [ ] Hub creation adds to list immediately
- [ ] Hub deletion removes from list (with confirmation)
- [ ] Team entity auto-created for business if missing

**Validation & Error States:**
- [ ] Empty hub name shows validation error
- [ ] Empty address shows validation error
- [ ] Invalid address format shows error
- [ ] Duplicate hub name shows warning
- [ ] Hub with active orders prevents deletion (validation error)

**Loading & Empty States:**
- [ ] Empty hubs list shows "No hubs configured"
- [ ] Hub creation shows loading spinner

---

#### 📱 CLIENT-008: Settings

**Applications:** Client  
**Entry Points:**
- Settings (navigation menu)

**Happy Path Test Cases:**
- [ ] User profile displays name and email
- [ ] Business name displays correctly
- [ ] Hubs link navigates to hub management
- [ ] Sign out logs out user and returns to auth screen

**Validation & Error States:**
- [ ] Missing profile photo shows default avatar
- [ ] Sign out error shows retry option

**Loading & Empty States:**
- [ ] Profile data loads on page mount

---

#### 📱 CLIENT-009: Client Main Navigation

**Applications:** Client  
**Entry Points:**
- Main app shell after authentication

**Happy Path Test Cases:**
- [ ] Bottom navigation displays 5 tabs (Home, Coverage, Billing, Orders, Reports)
- [ ] Tab selection updates active indicator
- [ ] Tab selection navigates to correct feature
- [ ] Deep links navigate to correct tab
- [ ] Back button navigates correctly within nested routes
- [ ] Tab state persists after device rotation

**Validation & Error States:**
- [ ] Invalid route shows 404 or redirects to home
- [ ] Reports tab shows placeholder (not yet implemented)

**Loading & Empty States:**
- [ ] Navigation bar displays immediately
- [ ] Initial tab loads first

---

### STAFF APP FEATURES

---

#### 📱 STAFF-001: Authentication

**Applications:** Staff  
**Entry Points:**
- Launch app → Get Started → Phone Verification

**Happy Path Test Cases:**
- [ ] Phone number entry accepts valid formats
- [ ] OTP sent confirmation displays
- [ ] OTP verification succeeds with valid code
- [ ] Profile setup wizard displays for new users
- [ ] Authenticated users bypass auth and show home

**Validation & Error States:**
- [ ] Invalid phone format shows validation error
- [ ] Incorrect OTP shows verification error
- [ ] Expired OTP shows re-send option
- [ ] Empty fields show required field errors
- [ ] Network error displays retry option

**Loading & Empty States:**
- [ ] Loading spinner displays during phone verification
- [ ] OTP input shows countdown timer
- [ ] Profile setup shows progress indicator

---

#### 📱 STAFF-002: Home Dashboard

**Applications:** Staff  
**Entry Points:**
- Home tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Today's shifts display with time and location
- [ ] Tomorrow's shifts display correctly
- [ ] Recommended shifts show available opportunities
- [ ] Shift cards show role, location, and pay rate
- [ ] Quick actions navigate to correct features
- [ ] Dashboard refreshes on pull-to-refresh

**Validation & Error States:**
- [ ] Missing shift data shows placeholder

**Loading & Empty States:**
- [ ] Empty today's shifts shows "No shifts today"
- [ ] Empty recommended shows "No available shifts"

---

#### 📱 STAFF-003: Profile

**Applications:** Staff  
**Entry Points:**
- Profile tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Profile displays name, email, phone, and photo
- [ ] Statistics show total shifts, ratings, reliability score
- [ ] Profile sections list displays all sections
- [ ] Section navigation works correctly
- [ ] Sign out logs out user and returns to auth screen

**Validation & Error States:**
- [ ] Missing profile photo shows default avatar
- [ ] Missing statistics show 0 or default values
- [ ] Sign out error shows retry option

**Loading & Empty States:**
- [ ] Profile data loads on page mount

---

#### 📱 STAFF-004: Shifts Management

**Applications:** Staff  
**Entry Points:**
- Shifts tab (bottom navigation)
- Tab navigation: My Shifts / Available / Pending / Cancelled / History

**Happy Path Test Cases:**
- [ ] My Shifts tab displays assigned shifts
- [ ] Available Shifts tab shows open positions
- [ ] Pending tab shows applications awaiting approval
- [ ] Cancelled tab shows cancelled shifts
- [ ] History tab shows past shifts
- [ ] Shift detail view displays full information
- [ ] Accept shift updates status to confirmed
- [ ] Decline shift updates status to declined
- [ ] Apply for shift creates application
- [ ] Shift cards show time, location, role, and pay

**Validation & Error States:**
- [ ] Empty tabs show appropriate empty state messages
- [ ] Already applied shift prevents duplicate application
- [ ] Past shifts cannot be applied to
- [ ] Cancelled shifts show cancellation reason

---

#### 📱 STAFF-005: Availability Management

**Applications:** Staff  
**Entry Points:**
- Worker Main → Availability
- Profile → Availability section

**Happy Path Test Cases:**
- [ ] Weekly grid displays Monday-Sunday
- [ ] Time slots (Morning/Afternoon/Evening) toggle correctly
- [ ] Quick-set buttons work (Weekdays/Weekends/All Week)
- [ ] Individual day/slot updates save correctly
- [ ] Green checkmarks indicate availability
- [ ] Gray states indicate unavailability
- [ ] Changes save automatically

**Validation & Error States:**

- [ ] Save failure shows error message

**Loading & Empty States:**
- [ ] Loading spinner displays while fetching availability
- [ ] Default state shows all unavailable

---

#### 📱 STAFF-006: Clock In/Out

**Applications:** Staff  
**Entry Points:**
- Clock In tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Today's shift displays with clock in button
- [ ] Clock in button creates attendance record
- [ ] Clock in time displays correctly
- [ ] Clock out button appears after clocking in
- [ ] Clock out creates end time record
- [ ] Total hours calculated correctly
- [ ] Attendance status updates immediately

**Validation & Error States:**
- [ ] No shift today shows "No shifts to clock in"
- [ ] Already clocked in prevents duplicate clock in

- [ ] Clock in outside shift time shows warning

**Loading & Empty States:**
- [ ] Loading spinner displays while fetching shift
- [ ] Empty state shows "No shifts scheduled"

---

#### 📱 STAFF-007: Payments

**Applications:** Staff  
**Entry Points:**
- Payments tab (bottom navigation)

**Happy Path Test Cases:**
- [ ] Payment summary displays total earnings
- [ ] Payment history lists all transactions
- [ ] Payment cards show amount, date, and status
- [ ] Payment detail view shows breakdown
- [ ] Filter by date range works correctly

**Validation & Error States:**
- [ ] Zero earnings show $0.00 (not error)
- [ ] Missing payment data shows placeholder

**Loading & Empty States:**
- [ ] Empty history shows "No payment history"

---

#### 📱 STAFF-008: Personal Info (Onboarding)

**Applications:** Staff  
**Entry Points:**
- Profile → Personal Info
- Onboarding wizard

**Happy Path Test Cases:**
- [ ] Form displays current profile data
- [ ] Name field allows text input
- [ ] Email field validates email format
- [ ] Phone field validates phone format
- [ ] Photo upload works correctly
- [ ] Preferred locations multi-select works
- [ ] Save button updates profile

**Validation & Error States:**
- [ ] Empty required fields show validation errors
- [ ] Invalid email format shows error
- [ ] Invalid phone format shows error

- [ ] Photo upload failure shows error

**Loading & Empty States:**
- [ ] Form loads with skeleton placeholders
- [ ] Photo upload shows progress indicator
- [ ] Save button shows loading spinner

---

#### 📱 STAFF-009: Emergency Contact (Onboarding)

**Applications:** Staff  
**Entry Points:**
- Profile → Emergency Contact
- Onboarding wizard

**Happy Path Test Cases:**
- [ ] Contact list displays all contacts
- [ ] Add contact button opens form
- [ ] Contact form validates name and phone
- [ ] Relationship dropdown shows options (Family/Spouse/Friend/Other)
- [ ] Remove contact deletes from list
- [ ] Save updates all contacts
- [ ] Multiple contacts supported

**Validation & Error States:**
- [ ] Empty name shows validation error
- [ ] Invalid phone format shows error
- [ ] At least one contact required (if applicable)

**Loading & Empty States:**
- [ ] Loading spinner displays while fetching contacts
- [ ] Empty state shows "No emergency contacts"
- [ ] Save button shows loading spinner

---

#### 📱 STAFF-010: Experience & Skills (Onboarding)

**Applications:** Staff  
**Entry Points:**
- Profile → Experience
- Onboarding wizard

**Happy Path Test Cases:**
- [ ] Industries multi-select displays options
- [ ] Skills multi-select displays options
- [ ] Selected items show checkmarks
- [ ] Deselection removes items
- [ ] Save updates profile

**Validation & Error States:**
- [ ] At least one industry required (if applicable)
- [ ] At least one skill required (if applicable)


**Loading & Empty States:**
- [ ] Loading spinner displays while fetching data
- [ ] Save button shows loading spinner

---

#### 📱 STAFF-012: Bank Account (Finances)

**Applications:** Staff  
**Entry Points:**
- Profile → Bank Account

**Happy Path Test Cases:**
- [ ] Account list displays all accounts
- [ ] Add account button opens form
- [ ] Form validates routing and account numbers
- [ ] Account type dropdown shows options (Checking/Savings)
- [ ] First account auto-sets as primary
- [ ] Save adds account to list
- [ ] Primary account indicator displays

**Validation & Error States:**
- [ ] Empty routing number shows validation error
- [ ] Invalid routing number format shows error
- [ ] Empty account number shows validation error
- [ ] Invalid account number format shows error
- [ ] Duplicate account shows warning


**Loading & Empty States:**
- [ ] Loading spinner displays while fetching accounts
- [ ] Empty state shows "No bank accounts"
- [ ] Save button shows loading spinner

**State Persistence:**
- [ ] Accounts persist after save
- [ ] Account list refreshes after addition

**Backend Dependency Validation:**
- [ ] `getAccountsByOwnerId` fetches staff accounts
- [ ] `createAccount` creates new account
- [ ] First account auto-flagged as primary

---

#### 📱 STAFF-013: Time Card History (Finances)

**Applications:** Staff  
**Entry Points:**
- Profile → Time Card

**Happy Path Test Cases:**
- [ ] Time card list displays all records
- [ ] Each card shows shift details (date, time, location)
- [ ] Each card shows clock in/out times
- [ ] Each card shows total hours worked
- [ ] Scrolling loads more records (pagination)

**Validation & Error States:**
- [ ] Missing attendance data shows "Not recorded"

**Loading & Empty States:**
- [ ] Empty state shows "No time card history"

---

#### 📱 STAFF-014: Tax Forms (Compliance)

**Applications:** Staff  
**Entry Points:**
- Profile → Tax Forms

**Happy Path Test Cases:**
- [ ] Forms list displays required forms (I-9, W-4)
- [ ] Form status shows completed/incomplete
- [ ] I-9 form opens editor
- [ ] I-9 form validates all fields
- [ ] W-4 form opens editor
- [ ] W-4 form validates all fields
- [ ] Form submission updates status to completed
- [ ] Completed forms show edit option

**Validation & Error States:**
- [ ] Empty required fields show validation errors
- [ ] Invalid SSN format shows error
- [ ] Invalid date format shows error
- [ ] Signature required validation

**Loading & Empty States:**
- [ ] Loading spinner displays while fetching forms
- [ ] Form editor loads with skeleton placeholders
- [ ] Save button shows loading spinner

---

#### 📱 STAFF-017: Staff Main Navigation

**Applications:** Staff  
**Entry Points:**
- Main app shell after authentication

**Happy Path Test Cases:**
- [ ] Bottom navigation displays 5 tabs (Shifts, Payments, Home, Clock In, Profile)
- [ ] Tab selection updates active indicator
- [ ] Tab selection navigates to correct feature
- [ ] Deep links navigate to correct tab and nested route
- [ ] Back button navigates correctly within nested routes
- [ ] Tab state persists after device rotation
- [ ] Nested routes (onboarding, emergency-contact, etc.) accessible

**Validation & Error States:**
- [ ] Invalid route shows 404 or redirects to home
- [ ] Navigation errors log appropriately

**Loading & Empty States:**
- [ ] Navigation bar displays immediately
- [ ] Initial tab loads first

**State Persistence:**
- [ ] Active tab persists after app background → foreground
- [ ] Tab state resets to home on app restart

**Backend Dependency Validation:**
- [ ] No direct backend calls (navigation only)

---

## 2️⃣ CROSS-APPLICATION TEST SCENARIOS

### Scenario 1: Order Creation → Staff Application Flow

**Preconditions:**
- Client user authenticated
- Staff user authenticated
- At least one hub configured

**Steps:**
1. **CLIENT APP:**
   - [ ] Create one-time order with specific hub, role, date, and time
   - [ ] Verify order appears in View Orders list
   - [ ] Verify shift shows as unfilled (0/X positions)

2. **STAFF APP:**
   - [ ] Open Shifts tab → Available tab
   - [ ] Verify new shift appears in available list
   - [ ] Verify shift details match order (hub, role, time, pay)
   - [ ] Apply for shift position

3. **CLIENT APP:**
   - [ ] Refresh View Orders
   - [ ] Verify shift shows pending application (0/X filled, pending)

4. **STAFF APP:**
   - [ ] Verify application appears in Pending tab
   - [ ] Verify shift removed from Available tab

**Expected Results:**
- ✅ Order created in Client appears in Staff Available Shifts
- ✅ Application in Staff shows pending in both apps
- ✅ Shift counts update correctly in real-time

---

### Scenario 2: Shift Acceptance → Coverage Tracking

**Preconditions:**
- Scenario 1 completed (pending application exists)

**Steps:**
1. **STAFF APP:**
   - [ ] Go to Shifts → Pending tab
   - [ ] Accept pending shift assignment

2. **CLIENT APP:**
   - [ ] Refresh View Orders
   - [ ] Verify shift shows as filled (1/X positions)
   - [ ] Verify staff name and photo appear in accepted applications
   - [ ] Navigate to Coverage tab
   - [ ] Verify shift appears with assigned staff

3. **STAFF APP:**
   - [ ] Verify shift moved from Pending to My Shifts tab
   - [ ] Verify shift appears on Home dashboard

**Expected Results:**
- ✅ Accepted shift reflects in Client orders immediately
- ✅ Staff appears in Coverage monitoring
- ✅ Shift moves to My Shifts in Staff app

---

### Scenario 3: Clock In → Real-Time Coverage Update

**Preconditions:**
- Scenario 2 completed (staff has accepted shift)
- Current date/time is during shift window

**Steps:**
1. **STAFF APP:**
   - [ ] Navigate to Clock In tab
   - [ ] Verify today's shift displays
   - [ ] Click Clock In button
   - [ ] Verify clock in time recorded

2. **CLIENT APP:**
   - [ ] Navigate to Coverage tab
   - [ ] Verify staff status changed to "Checked In"
   - [ ] Verify check-in time displays
   - [ ] Verify coverage stats updated (checked-in count incremented)

3. **STAFF APP:**
   - [ ] Wait until shift end time
   - [ ] Click Clock Out button
   - [ ] Verify clock out time recorded

4. **CLIENT APP:**
   - [ ] Refresh Coverage tab
   - [ ] Verify staff status changed to "Completed"

5. **STAFF APP:**
   - [ ] Navigate to Time Card
   - [ ] Verify attendance record appears with correct times and hours

**Expected Results:**
- ✅ Clock in updates Coverage status in Client
- ✅ Clock out completes attendance record
- ✅ Time card displays correct hours in Staff app
- ✅ Coverage monitoring reflects real-time status

---

### Scenario 4: Hub Creation → Order Placement

**Preconditions:**
- Client user authenticated
- No existing hubs

**Steps:**
1. **CLIENT APP:**
   - [ ] Navigate to Settings → Hubs
   - [ ] Verify empty state "No hubs configured"
   - [ ] Click Add Hub button
   - [ ] Enter hub name and use Google Places autocomplete
   - [ ] Select address from suggestions
   - [ ] Verify address fields auto-filled
   - [ ] Save hub

2. **CLIENT APP:**
   - [ ] Navigate to Create Order
   - [ ] Verify new hub appears in hub selection list
   - [ ] Select new hub and complete order creation

3. **STAFF APP:**
   - [ ] Navigate to Shifts → Available
   - [ ] Verify shift shows correct hub name and address

**Expected Results:**
- ✅ Hub created in Settings appears in order creation
- ✅ Hub address propagates to shift details in Staff app

---

### Scenario 5: Shift Cancellation → Staff Notification

**Preconditions:**
- Staff has accepted shift assignment

**Steps:**
1. **CLIENT APP:**
   - [ ] Navigate to View Orders
   - [ ] Select order with assigned staff
   - [ ] Cancel shift (if feature exists) or delete order

2. **STAFF APP:**
   - [ ] Refresh Shifts tab
   - [ ] Verify shift moved to Cancelled tab
   - [ ] Verify shift removed from My Shifts
   - [ ] Verify cancellation reason displays

3. **STAFF APP:**
   - [ ] Verify shift removed from Home dashboard

**Expected Results:**
- ✅ Cancelled shift moves to Cancelled tab
- ✅ Shift removed from active assignments
- ⚠️ **Requires clarification:** Cancellation feature may not be fully implemented

---

### Scenario 6: Authentication State Sharing

**Preconditions:**
- Neither app authenticated

**Steps:**
1. **CLIENT APP:**
   - [ ] Sign in with email/password
   - [ ] Verify Firebase Auth token generated

2. **STAFF APP:**
   - [ ] Launch app
   - [ ] Verify Staff app requires separate authentication
   - [ ] Verify Client session does not carry over

3. **CLIENT APP:**
   - [ ] Sign out

4. **STAFF APP:**
   - [ ] Verify Staff app session persists (independent)

**Expected Results:**
- ✅ Client and Staff apps maintain independent auth sessions
- ✅ Signing out of one app does not affect the other

---

### Scenario 7: Data Created in Client → Visible in Staff

**Preconditions:**
- Client creates multiple orders

**Steps:**
1. **CLIENT APP:**
   - [ ] Create 5 orders on different dates
   - [ ] Create 3 orders on same date with different hubs

2. **STAFF APP:**
   - [ ] Navigate to Shifts → Available
   - [ ] Verify all 8 shifts appear
   - [ ] Verify date grouping correct
   - [ ] Verify hub addresses correct
   - [ ] Apply for 2 shifts

3. **CLIENT APP:**
   - [ ] Navigate to View Orders
   - [ ] Verify 2 shifts show pending applications
   - [ ] Navigate to Coverage
   - [ ] Verify 0 checked-in (pending acceptance)

**Expected Results:**
- ✅ All orders visible in both apps
- ✅ Application states sync correctly
- ✅ Data consistency maintained across apps

---

### Scenario 8: Role-Based Access Differences

**Preconditions:**
- Client user authenticated
- Staff user authenticated

**Steps:**
1. **CLIENT APP:**
   - [ ] Navigate to Billing
   - [ ] Verify billing data displays (Client-only feature)
   - [ ] Navigate to Create Order
   - [ ] Verify order creation available (Client-only feature)

2. **STAFF APP:**
   - [ ] Verify no Billing tab exists
   - [ ] Verify no Create Order feature
   - [ ] Navigate to Availability
   - [ ] Verify availability editing available (Staff-only feature)

3. **CLIENT APP:**
   - [ ] Verify no Availability feature exists
   - [ ] Verify no Clock In feature exists

**Expected Results:**
- ✅ Client app has business management features (orders, billing, hubs)
- ✅ Staff app has worker features (availability, clock in, payments)
- ✅ No feature overlap or unauthorized access

---
