import React, { useState, useEffect } from 'react';
import { Sliders, DollarSign, Building, MapPin, Briefcase, Award, BookOpen } from 'lucide-react';
const PMSalaryCalculator = () => {
// Base salary data by experience level (in USD)
const baseSalaryByExperience = {
'Entry Level (0-2 years)': 85000,
'Mid Level (3-5 years)': 115000,
'Senior (6-10 years)': 145000,
'Lead/Director (10+ years)': 180000,
'VP/CPO (15+ years)': 220000
};
// Multipliers for various factors
const industryMultipliers = {
'Technology': 1.1,
'Finance/Banking': 1.15,
'Healthcare': 0.95,
'Retail/E-commerce': 0.9,
'SaaS': 1.05,
'Enterprise': 1.0,
'Consumer': 0.95,
'Gaming': 1.0,
'Education': 0.85,
'Non-profit': 0.8
};
const companyMultipliers = {
'Startup (1-50)': 0.9,
'Small (51-200)': 0.95,
'Mid-size (201-1000)': 1.0,
'Large (1001-5000)': 1.05,
'Enterprise (5000+)': 1.1,
'FAANG/Big Tech': 1.3
};
const locationMultipliers = {
'San Francisco Bay Area': 1.3,
'New York City': 1.25,
'Seattle': 1.2,
'Boston': 1.15,
'Los Angeles': 1.15,
'Austin': 1.1,
'Chicago': 1.05,
'Denver': 1.0,
'Portland': 1.0,
'Other US Major City': 0.95,
'US Small City/Rural': 0.85,
'Canada - Toronto/Vancouver': 0.9,
'Canada - Other': 0.85,
'UK - London': 0.95,
'UK - Other': 0.85,
'Western Europe': 0.9,
'Eastern Europe': 0.7,
'Australia': 0.95,
'India': 0.6,
'South East Asia': 0.7,
'Latin America': 0.65,
'Other': 0.8
};
const specialtyMultipliers = {
'Technical Background': 1.05,
'AI/ML Experience': 1.1,
'Data Science Knowledge': 1.05,
'UX/Design Background': 1.03,
'MBA': 1.05,
'Industry Certification(s)': 1.03
};
// Form state
const [experience, setExperience] = useState('Mid Level (3-5 years)');
const [industry, setIndustry] = useState('Technology');
const [companySize, setCompanySize] = useState('Mid-size (201-1000)');
const [location, setLocation] = useState('Other US Major City');
const [specialties, setSpecialties] = useState([]);
const [remoteType, setRemoteType] = useState('Fully Remote');
// Results state
const [salaryRange, setSalaryRange] = useState({ low: 0, mid: 0, high: 0 });
const [showResults, setShowResults] = useState(false);
// Handle specialty selection
const handleSpecialtyChange = (specialty) => {
if (specialties.includes(specialty)) {
setSpecialties(specialties.filter(s => s !== specialty));
} else {
setSpecialties([...specialties, specialty]);
}
};
// Calculate salary range
const calculateSalary = () => {
// Get base salary from experience
const baseSalary = baseSalaryByExperience[experience];
// Apply industry multiplier
const industryAdjusted = baseSalary * industryMultipliers[industry];
// Apply company size multiplier
const companySizeAdjusted = industryAdjusted * companyMultipliers[companySize];
// Apply location multiplier
const locationAdjusted = companySizeAdjusted * locationMultipliers[location];
// Apply specialty multipliers
let specialtyMultiplier = 1;
specialties.forEach(specialty => {
specialtyMultiplier *= specialtyMultipliers[specialty];
});
const finalSalary = locationAdjusted * specialtyMultiplier;
// Remote adjustment (subtle adjustment for fully remote)
let remoteAdjustment = 1;
if (remoteType === 'Fully Remote') {
// Apply a small reduction for fully remote positions
remoteAdjustment = 0.97;
} else if (remoteType === 'Hybrid') {
// Hybrid positions are generally at market rate
remoteAdjustment = 1;
} else if (remoteType === 'Remote First Company') {
// Remote-first companies sometimes pay a premium
remoteAdjustment = 1.02;
}
const remoteAdjusted = finalSalary * remoteAdjustment;
// Create a salary range (+/- 10%)
const mid = Math.round(remoteAdjusted / 1000) * 1000;
const low = Math.round(mid * 0.9 / 1000) * 1000;
const high = Math.round(mid * 1.1 / 1000) * 1000;
setSalaryRange({ low, mid, high });
setShowResults(true);
};
// Format currency
const formatCurrency = (amount) => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
maximumFractionDigits: 0
}).format(amount);
};
return (
Product Manager Salary Calculator
Estimate your market value as a remote Product Manager based on your experience and skills
Experience Level
setExperience(e.target.value)}
className="w-full p-3 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500"
>
{Object.keys(baseSalaryByExperience).map(exp => (
{exp}
))}
Industry
setIndustry(e.target.value)}
className="w-full p-3 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500"
>
{Object.keys(industryMultipliers).map(ind => (
{ind}
))}
Company Size
setCompanySize(e.target.value)}
className="w-full p-3 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500"
>
{Object.keys(companyMultipliers).map(size => (
{size}
))}
Location
setLocation(e.target.value)}
className="w-full p-3 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500"
>
{Object.keys(locationMultipliers).map(loc => (
{loc}
))}
Remote Work Type
setRemoteType(e.target.value)}
className="w-full p-3 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500"
>
Fully Remote
Hybrid (Part Remote, Part Office)
Remote-First Company
Specialties & Skills
{Object.keys(specialtyMultipliers).map(specialty => (
handleSpecialtyChange(specialty)}
className="h-5 w-5 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
/>
{specialty}
))}
Calculate Salary Range
{showResults && (
Your Estimated Salary Range
{formatCurrency(salaryRange.low)} - {formatCurrency(salaryRange.high)}
Mid-point: {formatCurrency(salaryRange.mid)}
This estimate is based on market data for remote Product Manager roles as of 2024.
Note: Actual salaries may vary based on specific company policies, negotiation, and other factors.
)}
About This Calculator
This calculator uses aggregated salary data from multiple sources including job boards, company reports, and industry surveys to estimate appropriate salary ranges for Product Managers.
Calculations factor in experience level, industry, company size, location, and special skills to provide a personalized estimate for remote product management roles.
Last updated: May 2025
);
};
export default PMSalaryCalculator;