NOVENIX PLATFORM - COMPLETE OPERATIONAL WORKFLOW
==================================================
Full system documentation for testing and review
Generated: February 15, 2026
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PLAYER WORKFLOW
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 1: Initial Application
────────────────────────────────────────────────────────────────────────────
Page: PlayerApplication
User Action: Player fills out initial application form
Required Fields:
• Full Name
• Age
• Current Level (youth_academy, college, semi_pro, professional, other)
• Primary Position
• Contact Email
• Optional: Best Media Link
• Optional: Why Now (one sentence)
System Action:
• Creates PlayerApplication record (status: "new")
• Creates PlayerDetailedIntake record (status: "pending")
• Sends confirmation email to player
Entities Updated: PlayerApplication, PlayerDetailedIntake
Email Sent: Application confirmation to player
STEP 2: Admin Review - Application
────────────────────────────────────────────────────────────────────────────
Page: ApplicationReview (Admin only)
Admin Actions:
• View all applications filtered by status
• Review player details and detailed intake
• Add reviewer notes
• Change status to: new, shortlisted, rejected, invited_to_onboarding
• Delete applications
System Action (if "invited_to_onboarding"):
• Creates PlayerOnboarding record (status: "in_progress")
• Sends invitation email with onboarding link
Entities Updated: PlayerApplication, PlayerOnboarding
Email Sent: Onboarding invitation to player
STEP 3: Player Detailed Intake
────────────────────────────────────────────────────────────────────────────
Page: PlayerDetailedIntake
User Action: Player completes detailed information form
Fields:
• Injury History
• Academic Institution + Link
• Club Team Link
• Season Appearances
• Season Goals
• Season Assists
• Additional Stats
• Career Highlights
System Action:
• Updates PlayerDetailedIntake (status: "completed")
Entities Updated: PlayerDetailedIntake
STEP 4: Player Onboarding
────────────────────────────────────────────────────────────────────────────
Page: PlayerOnboarding
User Action: Player completes full onboarding form
Required Fields:
• Full Legal Name
• Date of Birth
• Nationality
• Location
• Contact Email
• WhatsApp
• Primary Position
• Secondary Positions (array)
• Dominant Foot (left/right/both)
• Height in cm (optional)
• Current Club/School/College
• Current Level
• Media Links (array)
• Full Match Video (optional)
• Stat Profile Link (optional)
• 3 Consent Checkboxes (must all be true)
System Action:
• Updates PlayerOnboarding (status: "submitted")
Entities Updated: PlayerOnboarding
STEP 5: Admin Review - Onboarding
────────────────────────────────────────────────────────────────────────────
Page: OnboardingReview (Admin only)
Admin Actions:
• View all onboarding submissions
• Review all submitted information
• Mark as "submitted" (if not already)
• Create Player Profile from onboarding data
• Delete onboarding records
System Action (when "Create Profile" clicked):
• Creates PlayerProfile record (status: "under_review", verified: false)
• Copies all data from PlayerOnboarding to PlayerProfile
• Updates PlayerOnboarding (status: "profile_created")
Entities Updated: PlayerOnboarding, PlayerProfile
STEP 6: Profile Building & Review
────────────────────────────────────────────────────────────────────────────
Page: ProfileView (Admin only)
Admin Actions:
• View complete player profile
• Generate AI-assisted bio
• Edit and save bio
• Generate Scout Report with AI
• Publish Scout Report
• Update quality gate checklist
Scout Report Generation Includes:
• Executive Summary
• Technical Assessment
• Tactical Fit Analysis
• Key Strengths (array)
• Areas for Development (array)
• Data Gaps (array)
• Profile Completeness Score
• Recommended Next Steps
• AI Confidence Score
System Action (when report published):
• Creates/Updates ScoutReport (status: "published")
• Updates PlayerProfile (profile_status: "published")
Entities Updated: PlayerProfile, ScoutReport
STEP 7: Profile Management
────────────────────────────────────────────────────────────────────────────
Page: ProfileManagement (Admin only)
Admin Actions:
• View all player profiles in grid
• Search by name or position
• Filter by profile_status
• Change profile_status (under_review, dossier_built, quality_gate,
verified, published, active, archived)
• Toggle verified badge
• Delete profiles
• Navigate to detailed ProfileView
CRITICAL AUTOMATION - When status changed to "published":
• System checks for scout report
• Fetches all PlayerFavorite records for this player
• Sends email notification to EACH industry professional who favorited
the player
• Email includes: player name, position, club, nationality, and login link
Entities Updated: PlayerProfile
Emails Sent: Scout report notifications to favorited industry users
STEP 8: Player Portal Access
────────────────────────────────────────────────────────────────────────────
Page: PlayerPortal (Player view)
Access: Player must be logged in, matched by email
Player Can See:
• Status banner (verified/under review)
• Profile status badge
• Complete profile information (exactly what industry sees)
• Profile photo, name, position
• Nationality, DOB, contact visibility
• Club, level, foot, height, secondary positions
• Biography
• Media links
• Full scout report (if available)
• "Request Profile Update" button
Alert: If detailed intake is pending, shows action button
STEP 9: Player Update Requests
────────────────────────────────────────────────────────────────────────────
Component: UpdateRequestForm (in modal)
Player Actions:
• Select update type: profile_photo, media_links, contact_info,
club_change, availability_status
• Provide requested changes (JSON object)
• Add explanation notes
• Submit request
System Action:
• Creates UpdateRequest record (status: "submitted")
Entities Created: UpdateRequest
STEP 10: Admin Review - Update Requests
────────────────────────────────────────────────────────────────────────────
Page: UpdateRequestReview (Admin only)
Admin Actions:
• View all update requests
• Filter by status
• Review requested changes
• Read player notes
• Add admin notes
• Approve (applies changes to PlayerProfile)
• Reject (updates status only)
• Delete requests
System Action (on approval):
• Updates PlayerProfile with requested changes
• Updates UpdateRequest (status: "approved")
Entities Updated: UpdateRequest, PlayerProfile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INDUSTRY WORKFLOW
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 1: Industry Access Request
────────────────────────────────────────────────────────────────────────────
Page: IndustryAccess
User Action: Industry professional requests access
Required Fields:
• Full Name
• Contact Email
• Title (professional role)
• Organization (team/club name)
• Reasoning (why they need access)
System Action:
• Creates IndustryIntake record (status: "submitted")
• Shows confirmation message
Entities Created: IndustryIntake
STEP 2: Admin Review - Industry Access
────────────────────────────────────────────────────────────────────────────
Page: IndustryReview (Admin only)
Admin Actions:
• View all industry access requests
• Filter by status
• Review applicant details and reasoning
• Add reviewer notes
• Approve or Reject
System Action (on APPROVAL):
• Updates IndustryIntake (status: "approved")
• Creates IndustryProfile record
• Sets access_granted_date to today
• Sets profile_status to "active"
• Sends approval email to applicant
System Action (on REJECTION):
• Updates IndustryIntake (status: "rejected")
• Sends rejection email to applicant
Entities Updated: IndustryIntake, IndustryProfile (created on approval)
Emails Sent: Approval or rejection notification
STEP 3: Industry Portal Access
────────────────────────────────────────────────────────────────────────────
Page: IndustryPortal (Industry view)
Access: Must be logged in + have approved IndustryIntake
Profile Card at Top Shows:
• Industry professional's name
• Title and organization
• "Active Access" badge
• Access granted date
• Contact email
System Action on Page Load:
• Updates IndustryProfile.last_active to current timestamp
Below Profile - Scout Reports Grid:
• Search bar (name, position, club, nationality)
• Grid of verified + published player profiles
• Each card shows: photo, name, position, nationality, age, club, level
• Click to view full scout report
Entities Updated: IndustryProfile (last_active)
STEP 4: Viewing Scout Reports
────────────────────────────────────────────────────────────────────────────
Page: ScoutReports (redirected from IndustryPortal click)
Component: PlayerProfile component
Industry Professional Can See:
• Full player profile header with photo and verified badge
• Player information (age, nationality, position)
• School/team/organization
• Preferred foot, date of birth
• Performance metrics
• Video highlights
• Scout assessment (bio_review)
• Trend analysis
• Key strengths
• Areas for development
• Favorite Button (heart icon)
Back button returns to IndustryPortal
STEP 5: Favoriting Players
────────────────────────────────────────────────────────────────────────────
Component: FavoriteButton (on PlayerProfile page)
User Action: Click heart icon to favorite/unfavorite player
System Action (on favorite):
• Creates PlayerFavorite record
• Links industry_profile_id to player_profile_id
• Stores player_name and industry_email for notifications
• Button changes to filled heart, "Favorited" text
System Action (on unfavorite):
• Deletes PlayerFavorite record
• Button changes to empty heart, "Add to Favorites" text
PURPOSE: When admin publishes scout report updates, ALL industry users who
favorited that player get email notification
Entities Updated: PlayerFavorite
STEP 6: Industry Access Management
────────────────────────────────────────────────────────────────────────────
Page: IndustryAccessManagement (Admin only)
Admin Can:
• View all IndustryProfile records
• Search by name, organization, or email
• See access granted date
• Set access expiry date (optional)
• View expiry status (expired, expiring soon, expiring, active)
• Send expiry notification emails
• Update profile_status (active, suspended, archived)
Expiry Warning System:
• Shows color-coded badges based on days until expiry
• Red: Expired
• Amber: 7 days or less
• Yellow: 30 days or less
• Green: More than 30 days
• "Send Expiry Notice" button when ≤7 days and not yet sent
• Tracks expiry_notification_sent to prevent duplicate emails
Entities Updated: IndustryProfile
Emails Sent: Access renewal/expiry notifications
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ENTITIES & DATA MODEL
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PLAYER ENTITIES
────────────────────────────────────────────────────────────────────────────
• PlayerApplication: Initial application
Status: new, shortlisted, rejected, invited_to_onboarding
• PlayerDetailedIntake: Additional statistics and career info
Status: pending, completed
• PlayerOnboarding: Full onboarding form
Status: in_progress, submitted, profile_created
• PlayerProfile: Canonical player profile
Status: under_review, dossier_built, quality_gate, verified, published,
active, archived
• ScoutReport: AI-generated professional evaluation
Status: draft, review, approved, published
• UpdateRequest: Player-submitted profile update requests
Status: submitted, under_review, approved, rejected
INDUSTRY ENTITIES
────────────────────────────────────────────────────────────────────────────
• IndustryIntake: Access requests
Status: submitted, under_review, approved, rejected
• IndustryProfile: Active industry professional profiles
Status: active, suspended, archived
• PlayerFavorite: Links industry professionals to players they're tracking
KEY RELATIONSHIPS
────────────────────────────────────────────────────────────────────────────
• PlayerApplication → PlayerDetailedIntake (application_id)
• PlayerApplication → PlayerOnboarding (application_id)
• PlayerOnboarding → PlayerProfile (onboarding_id)
• PlayerProfile → ScoutReport (player_profile_id)
• PlayerProfile → UpdateRequest (player_profile_id)
• IndustryIntake → IndustryProfile (intake_id)
• IndustryProfile + PlayerProfile → PlayerFavorite
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AUTOMATED EMAIL NOTIFICATIONS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PLAYER EMAILS
────────────────────────────────────────────────────────────────────────────
• Application Confirmation: Sent immediately after PlayerApplication
submission
• Onboarding Invitation: Sent when admin changes status to
"invited_to_onboarding"
INDUSTRY EMAILS
────────────────────────────────────────────────────────────────────────────
• Access Approved: Sent when admin approves IndustryIntake
• Access Rejected: Sent when admin rejects IndustryIntake
• Access Expiry Warning: Manual trigger by admin when access is expiring soon
• Scout Report Available: AUTOMATIC - sent to ALL industry users who favorited
a player when that player's profile status changes to "published"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ADMIN DASHBOARD & PAGES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• AdminDashboard: Central hub with links to all admin functions
• ApplicationReview: Review and manage player applications
• OnboardingReview: Review onboarding submissions and create profiles
• ProfileView: Detailed profile editing, bio generation, scout report creation
• ProfileManagement: Grid view of all profiles with status management
• UpdateRequestReview: Review and approve/reject player update requests
• IndustryReview: Review and approve/reject industry access requests
• IndustryAccessManagement: Manage industry profiles, expiry dates, renewals
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FULL SYSTEM TEST CHECKLIST
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PLAYER JOURNEY TEST
────────────────────────────────────────────────────────────────────────────
□ Submit player application from PlayerApplication page
□ Verify PlayerApplication and PlayerDetailedIntake records created
□ Verify confirmation email received
□ Admin reviews in ApplicationReview
□ Admin invites to onboarding
□ Verify onboarding invitation email received
□ Complete PlayerDetailedIntake form
□ Complete PlayerOnboarding form
□ Admin reviews in OnboardingReview
□ Admin creates PlayerProfile
□ Admin views profile in ProfileView
□ Admin generates bio with AI
□ Admin generates scout report with AI
□ Admin publishes report
□ Verify profile visible in ProfileManagement
□ Player logs in and accesses PlayerPortal
□ Verify player sees complete profile and scout report
□ Player submits update request
□ Admin reviews in UpdateRequestReview
□ Admin approves update
□ Verify changes applied to profile
INDUSTRY JOURNEY TEST
────────────────────────────────────────────────────────────────────────────
□ Submit industry access request from IndustryAccess page
□ Verify IndustryIntake record created
□ Admin reviews in IndustryReview
□ Admin approves access
□ Verify IndustryProfile created
□ Verify approval email received
□ Industry user logs in and accesses IndustryPortal
□ Verify profile card displays at top
□ Verify last_active timestamp updated
□ Search for players in scout reports grid
□ Click player to view full scout report
□ Click favorite button (heart icon)
□ Verify PlayerFavorite record created
□ Test unfavorite functionality
□ Admin accesses IndustryAccessManagement
□ Admin sets expiry date for industry profile
□ Verify expiry status badge shows correct color
□ Admin sends expiry notification
□ Verify expiry email received
□ Verify expiry_notification_sent flag updated
AUTOMATED NOTIFICATION TEST
────────────────────────────────────────────────────────────────────────────
□ Industry user favorites a player
□ Admin updates that player's status to "published" in ProfileManagement
□ Verify email sent to industry user about scout report update
□ Create second industry user who favorites same player
□ Update player profile status again
□ Verify BOTH industry users receive email
□ Test with player who has NO favorites (no emails sent)
EDGE CASES & ERROR HANDLING
────────────────────────────────────────────────────────────────────────────
□ Try accessing PlayerPortal without login
□ Try accessing PlayerPortal with no profile
□ Try accessing IndustryPortal without approval
□ Try accessing IndustryPortal with suspended profile
□ Test update request with invalid data
□ Test scout report generation with incomplete profile
□ Test favoriting same player twice
□ Test deleting profile with existing favorites
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STATUS FLOW DIAGRAMS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PlayerApplication Status Flow
────────────────────────────────────────────────────────────────────────────
new → shortlisted → invited_to_onboarding
new → rejected (end)
shortlisted → rejected (end)
PlayerOnboarding Status Flow
────────────────────────────────────────────────────────────────────────────
in_progress → submitted → profile_created
PlayerProfile Status Flow
────────────────────────────────────────────────────────────────────────────
under_review → dossier_built → quality_gate → verified → published → active
any_status → archived (end)
ScoutReport Status Flow
────────────────────────────────────────────────────────────────────────────
draft → review → approved → published
IndustryIntake Status Flow
────────────────────────────────────────────────────────────────────────────
submitted → under_review → approved (creates IndustryProfile)
submitted → under_review → rejected (end)
IndustryProfile Status Flow
────────────────────────────────────────────────────────────────────────────
active → suspended → active (can toggle)
active → archived (end)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
END OF DOCUMENT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━