graph TD
A[User Lands on Platform] --> B{User Logged In?}
B -->|No| C[Display Login/Signup Page]
B -->|Yes| D[Display Job Search Dashboard]
C --> C1[User Creates Account/Logs In]
C1 --> D
D --> E[Browse Jobs]
D --> F[View Saved Searches]
D --> G[Track Applications]
D --> H[Access User Profile]
D --> I{Premium User?}
E --> E1[Apply Search Filters]
E1 --> E2[View Job Listings]
E2 --> E3{Interested in Job?}
E3 -->|Yes| E4[View Job Details]
E3 -->|No| E1
E4 --> E5[Save Job]
E4 --> E6[Apply to Job]
E5 --> E1
E6 --> E7[Upload Resume]
E7 --> E8{Premium User?}
E8 -->|Yes| E9[AI Resume Analysis]
E8 -->|No| E10[Standard Application]
E9 --> E9a[View Resume Optimization Suggestions]
E9a --> E9b[Apply Suggested Changes]
E9b --> E9c[Submit Enhanced Resume]
E9c --> E10
E10 --> E11[Confirm Application Submission]
E11 --> D
F --> F1[View Saved Search List]
F1 --> F2[Select Saved Search]
F2 --> E1
F1 --> F3[Create New Saved Search]
F3 --> E1
G --> G1[View Application Status Dashboard]
G1 --> G2[View Application Analytics]
G1 --> G3[Filter Applications by Status]
G3 --> G4[View Specific Application Details]
H --> H1[View Profile Information]
H1 --> H2[Edit Profile]
H1 --> H3[View Application History]
H1 --> H4[View Success Metrics]
I -->|No| J[Display Premium Upgrade Option]
I -->|Yes| K[Access Premium Features]
J --> J1[View Premium Benefits]
J1 --> J2[Purchase Premium Subscription]
J2 --> K
K --> K1[Access AI Resume Enhancement]
K --> K2[View Job Match Scoring]
K --> K3[Access Market Analysis]
K1 --> K1a[Upload Resume for Analysis]
K1a --> K1b[View Resume Optimization Suggestions]
K1b --> K1c[Apply Suggested Changes]
K1c --> K1d[Save Enhanced Resume]
K2 --> K2a[View Match Score for Jobs]
K2a --> K2b[View Detailed Match Analysis]
K2b --> K2c[View Missing Skills/Qualifications]
K3 --> K3a[View Salary Range Visualizations]
K3 --> K3b[View In-Demand Skills Analysis]
K3 --> K3c[Browse Recommended Courses]
K3c --> K3d[Enroll in Course]
DataBase
erDiagram
%% User Database
Users ||--o{ UserProfiles : has
Users ||--o{ UserSkills : has
Users ||--o{ UserExperience : has
Users ||--o{ UserEducation : has
Users ||--o{ UserCertifications : has
Users ||--o{ UserResumes : has
Users ||--o{ UserPreferences : has
Users ||--o{ Sessions : has
Users ||--o{ Applications : submits
Users ||--o{ SavedSearches : creates
Users ||--o{ SearchHistory : generates
Users ||--o{ Subscriptions : purchases
Users ||--o{ PremiumFeatureUsage : uses
Users ||--o{ UserCourseEnrollments : enrolls
Users ||--o{ UserAnalytics : generates
Skills ||--o{ UserSkills : used_in
Skills ||--o{ JobSkills : required_in
SkillCategories ||--o{ Skills : categorizes
%% Job Database
Companies ||--o{ Jobs : posts
Companies ||--o{ CompanyLocations : has
Industries ||--o{ Companies : categorizes
Industries ||--o{ Industries : has_sub_industry
Jobs ||--o{ JobSkills : requires
Jobs ||--o{ Applications : receives
Jobs ||--o{ SearchIndexJobs : indexed_as
Jobs ||--o{ JobAnalytics : generates
Locations ||--o{ Jobs : located_in
Locations ||--o{ CompanyLocations : located_in
Locations ||--o{ Users : located_in
Locations ||--o{ SalaryData : references
Companies ||--o{ SearchIndexCompanies : indexed_as
Companies ||--o{ CompanyAnalytics : generates
%% Application Database
Applications ||--o{ ApplicationTimeline : tracks
Applications ||--o{ ApplicationMessages : contains
Applications ||--o{ InterviewSchedules : schedules
Applications ||--o{ ApplicationFeedback : receives
UserResumes ||--o{ Applications : used_in
%% Search Database
SearchRankingFactors ||--o{ SearchIndexJobs : influences
SearchRankingFactors ||--o{ SearchIndexCompanies : influences
%% Premium Database
SubscriptionPlans ||--o{ Subscriptions : defines
Subscriptions ||--o{ SubscriptionTransactions : generates
PremiumFeatures ||--o{ PremiumFeatureUsage : tracked_in
%% Content Database
CourseProviders ||--o{ Courses : offers
Courses ||--o{ UserCourseEnrollments : has
Skills ||--o{ Courses : teaches
%% Analytics Database
Jobs ||--o{ JobAnalytics : measured_in
Users ||--o{ UserAnalytics : measured_in
Companies ||--o{ CompanyAnalytics : measured_in
This document outlines the complete database architecture required for the job platform. The design is organized into seven domain-specific databases that support all functionality while maintaining appropriate separation of concerns.
The User Database stores all information related to user accounts, profiles, and authentication.
user_id(PK): Unique identifier for each useremail: User's email address (unique)password_hash: Encrypted passwordfirst_name: User's first namelast_name: User's last namephone_number: Contact phone numberlocation_id(FK): Reference to Locations tableprofile_image_url: URL to profile imageaccount_status: Account status (active, suspended, deleted)email_verified: Boolean indicating email verification statusregistration_date: Date when user registeredlast_login_date: Date of most recent loginaccount_type: Type of account (basic, premium)
profile_id(PK): Unique identifier for profileuser_id(FK): Reference to Users tableheadline: Professional headline/titlesummary: Professional summary/bioyears_experience: Total years of professional experiencecurrent_job_title: Current job titlecurrent_company: Current company namedesired_job_title: Desired job titledesired_salary_min: Minimum desired salarydesired_salary_max: Maximum desired salarywilling_to_relocate: Boolean for relocation willingnessremote_preference: Remote work preferenceprivacy_settings: JSON storing privacy preferencesprofile_completion: Percentage of profile completion
user_skill_id(PK): Unique identifieruser_id(FK): Reference to Users tableskill_id(FK): Reference to Skills lookup tableproficiency_level: Self-rated proficiency (1-5)years_experience: Years of experience with skillis_featured: Boolean indicating if skill is featured on profile
experience_id(PK): Unique identifieruser_id(FK): Reference to Users tablecompany_name: Name of employerjob_title: Title held at companylocation_id(FK): Reference to Locations tablestart_date: Employment start dateend_date: Employment end date (null if current)is_current: Boolean indicating if this is current jobdescription: Job description and responsibilitiesachievements: Notable achievements
education_id(PK): Unique identifieruser_id(FK): Reference to Users tableinstitution: Educational institution namedegree: Degree earnedfield_of_study: Major or concentrationstart_date: Start date of educationend_date: End date (null if in progress)is_current: Boolean indicating if currently studyingachievements: Academic achievements
certification_id(PK): Unique identifieruser_id(FK): Reference to Users tablename: Certification nameissuing_organization: Organization that issued certificationissue_date: Date certification was issuedexpiration_date: Date certification expires (if applicable)credential_id: Certification ID/credential numbercredential_url: URL to verify certification
resume_id(PK): Unique identifieruser_id(FK): Reference to Users tablename: Resume name/labelfile_url: Storage URL for resume filecreated_at: Creation dateupdated_at: Last update dateis_default: Boolean indicating if this is the default resumefile_type: Type of file (PDF, DOCX, etc.)parsed_data: JSON containing parsed resume dataai_analysis_data: JSON containing AI analysis results
preference_id(PK): Unique identifieruser_id(FK): Reference to Users tableemail_notifications: JSON with email notification preferencespush_notifications: JSON with push notification preferencesjob_alert_frequency: Frequency of job alertssearch_radius: Default search radius for location-based searchesdefault_search_filters: JSON with default search parametersdisplay_settings: JSON with UI preferences
session_id(PK): Unique session identifieruser_id(FK): Reference to Users tabletoken: Authentication tokenip_address: IP address of sessiondevice_info: Device informationlogin_timestamp: Session start timeexpiry_timestamp: Session expiration timelast_activity: Timestamp of last activityis_active: Boolean indicating if session is active
The Job Database stores all information related to job listings, companies, and related metadata.
job_id(PK): Unique identifier for jobcompany_id(FK): Reference to Companies tabletitle: Job titledescription: Full job descriptionresponsibilities: Job responsibilitiesrequirements: Job requirementsbenefits: Job benefitslocation_id(FK): Reference to Locations tableis_remote: Boolean indicating if job is remoteemployment_type: Type of employment (full-time, part-time, contract, etc.)experience_level: Required experience leveleducation_level: Required education levelsalary_min: Minimum salarysalary_max: Maximum salarysalary_currency: Currency for salarysalary_period: Period for salary (hourly, monthly, yearly)salary_visible: Boolean indicating if salary is visible to applicantsposting_date: Date job was postedexpiration_date: Date job expiresstatus: Status of job (active, filled, expired)views_count: Number of viewsapplications_count: Number of applicationsfeatured: Boolean indicating if job is featuredis_verified: Boolean indicating if job is verified
company_id(PK): Unique identifier for companyname: Company namedescription: Company descriptionwebsite: Company website URLindustry_id(FK): Reference to Industries lookup tablecompany_size: Size range of companyfounded_year: Year company was foundedheadquarters_location_id(FK): Reference to Locations tablelogo_url: URL to company logocover_image_url: URL to company cover imagesocial_links: JSON with social media linksverified: Boolean indicating if company is verifiedrating: Average company rating from reviews
company_location_id(PK): Unique identifiercompany_id(FK): Reference to Companies tablelocation_id(FK): Reference to Locations tableis_headquarters: Boolean indicating if this is HQaddress_line1: Street address line 1address_line2: Street address line 2is_active: Boolean indicating if location is active
job_skill_id(PK): Unique identifierjob_id(FK): Reference to Jobs tableskill_id(FK): Reference to Skills lookup tableis_required: Boolean indicating if skill is requiredis_preferred: Boolean indicating if skill is preferredexperience_years: Years of experience required
location_id(PK): Unique identifiercountry: Country namecountry_code: 2-letter country codestate_province: State or provincecity: City namepostal_code: Postal codelatitude: Geographic latitudelongitude: Geographic longitudetimezone: Local timezone
industry_id(PK): Unique identifiername: Industry namedescription: Industry descriptionparent_industry_id(FK): Self-reference for industry hierarchy
skill_id(PK): Unique identifiername: Skill namedescription: Skill descriptioncategory_id(FK): Reference to SkillCategories table
category_id(PK): Unique identifiername: Category namedescription: Category description
The Application Database tracks all job applications and their lifecycle.
application_id(PK): Unique identifierjob_id(FK): Reference to Jobs tableuser_id(FK): Reference to Users tableresume_id(FK): Reference to UserResumes tablecover_letter_text: Cover letter contentstatus: Application status (submitted, reviewed, interview, rejected, offered, accepted)submission_date: Date application was submittedlast_updated: Date application was last updatedis_premium: Boolean indicating if submitted with premium statusmatch_score: AI-calculated match scoreviewed_by_employer: Boolean indicating if viewed by employerviewed_date: Date application was viewed by employersource: Source of application (search, recommendation, etc.)custom_questions: JSON with responses to custom questionsnotes: Applicant notes
timeline_id(PK): Unique identifierapplication_id(FK): Reference to Applications tablestatus: Status at this pointtimestamp: When status changednotes: Any notes associated with status changeactor_id: ID of user who changed status (recruiter or system)
message_id(PK): Unique identifierapplication_id(FK): Reference to Applications tablesender_id: ID of sender (user or recruiter)sender_type: Type of sender (applicant, recruiter, system)message: Message contenttimestamp: When message was sentread: Boolean indicating if message was readread_timestamp: When message was read
interview_id(PK): Unique identifierapplication_id(FK): Reference to Applications tableinterview_type: Type of interview (phone, video, in-person)scheduled_date: Scheduled date and timeduration_minutes: Duration in minuteslocation: Interview location (or URL for virtual)interviewer_names: Names of interviewersnotes: Interview notesstatus: Status (scheduled, completed, canceled, rescheduled)feedback: Post-interview feedback
feedback_id(PK): Unique identifierapplication_id(FK): Reference to Applications tablestage: Application stage when feedback providedrating: Numerical ratingstrengths: Noted strengthsweaknesses: Areas for improvementdecision: Decision (move forward, reject, hold)provided_by: ID of person providing feedbacktimestamp: When feedback was providedis_shared_with_applicant: Boolean indicating if shared with applicant
The Search Database optimizes job and content searching capabilities.
search_id(PK): Unique identifieruser_id(FK): Reference to Users tablename: Search namesearch_parameters: JSON with search parameterscreated_at: Creation datelast_executed: When search was last executednotification_enabled: Boolean indicating if notifications are enablednotification_frequency: Frequency of notificationsresult_count: Number of results from last execution
history_id(PK): Unique identifieruser_id(FK): Reference to Users tablesearch_query: Search query textsearch_filters: JSON with applied filterstimestamp: When search was performedresults_count: Number of results returnedinteraction_data: JSON with user interaction data
index_id(PK): Unique identifierjob_id(FK): Reference to Jobs tablesearch_vector: Optimized text search vectorkeywords: Extracted keywordslast_indexed: When job was last indexedrelevance_factors: JSON with factors affecting search relevance
index_id(PK): Unique identifiercompany_id(FK): Reference to Companies tablesearch_vector: Optimized text search vectorkeywords: Extracted keywordslast_indexed: When company was last indexed
factor_id(PK): Unique identifiername: Factor namedescription: Description of ranking factorweight: Weight in search algorithmis_active: Boolean indicating if factor is active
The Premium Database manages subscription information and premium feature access.
subscription_id(PK): Unique identifieruser_id(FK): Reference to Users tableplan_id(FK): Reference to SubscriptionPlans tablestatus: Subscription status (active, canceled, expired)start_date: Start date of subscriptionend_date: End date of subscriptionrenewal_date: Next renewal datepayment_method_id: Reference to payment methodauto_renew: Boolean indicating if subscription auto-renewssubscription_source: Source of subscription
plan_id(PK): Unique identifiername: Plan namedescription: Plan descriptionprice: Plan pricecurrency: Currency codebilling_period: Billing period (monthly, annually)features: JSON with included featuresis_active: Boolean indicating if plan is activetrial_days: Number of trial days
transaction_id(PK): Unique identifiersubscription_id(FK): Reference to Subscriptions tableamount: Transaction amountcurrency: Currency codetransaction_date: Date of transactionstatus: Transaction statuspayment_provider: Payment provider namepayment_reference: Reference from payment providerinvoice_url: URL to invoice
usage_id(PK): Unique identifieruser_id(FK): Reference to Users tablefeature_id(FK): Reference to PremiumFeatures tableusage_count: Number of times feature was usedlast_used: When feature was last usedremaining_quota: Remaining usage quota, if applicable
feature_id(PK): Unique identifiername: Feature namedescription: Feature descriptioncategory: Feature categoryquota_period: Period for quota (daily, monthly)quota_amount: Amount of quotais_active: Boolean indicating if feature is active
The Content Database stores educational content, courses, and learning resources.
course_id(PK): Unique identifiertitle: Course titledescription: Course descriptionprovider_id(FK): Reference to CourseProviders tableskill_id(FK): Reference to Skills tablelevel: Course difficulty levelduration_hours: Duration in hoursprice: Course pricecurrency: Currency codeis_free: Boolean indicating if course is freeurl: URL to courseimage_url: URL to course imagerating: Average ratingreviews_count: Number of reviewsenrollment_count: Number of enrollments
provider_id(PK): Unique identifiername: Provider namedescription: Provider descriptionwebsite: Provider websitelogo_url: URL to provider logois_verified: Boolean indicating if provider is verified
enrollment_id(PK): Unique identifieruser_id(FK): Reference to Users tablecourse_id(FK): Reference to Courses tableenrollment_date: Date of enrollmentcompletion_date: Date of completioncompletion_percentage: Percentage completedcertificate_url: URL to completion certificateuser_rating: User's rating of courseuser_review: User's review of course
insight_id(PK): Unique identifiertitle: Insight titledescription: Insight descriptioncategory: Insight categorycontent: Insight contentpublish_date: Date publishedexpiration_date: Date insight expiresis_premium: Boolean indicating if insight is premium contentview_count: Number of views
data_id(PK): Unique identifierjob_title: Job titleindustry_id(FK): Reference to Industries tablelocation_id(FK): Reference to Locations tableexperience_level: Experience levelsalary_min: Minimum salarysalary_max: Maximum salarysalary_median: Median salarysalary_currency: Currency codedata_source: Source of datasample_size: Sample size for datalast_updated: When data was last updated
The Analytics Database aggregates data for reporting and analysis.
analytics_id(PK): Unique identifieruser_id(FK): Reference to Users tablelogin_count: Number of loginsaverage_session_duration: Average session durationlast_30d_activity_days: Days active in last 30 daysjob_views_count: Number of job viewssearch_count: Number of searchesapplication_count: Number of applicationsapplication_completion_rate: Application completion rateinterview_rate: Interview success rateoffer_rate: Offer success ratecourse_enrollment_count: Number of course enrollmentscourse_completion_rate: Course completion rate
analytics_id(PK): Unique identifierjob_id(FK): Reference to Jobs tableview_count: Number of viewsapplication_count: Number of applicationsapplication_to_view_ratio: Ratio of applications to viewsqualified_applicants_count: Number of qualified applicantsaverage_applicant_rating: Average applicant ratingtime_to_fill: Days to fill positionview_sources: JSON with view sourcesapplication_sources: JSON with application sources
analytics_id(PK): Unique identifiercompany_id(FK): Reference to Companies tableprofile_views: Number of company profile viewsjob_views: Number of company job viewsapplication_count: Number of applications to company jobsaverage_response_time: Average time to respond to applicationsemployer_rating: Average employer ratingengagement_metrics: JSON with engagement metrics
metric_id(PK): Unique identifierdate: Date of metricsactive_users: Number of active usersnew_registrations: Number of new registrationspremium_conversions: Number of premium conversionsjob_postings: Number of new job postingsapplications: Number of applicationssearch_queries: Number of search queriesrevenue: Daily platform revenueuser_retention_rate: User retention rate
analytics_id(PK): Unique identifierdate: Date of analyticssearch_term: Search termsearch_count: Number of searchesresult_count_avg: Average number of resultsclick_through_rate: Click-through rateconversion_rate: Conversion rate to applicationsaverage_position_clicked: Average position of clicked results
performance_id(PK): Unique identifieruser_id(FK): Reference to Users tablerecommendation_type: Type of recommendationimpressions: Number of impressionsclicks: Number of clicksapplications: Number of applications from recommendationsalgorithm_version: Version of recommendation algorithmaccuracy_score: Algorithm accuracy score