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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Novenix

Football visibility and evaluation platform. Structured player profiles. Reviewed applications. Clear information sources.

Novenix LLC

novenix.org

Novenix is a player visibility and discovery platform. We do not act as agents, intermediaries, or representatives for any player or club. All contact between players and industry professionals is made independently.

No outcome guarantees. Information and access only.

© 2026 Novenix. All rights reserved.