import React, { useState, useMemo } from 'react';
import { Heart, Users, MapPin, Building, TrendingUp, DollarSign, Filter } from 'lucide-react';
const NonprofitSalaryTool = () => {
const [selectedRole, setSelectedRole] = useState('Program Manager');
const [selectedSize, setSelectedSize] = useState('All Sizes');
const [selectedCause, setSelectedCause] = useState('All Causes');
const [selectedCity, setSelectedCity] = useState('National Average');
// Base salary data for nonprofit roles
const salaryData = {
'Executive Director': { base: 85000, range: [55000, 135000] },
'Development Director': { base: 72000, range: [48000, 110000] },
'Program Manager': { base: 55000, range: [42000, 72000] },
'Program Director': { base: 68000, range: [52000, 90000] },
'Communications Manager': { base: 52000, range: [38000, 68000] },
'Grant Writer': { base: 48000, range: [35000, 65000] },
'Social Worker': { base: 47000, range: [38000, 58000] },
'Development Coordinator': { base: 42000, range: [32000, 55000] },
'Program Coordinator': { base: 38000, range: [32000, 48000] },
'Administrative Assistant': { base: 35000, range: [28000, 45000] },
'Finance Manager': { base: 58000, range: [45000, 75000] },
'Operations Manager': { base: 56000, range: [43000, 72000] },
'Volunteer Coordinator': { base: 40000, range: [32000, 50000] },
'Case Manager': { base: 44000, range: [36000, 54000] },
'Outreach Coordinator': { base: 41000, range: [34000, 52000] },
'Research Analyst': { base: 49000, range: [40000, 62000] },
'Marketing Manager': { base: 54000, range: [42000, 70000] },
'Human Resources Manager': { base: 61000, range: [48000, 78000] }
};
// Organization size multipliers
const sizeMultipliers = {
'Small (Under $500K budget)': 0.85,
'Medium ($500K - $5M budget)': 1.0,
'Large ($5M - $25M budget)': 1.25,
'Major ($25M+ budget)': 1.45,
'All Sizes': 1.0
};
// Cause area multipliers
const causeMultipliers = {
'Healthcare/Medical': 1.15,
'Education': 1.05,
'Human Services': 0.95,
'Arts & Culture': 0.90,
'Environment': 1.08,
'International': 1.12,
'Religious': 0.88,
'Community Development': 0.92,
'Advocacy/Civil Rights': 1.03,
'Youth Development': 0.94,
'Animal Welfare': 0.89,
'Disaster Relief': 1.06,
'All Causes': 1.0
};
// City multipliers (top 15 nonprofit job markets)
const cityMultipliers = {
'New York, NY': 1.35,
'Washington, DC': 1.28,
'San Francisco, CA': 1.42,
'Los Angeles, CA': 1.22,
'Boston, MA': 1.25,
'Chicago, IL': 1.08,
'Seattle, WA': 1.31,
'Philadelphia, PA': 1.12,
'Atlanta, GA': 1.05,
'Denver, CO': 1.15,
'Minneapolis, MN': 1.09,
'Austin, TX': 1.13,
'Portland, OR': 1.18,
'Miami, FL': 1.07,
'Baltimore, MD': 1.14,
'National Average': 1.0
};
// Calculate adjusted salary based on filters
const calculateAdjustedSalary = useMemo(() => {
if (!salaryData[selectedRole]) return null;
const baseSalary = salaryData[selectedRole].base;
const baseRange = salaryData[selectedRole].range;
const sizeMultiplier = sizeMultipliers[selectedSize] || 1.0;
const causeMultiplier = causeMultipliers[selectedCause] || 1.0;
const cityMultiplier = cityMultipliers[selectedCity] || 1.0;
const totalMultiplier = sizeMultiplier * causeMultiplier * cityMultiplier;
return {
adjustedSalary: Math.round(baseSalary * totalMultiplier),
adjustedRange: [
Math.round(baseRange[0] * totalMultiplier),
Math.round(baseRange[1] * totalMultiplier)
],
multiplier: totalMultiplier
};
}, [selectedRole, selectedSize, selectedCause, selectedCity]);
const formatCurrency = (amount) => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0
}).format(amount);
};
// Get compensation insights
const getInsights = () => {
if (!calculateAdjustedSalary) return [];
const insights = [];
const { multiplier } = calculateAdjustedSalary;
if (multiplier > 1.15) {
insights.push("This combination typically offers above-average nonprofit compensation");
} else if (multiplier < 0.95) {
insights.push("This combination may offer below-average compensation, but often provides strong mission alignment");
}
if (selectedSize.includes('Large') || selectedSize.includes('Major')) {
insights.push("Larger organizations often provide better benefits and professional development opportunities");
}
if (selectedCause === 'Healthcare/Medical' || selectedCause === 'International') {
insights.push("This cause area typically offers competitive salaries due to specialized skill requirements");
}
if (selectedCity === 'San Francisco, CA' || selectedCity === 'New York, NY' || selectedCity === 'Washington, DC') {
insights.push("This city typically offers the highest nonprofit salaries due to cost of living and concentration of major organizations");
} else if (selectedCity === 'Seattle, WA' || selectedCity === 'Boston, MA') {
insights.push("This city offers above-average nonprofit compensation with strong philanthropic communities");
}
return insights;
};
// Sample organizations by size
const getExampleOrgs = () => {
const examples = {
'Small (Under $500K budget)': ['Local food banks', 'Community gardens', 'Neighborhood associations', 'Small arts groups'],
'Medium ($500K - $5M budget)': ['Regional nonprofits', 'Local United Way chapters', 'Community health centers', 'Youth programs'],
'Large ($5M - $25M budget)': ['Regional hospitals', 'Large social service agencies', 'Major museums', 'Multi-state organizations'],
'Major ($25M+ budget)': ['National nonprofits', 'Major universities', 'Large health systems', 'International NGOs']
};
return examples[selectedSize] || [];
};
return (
Nonprofit Salary Research Tool
Explore compensation data for common nonprofit roles
{/* Filters Panel */}
Search Filters
{/* Example Organizations */}
{selectedSize !== 'All Sizes' && (
Example Organizations
{getExampleOrgs().map((org, index) => (
- • {org}
))}
)}
{/* Results Panel */}
{calculateAdjustedSalary && (
<>
{/* Main Salary Display */}
{selectedRole}
Average Salary
{formatCurrency(calculateAdjustedSalary.adjustedSalary)}
Salary Range
{formatCurrency(calculateAdjustedSalary.adjustedRange[0])} - {formatCurrency(calculateAdjustedSalary.adjustedRange[1])}
{/* Breakdown Cards */}
Organization Impact
Size Factor:
{((sizeMultipliers[selectedSize] - 1) * 100).toFixed(0) >= 0 ? '+' : ''}
{((sizeMultipliers[selectedSize] - 1) * 100).toFixed(0)}%
Cause Area:
{((causeMultipliers[selectedCause] - 1) * 100).toFixed(0) >= 0 ? '+' : ''}
{((causeMultipliers[selectedCause] - 1) * 100).toFixed(0)}%
City Factor:
{((cityMultipliers[selectedCity] - 1) * 100).toFixed(0) >= 0 ? '+' : ''}
{((cityMultipliers[selectedCity] - 1) * 100).toFixed(0)}%
Compensation Level
{((calculateAdjustedSalary.multiplier - 1) * 100).toFixed(0) >= 0 ? '+' : ''}
{((calculateAdjustedSalary.multiplier - 1) * 100).toFixed(0)}%
vs. baseline
= 1.1 ? 'bg-green-500' :
calculateAdjustedSalary.multiplier >= 0.95 ? 'bg-blue-500' : 'bg-orange-500'
}`}
style={{ width: `${Math.min((calculateAdjustedSalary.multiplier * 100), 150)}%` }}
>
Below Average
Above Average
{/* Insights */}
Key Insights
{getInsights().length > 0 ? (
getInsights().map((insight, index) => (
•
{insight}
))
) : (
This represents typical nonprofit compensation for your selected criteria.
)}
•
Remember to consider total compensation including benefits, professional development, and mission alignment
{/* Additional Context */}
Important Notes
• Salary ranges reflect current market data and may vary based on specific qualifications and experience
• Many nonprofits offer additional benefits like flexible schedules, professional development, and loan forgiveness programs
• Geographic variations can be significant even within regions - urban areas typically pay more than rural locations
• Consider the total value proposition including mission alignment, growth opportunities, and work-life balance
>
)}
);
};
export default NonprofitSalaryTool;