Skip to main content

Staff User Cases: Crew Portal Workflows

Actors: Lisa (EVS Operator, Freelancer), Johan (when acting as crew) User Cases: UC-11, UC-12, UC-13, UC-14, UC-15, UC-16


Overview​

This document covers the crew self-service portal workflows on crew.pbs.com:

  • UC-11: Staff Registration (Invite-Only)
  • UC-12: Account Setup & Login
  • UC-13: Update Profile
  • UC-14: Receive & Respond to Offers
  • UC-15: Negotiate Rate
  • UC-16: View Assignments & Documents

The crew portal is designed for mobile-first access, allowing freelancers like Lisa to manage their profile, respond to offers, and view assignments from their phone between takes.


UC-11: Staff Registration (Invite-Only)​

Goal: Lisa receives an invitation from Susanne and registers for the crew portal.

Actors: Lisa (New crew member)

Preconditions:

  • Susanne has sent an invitation from backend.pbs.com
  • Lisa received invitation email

System: crew.pbs.com


UI Journey​

Step 1: Lisa Receives Invitation Email

From: NCP via PBS <noreply@pbs.com>
To: lisa@example.com
Subject: Invitation to join NCP crew portal

────────────────────────────────────────────

Hi Lisa,

Susanne from NCP (New Century Production) has invited you to join
their crew portal on PBS.

Complete your registration to:
β€’ Update your profile and availability
β€’ Receive job offers
β€’ View your assignments
β€’ Download contracts and travel documents

[Complete Registration]

This link expires in 14 days.

────────────────────────────────────────────

Step 2: Lisa Clicks "Complete Registration" β†’ Registration Form

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com β”‚
β”‚ β”‚
β”‚ Welcome to PBS! β”‚
β”‚ Susanne invited you to join NCP crew portal β”‚
β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Complete your profile β”‚
β”‚ β”‚
β”‚ ═══ BASIC INFORMATION ═══════════════════════════════════ β”‚
β”‚ β”‚
β”‚ First name * [Lisa__________] β”‚
β”‚ Last name * [Berg__________] β”‚
β”‚ β”‚
β”‚ Email * [lisa@example.com] (pre-filled) β”‚
β”‚ Phone * [+46 70 123 4567] β”‚
β”‚ β”‚
β”‚ ═══ LOCATION & IDENTITY ═════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Home base city * [Stockholm_____] β”‚
β”‚ Address [Storgatan 12, 114 51 Stockholm] β”‚
β”‚ β”‚
β”‚ Personal ID [850615-1234] (personnummer) β”‚
β”‚ Nationality [SE - Sweden β–Ό] β”‚
β”‚ Passport number [12345678] β”‚
β”‚ β”‚
β”‚ ═══ EMERGENCY CONTACT ═══════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Name * [Anna Berg_____] β”‚
β”‚ Phone * [+46 70 987 6543] β”‚
β”‚ Relation [Spouse β–Ό] β”‚
β”‚ β”‚
β”‚ ═══ PROFILE PHOTO (REQUIRED) ════════════════════════════ β”‚
β”‚ β”‚
β”‚ Upload a clear photo for crew passes and ID badges β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [ πŸ“· ] β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Drag photo β”‚ β”‚
β”‚ β”‚ or click β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Upload Photo] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ [Continue to Skills & Preferences] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Continue" β†’ Skills & Preferences

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com - Complete Profile (2/2) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ═══ YOUR SKILLS ═════════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Select your functions/roles: * β”‚
β”‚ β”‚
β”‚ Search: [EVS___________] πŸ” β”‚
β”‚ β”‚
β”‚ Selected (2): β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ“ EVS Operator Seniority: [Senior β–Ό] [βœ•] β”‚ β”‚
β”‚ β”‚ βœ“ VAR Operator Seniority: [Mid β–Ό] [βœ•] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [+ Add Another Function] β”‚
β”‚ β”‚
β”‚ ═══ PREFERENCES ═════════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Languages β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β€’ Swedish (Native) [βœ•] β”‚ β”‚
β”‚ β”‚ β€’ English (Fluent) [βœ•] β”‚ β”‚
β”‚ β”‚ β€’ German (Basic) [βœ•] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ [+ Add Language] β”‚
β”‚ β”‚
β”‚ Food Preferences β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ [Vegetarian________________________________________] β”‚ β”‚
β”‚ β”‚ [No shellfish (allergy)____________________________] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ Clothing Sizes β”‚
β”‚ Shirt: [M β–Ό] Pants: [32 β–Ό] Shoes: [39 EU β–Ό] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ [← Back] [Submit Registration] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: Click "Submit Registration" β†’ Review Confirmation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Registration submitted! β”‚
β”‚ β”‚
β”‚ Thank you, Lisa! β”‚
β”‚ β”‚
β”‚ Your profile has been submitted for review. β”‚
β”‚ Susanne will review your information and approve your β”‚
β”‚ account shortly. β”‚
β”‚ β”‚
β”‚ You'll receive an email when your account is ready. β”‚
β”‚ β”‚
β”‚ [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions​

  1. Load invitation from token:
SELECT * FROM staff_invitations
WHERE token = {token_from_url}
AND status = 'pending'
AND (expires_at IS NULL OR expires_at > NOW())
  1. Mark invitation as opened:
UPDATE staff_invitations
SET status = 'opened',
opened_at = NOW()
WHERE id = {invitation_id}
  1. Create profile submission:
INSERT INTO profile_submissions (
company_id, staff_invitation_id,
data, -- JSON with all form fields
status, submitted_at
) VALUES (
{company_id}, {invitation_id},
'{
"first_name": "Lisa",
"last_name": "Berg",
"email": "lisa@example.com",
"phone": "+46 70 123 4567",
"home_base_city": "Stockholm",
"address": "Storgatan 12, 114 51 Stockholm",
"personal_id_number": "850615-1234",
"nationality": "SE",
"passport_number": "12345678",
"emergency_contact_name": "Anna Berg",
"emergency_contact_phone": "+46 70 987 6543",
"emergency_contact_relation": "spouse",
"photo_url": "s3://photos/lisa-berg.jpg",
"functions": [
{"id": "uuid-evs", "seniority": "senior"},
{"id": "uuid-var", "seniority": "mid"}
],
"languages": [
{"code": "sv", "proficiency": "native"},
{"code": "en", "proficiency": "fluent"},
{"code": "de", "proficiency": "basic"}
],
"food_preferences": ["Vegetarian", "No shellfish (allergy)"],
"clothing_sizes": {"shirt": "M", "pants": "32", "shoes": "39"}
}',
'pending',
NOW()
)
  1. Update invitation status:
UPDATE staff_invitations
SET status = 'completed',
completed_at = NOW(),
profile_submission_id = {submission_id}
WHERE id = {invitation_id}

UC-12: Account Setup & Login​

Goal: After Susanne approves Lisa's registration, Lisa receives login credentials and accesses the crew portal.

Actors: Lisa (Approved crew member)

Preconditions:

  • Lisa's registration was approved by Susanne (UC-09 in admin workflows)
  • Profile created, welcome email sent

System: crew.pbs.com


UI Journey​

Step 1: Lisa Receives Welcome Email

From: NCP via PBS <noreply@pbs.com>
To: lisa@example.com
Subject: Welcome to NCP crew portal - Your account is ready!

────────────────────────────────────────────

Hi Lisa,

Great news! Susanne has approved your registration.

Your crew portal account is now active.

[Set Your Password]

────────────────────────────────────────────

Step 2: Click "Set Your Password" β†’ Password Setup

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com - Set Password β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Welcome, Lisa! β”‚
β”‚ β”‚
β”‚ Create a password to access your crew portal account β”‚
β”‚ β”‚
β”‚ Email: lisa@example.com β”‚
β”‚ β”‚
β”‚ Password: [β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’] β”‚
β”‚ Confirm password: [β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’] β”‚
β”‚ β”‚
β”‚ β˜‘ Remember me on this device β”‚
β”‚ β”‚
β”‚ [Create Password & Log In] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Login β†’ Dashboard (First Time)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com [Lisa β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Welcome, Lisa! πŸ‘‹ β”‚
β”‚ β”‚
β”‚ ═══ YOUR ASSIGNMENTS ════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ No upcoming assignments yet. β”‚
β”‚ β”‚
β”‚ ═══ PENDING OFFERS ══════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ No offers at the moment. β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ πŸ“± Mobile App Coming Soon β”‚
β”‚ For now, bookmark this page on your phone for quick access β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ [View My Profile] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions​

  1. When Susanne approves (happens in backend.pbs.com):
-- Create profile
INSERT INTO crew_profiles (
first_name, last_name, email, phone,
home_base_city, address,
personal_id_number, nationality, passport_number,
emergency_contact_name, emergency_contact_phone, emergency_contact_relation,
photo_url,
languages, food_preferences, clothing_sizes
)
SELECT
data->>'first_name', data->>'last_name', data->>'email', data->>'phone',
data->>'home_base_city', data->>'address',
data->>'personal_id_number', data->>'nationality', data->>'passport_number',
data->>'emergency_contact_name', data->>'emergency_contact_phone', data->>'emergency_contact_relation',
data->>'photo_url',
data->'languages', data->'food_preferences', data->'clothing_sizes'
FROM profile_submissions
WHERE id = {submission_id}

-- Create profile functions
INSERT INTO profile_functions (profile_id, function_id, seniority)
SELECT {new_profile_id}, func->>'id', func->>'seniority'
FROM profile_submissions,
jsonb_array_elements(data->'functions') AS func
WHERE id = {submission_id}

-- Create user account (CREW role)
INSERT INTO users (
company_id, email, name, role, profile_id
) VALUES (
{company_id},
'lisa@example.com',
'Lisa Berg',
'CREW',
{new_profile_id}
)

-- Update submission
UPDATE profile_submissions
SET status = 'approved',
approved_profile_id = {new_profile_id},
reviewed_by_user_id = {susanne_user_id},
reviewed_at = NOW()
WHERE id = {submission_id}

-- Send welcome email with password setup link
  1. When Lisa sets password:
UPDATE users
SET password = {hashed_password},
email_verified_at = NOW()
WHERE email = 'lisa@example.com'

UC-13: Update Profile​

Goal: Lisa updates her profile information (skills, preferences, emergency contact, photo).

Actors: Lisa (Crew member)

Preconditions:

  • Lisa has active account
  • Logged in to crew.pbs.com

System: crew.pbs.com


UI Journey​

Step 1: Navigate to Profile

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com [Lisa β–Ό] β”‚
β”‚ β”‚
β”‚ [Dashboard] [Assignments] [Profile] [Documents] β”‚
β”‚ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ═══ MY PROFILE ══════════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ [Photo] β”‚ Lisa Berg β”‚
β”‚ β”‚ β”‚ EVS Operator (Senior) β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Stockholm, Sweden β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ CONTACT INFORMATION [Edit] β”‚
β”‚ β€’ Email: lisa@example.com β”‚
β”‚ β€’ Phone: +46 70 123 4567 β”‚
β”‚ β€’ Home base: Stockholm β”‚
β”‚ β€’ Address: Storgatan 12, 114 51 Stockholm β”‚
β”‚ β”‚
β”‚ EMERGENCY CONTACT [Edit] β”‚
β”‚ β€’ Anna Berg (Spouse) β”‚
β”‚ β€’ +46 70 987 6543 β”‚
β”‚ β”‚
β”‚ IDENTITY β”‚
β”‚ β€’ Personal ID: 850615-**** β”‚
β”‚ β€’ Nationality: Sweden β”‚
β”‚ β€’ Passport: 12345678 β”‚
β”‚ β”‚
β”‚ SKILLS & EXPERIENCE [Edit] β”‚
β”‚ β€’ EVS Operator (Senior) - 6 years β”‚
β”‚ β€’ VAR Operator (Mid) - 2 years β”‚
β”‚ β”‚
β”‚ LANGUAGES [Edit] β”‚
β”‚ β€’ Swedish (Native) β”‚
β”‚ β€’ English (Fluent) β”‚
β”‚ β€’ German (Basic) β”‚
β”‚ β”‚
β”‚ PREFERENCES [Edit] β”‚
β”‚ β€’ Food: Vegetarian, No shellfish (allergy) β”‚
β”‚ β€’ Clothing: Shirt M, Pants 32, Shoes 39 β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click [Edit] for Skills β†’ Edit Form

Lisa learned VAR operations and wants to update seniority.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Edit Skills & Experience [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Your functions: β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ“ EVS Operator Seniority: [Senior β–Ό] [βœ•] β”‚ β”‚
β”‚ β”‚ βœ“ VAR Operator Seniority: [Senior β–Ό] [βœ•] β”‚ β”‚ ← Changed from Mid
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [+ Add Another Function] β”‚
β”‚ β”‚
β”‚ Equipment you own: β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ [EVS XT3 workstation____________________________] β”‚ β”‚
β”‚ β”‚ [Backup EVS system________________________________] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Save Changes] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions​

-- Update profile function seniority
UPDATE profile_functions
SET seniority = 'senior' -- Changed from 'mid'
WHERE profile_id = {lisa_profile_id}
AND function_id = {var_operator_function_id}

-- Update profile
UPDATE crew_profiles
SET updated_at = NOW()
WHERE id = {lisa_profile_id}

UC-14: Receive & Respond to Offers​

Goal: Lisa receives an offer from Susanne, views details, and accepts it.

Actors: Lisa (Crew member)

Preconditions:

  • Susanne sent offer via backend.pbs.com (UC-04)
  • Offer email sent to Lisa

System: crew.pbs.com


UI Journey​

Step 1: Lisa Receives Offer Email

From: Susanne via PBS <susanne@ncp.com>
To: lisa@example.com
Subject: New job offer: EVS Operator - Champions League Final

────────────────────────────────────────────

Hi Lisa,

Susanne has sent you an offer for:

Champions League Final 2025
Madrid, Spain β€’ May 10-15, 2025

Role: EVS Operator
Rate: 22,000 SEK (3 work days + 2 travel days)

[View Offer]

Offer expires: May 5, 2025

────────────────────────────────────────────

Step 2: Click "View Offer" β†’ Offer Details (Mobile View)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com [Lisa β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ New Offer from Susanne β”‚
β”‚ β”‚
β”‚ ═══ CHAMPIONS LEAGUE FINAL 2025 ═══ β”‚
β”‚ β”‚
β”‚ πŸ“ Madrid, Spain β”‚
β”‚ 🏟️ Estadio Santiago BernabΓ©u β”‚
β”‚ πŸ“… May 10-15, 2025 β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ YOUR ROLE β”‚
β”‚ EVS Operator (Instant Replay) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ COMPENSATION β”‚
β”‚ β”‚
β”‚ β€’ 3 work days @ 5,500 SEK β”‚
β”‚ = 16,500 SEK β”‚
β”‚ β”‚
β”‚ β€’ 2 travel days @ 2,750 SEK β”‚
β”‚ = 5,500 SEK β”‚
β”‚ β”‚
β”‚ πŸ’° Total: 22,000 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ CLIENT: UEFA β”‚
β”‚ DEPARTURE FROM: Stockholm β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ MESSAGE FROM SUSANNE: β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Hi Lisa! β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ We'd love to have you as EVS β”‚ β”‚
β”‚ β”‚ Operator for the Champions β”‚ β”‚
β”‚ β”‚ League Final in Madrid, β”‚ β”‚
β”‚ β”‚ May 10-15. β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ I know you have the Football β”‚ β”‚
β”‚ β”‚ Match May 12-14, but could β”‚ β”‚
β”‚ β”‚ you make it work? This is a β”‚ β”‚
β”‚ β”‚ big one! β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Let me know! β”‚ β”‚
β”‚ β”‚ - Susanne β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ ⚠️ You have a conflict: β”‚
β”‚ Football Match (May 12-14) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ Offer expires: May 5, 2025 β”‚
β”‚ β”‚
β”‚ ═════════════════════════════════ β”‚
β”‚ β”‚
β”‚ [βœ“ Accept] [βœ— Decline] [πŸ’¬ Negotiate]β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Lisa decides she can make it work and accepts.

Step 3: Click "Accept" β†’ Confirmation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Offer accepted! β”‚
β”‚ β”‚
β”‚ Your acceptance has been sent to β”‚
β”‚ Susanne. β”‚
β”‚ β”‚
β”‚ She'll review and confirm your β”‚
β”‚ assignment shortly. β”‚
β”‚ β”‚
β”‚ You'll receive an email when your β”‚
β”‚ assignment is confirmed. β”‚
β”‚ β”‚
β”‚ [View Dashboard] [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: Dashboard Updated (Pending Confirmation)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com [Lisa β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Dashboard β”‚
β”‚ β”‚
β”‚ ═══ PENDING CONFIRMATION ═══════ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ⏳ Awaiting Susanne's confirmationβ”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Champions League Final 2025 β”‚ β”‚
β”‚ β”‚ EVS Operator β€’ May 10-15 β”‚ β”‚
β”‚ β”‚ 22,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ You accepted 10 minutes ago β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ═══ UPCOMING ASSIGNMENTS ═══════ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ“ Ice Hockey Finals β”‚ β”‚
β”‚ β”‚ EVS Operator β€’ March 15-20 β”‚ β”‚
β”‚ β”‚ [View Details] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions​

  1. When Lisa views offer (click email link):
-- Fetch offer
SELECT
ao.*,
pf.work_days, pf.travel_days,
p.name AS project_name, p.location_city, p.location_venue,
p.start_date, p.end_date,
p.client_name,
f.name AS function_name
FROM assignment_offers ao
JOIN project_functions pf ON ao.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE ao.id = {offer_id}
AND ao.profile_id = {lisa_profile_id}

-- Check for conflicts
SELECT a.*, p.name AS conflicting_project
FROM assignments a
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
WHERE a.profile_id = {lisa_profile_id}
AND (a.start_date, a.end_date) OVERLAPS ('2025-05-10', '2025-05-15')
AND a.current_status NOT IN ('cancelled')
  1. When Lisa clicks "Accept":
UPDATE assignment_offers
SET status = 'accepted',
responded_at = NOW()
WHERE id = {offer_id}
  1. Dashboard query (pending confirmation):
SELECT * FROM assignment_offers
WHERE profile_id = {lisa_profile_id}
AND status = 'accepted'
ORDER BY responded_at DESC

UC-15: Negotiate Rate​

Goal: Lisa wants to negotiate the rate on an offer before accepting.

Actors: Lisa (Crew member)

Preconditions:

  • Lisa has received an offer
  • Viewing offer in crew.pbs.com

System: crew.pbs.com


UI Journey​

Step 1: Viewing Offer (Different Project)

Lisa receives an offer for Ice Hockey Finals at 4,500 SEK/day, but her usual rate is 5,000 SEK.

Step 2: Click "πŸ’¬ Negotiate" β†’ Negotiation Form

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Negotiate Offer β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Ice Hockey Finals 2025 β”‚
β”‚ Sound Mixer β€’ March 15-20 β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ CURRENT OFFER: β”‚
β”‚ β€’ Work day: 4,500 SEK Γ— 4 days β”‚
β”‚ β€’ Travel day: 2,250 SEK Γ— 2 days β”‚
β”‚ β€’ Total: 22,500 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ WHAT'S YOUR RATE? β”‚
β”‚ β”‚
β”‚ Work day: [5000] SEK/day β”‚
β”‚ Travel day: [2500] SEK/day β”‚
β”‚ β”‚
β”‚ New total: 25,000 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ MESSAGE TO SUSANNE (optional): β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Hi Susanne, β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Thanks for the offer! I'd β”‚ β”‚
β”‚ β”‚ love to work on this project,β”‚ β”‚
β”‚ β”‚ but my current rate for β”‚ β”‚
β”‚ β”‚ finals is 5,000 SEK. β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Can we match that? β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Thanks, β”‚ β”‚
β”‚ β”‚ Lisa β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ℹ️ Susanne will review your request β”‚
β”‚ and get back to you. β”‚
β”‚ β”‚
β”‚ [Send Request] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Send Request" β†’ Confirmation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Negotiation request sent β”‚
β”‚ β”‚
β”‚ Susanne will review your rate and β”‚
β”‚ get back to you. β”‚
β”‚ β”‚
β”‚ You'll receive an email when there's β”‚
β”‚ an update. β”‚
β”‚ β”‚
β”‚ [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

After this, Susanne discusses with Lisa externally (phone/email), they agree on a rate, and Susanne updates the offer in the backend (see UC-05).


System Actions​

UPDATE assignment_offers
SET status = 'negotiating',
staff_response = 'Thanks for the offer! I'd love to work...',
counter_work_rate_cents = 500000, -- 5,000 SEK
counter_travel_rate_cents = 250000, -- 2,500 SEK
responded_at = NOW()
WHERE id = {offer_id}

UC-16: View Assignments & Documents​

Goal: Lisa views her confirmed assignments, travel details, and downloads documents (contract, road book).

Actors: Lisa (Crew member)

Preconditions:

  • Lisa has confirmed assignments
  • Susanne has booked travel, generated contract and road book

System: crew.pbs.com


UI Journey​

Step 1: Dashboard β†’ Upcoming Assignments

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ crew.pbs.com [Lisa β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Dashboard β”‚
β”‚ β”‚
β”‚ ═══ UPCOMING ASSIGNMENTS (2) ═══ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ“ Champions League Final 2025 β”‚ β”‚
β”‚ β”‚ EVS Operator β”‚ β”‚
β”‚ β”‚ May 10-15 β€’ Madrid β”‚ β”‚
β”‚ β”‚ 22,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [View Details] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ“ Ice Hockey Finals β”‚ β”‚
β”‚ β”‚ EVS Operator β”‚ β”‚
β”‚ β”‚ March 15-20 β€’ Helsinki β”‚ β”‚
β”‚ β”‚ 28,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [View Details] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click "View Details" β†’ Assignment Details

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Champions League Final 2025 β”‚
β”‚ ESC-2025-042 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ [Overview] [Travel] [Documents] β”‚
β”‚ β”‚
β”‚ ═══ ASSIGNMENT DETAILS ═════════ β”‚
β”‚ β”‚
β”‚ YOUR ROLE: β”‚
β”‚ EVS Operator (Instant Replay) β”‚
β”‚ β”‚
β”‚ DATES: β”‚
β”‚ May 10-15, 2025 β”‚
β”‚ β”‚
β”‚ LOCATION: β”‚
β”‚ Estadio Santiago BernabΓ©u β”‚
β”‚ Av. de Concha Espina 1, Madrid β”‚
β”‚ β”‚
β”‚ CLIENT: β”‚
β”‚ UEFA β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ COMPENSATION β”‚
β”‚ β€’ 3 work days @ 5,500 SEK β”‚
β”‚ = 16,500 SEK β”‚
β”‚ β€’ 2 travel days @ 2,750 SEK β”‚
β”‚ = 5,500 SEK β”‚
β”‚ β€’ Total: 22,000 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ JOB DETAILS β”‚
β”‚ β€’ Meals: βœ“ Included β”‚
β”‚ β€’ Parking: On-site available β”‚
β”‚ β€’ Dress code: Smart casual β”‚
β”‚ β€’ Equipment: Provided on site β”‚
β”‚ β”‚
β”‚ ───────────────────────────────── β”‚
β”‚ β”‚
β”‚ CONTACT: β”‚
β”‚ Susanne (PM) β”‚
β”‚ +46 70 123 4567 β”‚
β”‚ susanne@ncp.com β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Travel" Tab

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Champions League Final - Travel β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ═══ OUTBOUND FLIGHT ════════════ β”‚
β”‚ β”‚
β”‚ ✈️ SAS SK1234 β”‚
β”‚ β”‚
β”‚ πŸ“… May 10, 2025 β”‚
β”‚ πŸ›« Stockholm ARN T5 β†’ πŸ›¬ Madrid MAD T4β”‚
β”‚ β”‚
β”‚ Departure: 08:30 β”‚
β”‚ Arrival: 12:45 β”‚
β”‚ β”‚
β”‚ Booking ref: ABC123 β”‚
β”‚ β”‚
β”‚ ═══ HOTEL ══════════════════════ β”‚
β”‚ β”‚
β”‚ 🏨 Hotel Princesa Plaza β”‚
β”‚ β”‚
β”‚ πŸ“ Calle de la Princesa 40, Madrid β”‚
β”‚ ☎️ +34 91 234 5678 β”‚
β”‚ β”‚
β”‚ Check-in: May 10, 15:00 β”‚
β”‚ Check-out: May 15, 11:00 β”‚
β”‚ Nights: 5 β”‚
β”‚ β”‚
β”‚ Booking ref: HTL789 β”‚
β”‚ β”‚
β”‚ ═══ RETURN FLIGHT ═════════════ β”‚
β”‚ β”‚
β”‚ ✈️ SAS SK1235 β”‚
β”‚ β”‚
β”‚ πŸ“… May 15, 2025 β”‚
β”‚ πŸ›« Madrid MAD T4 β†’ πŸ›¬ Stockholm ARN T5β”‚
β”‚ β”‚
β”‚ Departure: 18:00 β”‚
β”‚ Arrival: 22:15 β”‚
β”‚ β”‚
β”‚ Booking ref: RTN456 β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: Click "Documents" Tab

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Champions League Final - Documents β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ═══ AVAILABLE DOCUMENTS ═══════ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“„ Contract β”‚ β”‚
β”‚ β”‚ Service Agreement β”‚ β”‚
β”‚ β”‚ Uploaded: May 3, 2025 β”‚ β”‚
β”‚ β”‚ [Download PDF] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ—ΊοΈ Road Book β”‚ β”‚
β”‚ β”‚ Travel & venue details β”‚ β”‚
β”‚ β”‚ Generated: May 4, 2025 β”‚ β”‚
β”‚ β”‚ [Download PDF] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“‹ Other Documents β”‚ β”‚
β”‚ β”‚ Upload signed contract β”‚ β”‚
β”‚ β”‚ [Upload File] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions​

Dashboard query (upcoming assignments):

SELECT
a.*,
p.name AS project_name, p.location_city,
f.name AS function_name,
-- Calculate total
(a.work_day_rate_cents * pf.work_days +
a.travel_day_rate_cents * pf.travel_days) AS total_cents
FROM assignments a
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE a.profile_id = {lisa_profile_id}
AND a.current_status NOT IN ('cancelled', 'completed')
AND a.start_date >= CURRENT_DATE
ORDER BY a.start_date ASC

Assignment details query:

-- Same as above plus job details
SELECT
a.*,
a.meals_included, a.parking_info, a.dress_code,
a.equipment_needed, a.special_instructions,
p.name AS project_name, p.client_name,
p.location_venue, p.location_venue_address,
f.name AS function_name,
u.name AS pm_name, u.email AS pm_email, pr.phone AS pm_phone
FROM assignments a
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
JOIN users u ON p.company_id = u.company_id AND u.role = 'ADMIN'
LEFT JOIN profiles pr ON u.profile_id = pr.id
WHERE a.id = {assignment_id}

Travel details query:

SELECT * FROM travel_bookings
WHERE assignment_id = {assignment_id}
ORDER BY departure_at ASC
SELECT * FROM hotel_bookings
WHERE assignment_id = {assignment_id}
ORDER BY check_in_date ASC

Documents query:

SELECT * FROM documents
WHERE documentable_type = 'Assignment'
AND documentable_id = {assignment_id}
ORDER BY created_at DESC

Summary: Staff Portal Workflows​

UC-11: Registration
└─→ Receive invite β†’ Complete registration form (with photo) β†’ Submit for review

UC-12: Account Setup
└─→ Approved by admin β†’ Receive welcome email β†’ Set password β†’ Log in

UC-13: Update Profile
└─→ Edit skills, preferences, emergency contact, photo β†’ Save

UC-14: Respond to Offers
β”œβ”€β†’ Receive email β†’ View offer details (role, dates, rates, message)
β”œβ”€β†’ Accept (one-click) β†’ Awaiting admin confirmation
└─→ Decline β†’ Offer marked as declined

UC-15: Negotiate
└─→ Click "Negotiate" β†’ Enter desired rate + message β†’ Admin reviews externally

UC-16: View Assignments
β”œβ”€β†’ Dashboard: See all upcoming assignments
β”œβ”€β†’ Details: Role, dates, location, compensation, job details
β”œβ”€β†’ Travel: Flights, hotel details
└─→ Documents: Download contract, road book, upload signed docs

Key MVP Features Demonstrated​

  1. Mobile-first design: All views optimized for phone access
  2. Simple one-click actions: Accept/Decline offers with single tap
  3. Complete transparency: See all details (rates, dates, job requirements)
  4. Photo required: Profile photo uploaded during registration
  5. Conflict visibility: System shows conflicting assignments when viewing offers
  6. Structured information: Travel and hotel details clearly organized
  7. Document access: Easy download of contracts and road books


Database Tables Used​

  • staff_invitations - Invite tracking
  • profile_submissions - Registration data
  • profiles - Staff directory
  • users - CREW role accounts
  • profile_functions - Skills/roles
  • assignment_offers - Offers received
  • assignments - Confirmed bookings
  • travel_bookings - Flight/train details
  • hotel_bookings - Hotel details
  • documents - Contracts, road books