A production-grade, full-stack compensation intelligence platform inspired by Levels.fyi, AmbitionBox, 6figr, and Glassdoor.
This platform emphasizes that levels matter more than job titles and delivers structured compensation comparisons instead of simple salary listings.
- React.js
- Tailwind CSS v4
- Lucide React Icons
- Recharts (Data Visualizations)
- Vite
- Node.js
- Express.js
- Prisma ORM
- Zod Validation
- PostgreSQL (tested locally on PostgreSQL v18 and fully compatible with Neon)
compensation-intelligence-system/
├── backend/
│ ├── prisma/
│ │ ├── schema.prisma
│ │ └── seed.js
│ │
│ ├── src/
│ │ ├── controllers/
│ │ │ └── salary.controller.js
│ │ │
│ │ ├── services/
│ │ │ └── salary.service.js
│ │ │
│ │ ├── validation/
│ │ │ └── salary.validation.js
│ │ │
│ │ ├── routes/
│ │ │ └── api.routes.js
│ │ │
│ │ ├── app.js
│ │ └── index.js
│ │
│ ├── verify.js
│ ├── .env
│ └── package.json
│
└── frontend/
├── src/
│ ├── components/
│ │ ├── Navbar.jsx
│ │ ├── StatsCard.jsx
│ │ ├── LevelDistributionChart.jsx
│ │ ├── ComparisonCard.jsx
│ │ ├── IngestModal.jsx
│ │ └── SkeletonLoader.jsx
│ │
│ ├── pages/
│ │ ├── Home.jsx
│ │ ├── Salaries.jsx
│ │ ├── Company.jsx
│ │ └── Compare.jsx
│ │
│ ├── utils/
│ │ └── api.js
│ │
│ ├── App.jsx
│ ├── main.jsx
│ └── index.css
│
├── tailwind.config.js
├── postcss.config.js
├── vite.config.js
└── package.jsonMake sure the following are installed:
- Node.js v18+
- PostgreSQL Server
Example local PostgreSQL configuration:
Host: localhost
Port: 5433
Username: postgrescd backendCreate a .env file inside the backend directory:
DATABASE_URL="postgresql://postgres:yadhidya@localhost:5433/compensation_db?schema=public"
PORT=5000
NODE_ENV=developmentCreate database tables and generate Prisma Client:
npx prisma migrate dev --name initPopulate the database with realistic compensation entries from companies such as:
- Meta
- Apple
- Netflix
- Amazon
Run:
npm run prisma:seednpm run startBackend server will run on:
http://localhost:5000Open a separate terminal:
cd frontendnpm run devFrontend application will run on:
http://localhost:3000POST /api/ingest-salary{
"company": "Google",
"role": "Software Engineer",
"level": "L4",
"location": "Mountain View, CA",
"experienceYears": 3,
"baseSalary": 170000,
"bonus": 25000,
"stock": 80000
}{
"success": true,
"message": "Salary data successfully ingested.",
"isDuplicate": false,
"data": {
"id": "de959fa2-e0a1-40d0-b73f-5000ee5f52c7",
"company": "google",
"companyDisplay": "Google",
"role": "Software Engineer",
"level": "L4",
"location": "Mountain View, CA",
"totalCompensation": 275000,
"createdAt": "2026-05-23T10:15:30Z"
}
}GET /api/salariescompany
role
level
location
sortBy
sortOrder
page
limit{
"success": true,
"items": [],
"pagination": {
"total": 23,
"page": 1,
"limit": 10,
"totalPages": 3
}
}GET /api/company/:company{
"success": true,
"data": {
"companyName": "Google",
"totalSubmissions": 6,
"statistics": {
"medianBaseSalary": 204000,
"medianBonus": 25000,
"medianStock": 137500,
"medianTotalCompensation": 371500,
"minTotalCompensation": 210000,
"maxTotalCompensation": 600000
},
"levelDistribution": [
{
"level": "L6",
"count": 1,
"medianTotalCompensation": 600000
},
{
"level": "L5",
"count": 2,
"medianTotalCompensation": 400000
}
],
"salaries": []
}
}GET /api/compare?id1=ID_A&id2=ID_B{
"success": true,
"data": {
"salary1": {},
"salary2": {},
"deltas": {
"baseSalary": {
"difference": 28000,
"percentage": 16.47
},
"bonus": {
"difference": 5000,
"percentage": 20
},
"stock": {
"difference": 40000,
"percentage": 50
},
"totalCompensation": {
"difference": 73000,
"percentage": 26.55
}
}
}
}The frontend can be deployed easily using:
- Vercel
The backend is fully deployable on:
- Render
- Railway
Configure the following environment variables during deployment:
DATABASE_URL=
PORT=
NODE_ENV=productionRun Prisma migrations during deployment:
npx prisma migrate deployThe project is fully compatible with:
- Neon PostgreSQL
Simply copy the Neon connection string into:
DATABASE_URLinside the backend environment configuration.
- Compensation comparison system
- Structured salary analytics
- Company-level insights
- Level-based compensation tracking
- Pagination and filtering
- Salary ingestion system
- Duplicate detection
- Company normalization
- RESTful APIs
- Responsive frontend UI
- Data visualizations
- Scalable backend architecture
- Levels are prioritized over job titles
- Server-side filtering and pagination
- Clean Prisma ORM architecture
- Zod validation for secure APIs
- Duplicate salary entry handling
- Optimized database querying
- Responsive production-ready UI
- Modular and scalable codebase