An open-source platform exposing unethical hiring practices like ghosting, fake job postings, and wage baiting. Built to empower job seekers with transparency and accountability tools.
Authentication & User Management
- Secure user registration and login
- Protected user profiles and session management
- Anonymous review submission options
Company Transparency Database
- Company profiles with hiring practice history
- Search companies by name, industry, and location
- Transparency scoring based on user reports
Evidence-Based Review System
- Submit reviews with supporting evidence (screenshots, emails)
- Rate companies on specific hiring practices (ghosting, wage transparency, process clarity)
- Community verification of review authenticity
Hiring Practice Tracking
- Report ghosting, fake job postings, and wage baiting
- Track response times and interview process transparency
- Calculate time and cost waste from poor hiring practices
- 37% Code Reduction: Removed 16,553 lines of unnecessary code
- 29% File Reduction: Eliminated 112 redundant files
- 17% Dependency Reduction: Removed 13 unused dependencies
- Performance: 2.7MB estimated bundle (802KB gzipped)
- Focus: Concentrated on core employer review functionality
- Maintainability: Simplified architecture with reduced technical debt
- 280 files (down from 392)
- 27,589 lines of code (down from 44,142)
- 64 dependencies (down from 77)
- 100% core functionality validation passed
- Built entirely on free tier services
- Next.js 14: React framework with App Router and Server Components
- TypeScript: Full type safety and enhanced developer experience
- Tailwind CSS: Utility-first CSS framework with custom design system
- Radix UI: Accessible component primitives
- Framer Motion: Smooth animations and micro-interactions
- Supabase: PostgreSQL database with real-time subscriptions
- Row Level Security: Granular access control and data protection
- Edge Functions: Serverless functions for complex operations
- Real-time: Live updates and notifications
Security & Monitoring
- Supabase Row Level Security for data protection
- Input validation and sanitization on all forms
- Rate limiting to prevent spam and abuse
- Error tracking with Sentry integration
- Performance monitoring with Web Vitals
- Vercel: Serverless deployment with edge optimization
- GitHub Actions: Automated testing and deployment pipelines
- ESLint & Prettier: Code quality and formatting
- Vitest: Modern testing framework with comprehensive coverage
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Next.js App β β Supabase DB β β External APIs β
β β β β β β
β β’ UI Components βββββΊβ β’ PostgreSQL βββββΊβ β’ News Sources β
β β’ API Routes β β β’ Real-time β β β’ Company Data β
β β’ Middleware β β β’ Authentication β β β’ Financial API β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Monitoring β β Web Scraping β β Security β
β β β β β β
β β’ Performance β β β’ Data Collectionβ β β’ Threat Detect β
β β’ Error Trackingβ β β’ Quality Valid. β β β’ Rate Limiting β
β β’ Analytics β β β’ Ethical Scrape β β β’ Input Valid. β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
- Node.js >= 20.0.0
- npm >= 10.0.0
- Supabase account
-
Clone the repository:
git clone https://github.com/Kabi10/ratemyemployer.git cd ratemyemployer -
Install dependencies:
npm install
-
Environment Configuration:
cp .env.example .env.local
Required environment variables (Free):
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
π‘ Zero-Cost Operation: The application works completely free with just Supabase credentials!
-
Database Setup:
# Initialize Supabase locally (optional) npx supabase start # Run database migrations npx supabase db push
-
Start Development Server:
npm run dev
-
Open your browser: Navigate to http://localhost:3000
# Run unit tests
npm run test
# Run tests with coverage
npm run test:coverage
# Run E2E tests
npx playwright test
# Run component tests
npm run test:components
# Run integration tests
npm run test:integration# Lint code
npm run lint
# Format code
npm run format
# Type checking
npm run type-check
# Build for production
npm run buildcompanies- Company profiles and metadatareviews- Employee reviews and ratingsusers- User authentication and profilescompany_news- News articles and company updates
scraping_jobs- Web scraping automationscraped_data- Collected external datacompany_data_enhancements- AI-enhanced company informationperformance_metrics- Performance monitoringsecurity_events- Security monitoringerror_logs- Error tracking and logging
# Create new migration
npx supabase migration new migration_name
# Apply migrations
npx supabase db push
# Reset database
npx supabase db reset- UI Design System Upgrade - Complete design system implementation
- Web Scraping Infrastructure - Automated data collection system
- Supabase Evaluation - Database strategy and optimization
- Platform Enhancement Recommendations - Future improvements roadmap
- New Sections Implementation - Financial distress and rising startups features
- Companies API:
/api/companies- Company CRUD operations - Reviews API:
/api/reviews- Review management - Scraping API:
/api/scraping- Web scraping operations - Monitoring API:
/api/monitoring- Performance and security metrics
- Connect your GitHub repository to Vercel
- Configure environment variables in Vercel dashboard
- Deploy automatically on push to main branch
NEXT_PUBLIC_SUPABASE_URL=your_production_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_production_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_production_service_role_key- Bundle Analysis:
npm run analyze - Lighthouse Audit: Built-in performance monitoring
- Core Web Vitals: Real-time tracking and optimization
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run the test suite:
npm run test - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Maintain test coverage above 90%
- Use conventional commit messages
- Update documentation for new features
- Ensure accessibility compliance (WCAG 2.1 AA)
This project is licensed under the MIT License - see the LICENSE file for details.
Shoutout to the tools that made this possible without breaking the bank:
- Supabase - Because who has time to manage PostgreSQL servers?
- Vercel - Deploy with a git push. It just works.
- Next.js - React, but actually good for production
- Tailwind - Finally, CSS that doesn't make me want to quit programming
- Radix UI - Accessibility without the headache
And to everyone who's been ghosted by a recruiter - this one's for you.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Project Wiki
Built with β€οΈ by Kabi
Empowering career decisions through authentic workplace insights
npm run build
npm run start
npm run lint
npm run mcp:setup # Set up MCP for the first time npm run mcp:start # Start the MCP server npm run mcp:runner # Run the interactive MCP CLI npm run mcp:update-schema # Update MCP schema from Supabase
npm run migrations:run # Run database migrations
## Database Population
To populate your database with sample data for development:
```bash
# Install tsx for running TypeScript scripts
npm install -g tsx
# Populate companies (default: 50 companies)
tsx scripts/populate-companies.ts
# Populate companies with custom count
tsx scripts/populate-companies.ts 100
# Populate reviews (default: 10 reviews per company)
tsx scripts/populate-reviews.ts
# Populate reviews with custom counts
tsx scripts/populate-reviews.ts 50 15 # 50 companies, 15 reviews each
Note: Make sure your Supabase environment variables are set before running population scripts.
# Add test data for Wall of Fame/Shame
npx tsx scripts/add-wall-test-data.ts
# Automated database population
npm run populate:auto # Full automation (Fortune 500 + Startups)
npm run populate:fortune500 # Fortune 500 companies only
npm run populate:startups # Tech startups onlysrc/
βββ app/ # Next.js app router pages
βββ components/ # React components
βββ contexts/ # React contexts
βββ hooks/ # Custom hooks
βββ lib/ # Utilities and configurations
βββ types/ # TypeScript types
scripts/
βββ add-wall-test-data.ts # Add test data for Wall of Fame/Shame
βββ mcp-sample-queries.ts # Sample MCP queries
βββ mcp-stored-procedures.sql # SQL stored procedures for MCP
βββ run-mcp-server.js # Interactive MCP server runner
βββ setup-mcp.ts # MCP setup script
βββ update-mcp-schema.ts # Update MCP schema from Supabase
βββ run-migrations.ts # Run database migrations
βββ setup-stored-procedures.ts # MCP stored procedures setup
tests/
βββ e2e/ # End-to-end tests
βββ fixtures/ # Test data
βββ utils/ # Test utilities
RateMyEmployer features a Wall of Fame and Wall of Shame to highlight the highest and lowest-rated companies based on employee reviews.
- Wall of Fame: Showcases companies with the highest ratings
- Wall of Shame: Highlights companies with the lowest ratings
- Industry Filtering: Filter companies by industry
- Advanced Filtering: Filter by location, size, and rating range
- Company Statistics: View statistics about companies, reviews, and ratings
- News Integration: See latest news about featured companies
To populate the Wall of Fame and Wall of Shame with test data:
npx tsx scripts/add-wall-test-data.tsThis script adds:
- 5 companies with high ratings for the Wall of Fame
- 5 companies with low ratings for the Wall of Shame
- 4 positive reviews for each Wall of Fame company
- 4 negative reviews for each Wall of Shame company
- Wall of Fame:
/fame - Wall of Shame:
/shame
The Wall of Fame and Wall of Shame are implemented using:
- Direct Supabase queries for data fetching
- Client-side data processing for statistics
- Industry tabs for easy filtering
- Responsive design for all device sizes
- Color-coded rating indicators (red, yellow, green)
- News integration for featured companies
We use Playwright for end-to-end testing:
- End-to-end tests with Playwright
- Type checking with TypeScript
- Linting with ESLint
# Run E2E tests
npx playwright test
# Run specific test file
npx playwright test company.spec.ts
# Show test report
npx playwright show-reportPlease read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
For security concerns, please refer to our Security Policy.
This project is licensed under the MIT License - see the LICENSE file for details.
The application is configured for deployment on Vercel with the following features:
- Standalone output
- Compressed responses
- Security headers
- Bundle analysis support
- Image optimization with next/image
- Remote patterns for allowed image domains
- Webpack caching enabled
- Bundle analysis available
- TypeScript and ESLint checking enabled
For support, please:
- Check TROUBLESHOOTING.md
- Review PROJECT_GUIDE.md
- Open an issue in the repository
The Wall of Shame feature includes automated news fetching via GitHub Actions. The system:
- Runs twice daily (6 AM and 6 PM UTC)
- Fetches news for the 10 companies with lowest ratings
- Uses free RSS feeds and Google News RSS (no API key required)
- Falls back to SerpAPI if API key is provided
- Stores results in the database for quick access
To enable the news fetching workflow, add these secrets to your GitHub repository:
SUPABASE_URL: Your Supabase project URLSUPABASE_SERVICE_ROLE_KEY: Your Supabase service role key
SERP_API_KEY: Your SerpAPI key (uses free RSS feeds if not provided)
You can manually trigger the news fetch workflow:
The application includes automated database population to quickly add companies from various sources:
- Fortune 500 Companies: Well-known large corporations
- Tech Startups: Popular technology companies and startups
- User Suggestions: Community-driven company additions
- CSV Bulk Import: Administrative batch uploads
- OpenStreetMap: Location-based company discovery
# Full automated population
npm run populate:auto
# Specific data sources
npm run populate:fortune500 # Fortune 500 companies
npm run populate:startups # Tech startups
# Manual script with options
tsx scripts/populate-database-automation.ts --helpThe database population runs automatically:
- Weekly: Every Sunday at 2 AM UTC
- Manual: Trigger via GitHub Actions interface
- Configurable: Choose specific data sources
Users can suggest companies through the application interface:
- Submit company information via suggestion form
- Admin reviews and approves/rejects suggestions
- Approved suggestions automatically become companies
See Database Population Guide for detailed documentation.
The application includes comprehensive Supabase usage monitoring and cost optimization tools:
- Usage Tracking: Database size, bandwidth, storage, and active users
- Cost Estimation: Current and projected monthly costs
- Free Tier Monitoring: Track usage against Supabase free tier limits
- Performance Metrics: Query optimization and database health
# Run comprehensive cost optimization
npm run supabase:optimize
# Monitor current usage and costs
npm run supabase:monitor
# Manual optimization with options
tsx scripts/supabase-cost-optimization.ts --helpThe admin panel includes a dedicated Supabase monitoring dashboard with:
- Real-time usage metrics and alerts
- Cost breakdown and projections
- Usage trends and historical data
- Optimization recommendations
- Zero-Cost Strategy: Optimized to stay within free tier limits
- Automated Alerts: Warnings when approaching usage limits
- Performance Optimization: Database maintenance and query optimization
- Historical Tracking: Usage trends and cost projections
- Migration Planning: Strategic recommendations for scaling
See Supabase Evaluation Report for comprehensive analysis and recommendations.
RateMyEmployer now features specialized sections for tracking company financial health and growth opportunities:
Track companies experiencing financial difficulties and make informed career decisions:
- Distress Indicators: Layoffs, funding issues, revenue decline, leadership changes
- Severity Scoring: 1-5 scale with impact assessment
- Real-time Monitoring: Automated detection from news and review patterns
- Industry Analysis: Breakdown by industry and location
- Trend Tracking: Historical distress patterns and predictions
Discover promising startups and rapidly growing companies:
- Growth Indicators: Funding rounds, expansion, hiring sprees, partnerships
- Growth Scoring: 1-10 scale with confidence metrics
- Funding Information: Latest rounds, valuations, and investor details
- Success Metrics: Awards, recognition, and achievements
- Opportunity Filtering: Filter by growth stage and potential
# Run automated indicator detection
npm run sections:detect
# Add test data for development
npm run sections:test-data
# Manual detection with options
tsx scripts/run-automated-detection.ts --help- Smart Analysis: Automated detection from news articles and review patterns
- Comprehensive Filtering: Industry, location, score ranges, and time periods
- Visual Indicators: Color-coded severity and growth levels
- Real-time Updates: Continuous monitoring and indicator updates
- Mobile Optimized: Responsive design for all devices
- Financial Distress:
/financial-distress - Rising Startups:
/rising-startups - Integrated Navigation: Accessible from main menu
See New Sections Implementation Guide for detailed technical documentation.
RateMyEmployer features a comprehensive web scraping infrastructure for automated data collection and enhancement:
Sophisticated web scraping systems for automated data collection:
- Multi-Source Scraping: Company websites, news sites, job boards, review platforms
- Intelligent Job Scheduling: Priority-based queue with concurrent processing
- Data Type Specialization: Dedicated scrapers for company data, reviews, news, job listings
- Quality Assurance: Automated validation and quality scoring
- Deduplication: Intelligent duplicate detection and prevention
Respectful and responsible data collection:
- Robots.txt Compliance: Automatic checking and respect for robots.txt files
- Rate Limiting: Configurable limits to avoid overwhelming servers
- User Agent Rotation: Respectful identification and request patterns
- Terms of Service: Framework for respecting platform terms
- Crawl Delays: Intelligent delays based on server responses
Comprehensive quality assurance system:
- Validation Rules: Configurable validation for different data types
- Quality Scoring: Automated assessment of data completeness and accuracy
- Spam Detection: Identifies and filters spam or low-quality content
- Confidence Metrics: Reliability scoring for all scraped data
- Manual Verification: Interface for human validation and verification
# Access the scraping dashboard
# Visit: /scraping
# Run the scraping system
npm run scraping:run
# Demo mode with sample data
npm run scraping:demo
# Monitor existing operations
npm run scraping:monitor
# Validate scraped data quality
npm run scraping:validate- Real-time Monitoring: Live job status and progress tracking
- Statistics Dashboard: Success rates, completion times, quality metrics
- Engine Controls: Start/stop scraping operations
- Job Management: Create, cancel, retry scraping jobs
- Data Enhancement: Automatic company data enrichment
- Company Data: Basic information, industry, description, contact details
- News Monitoring: Company mentions, sentiment analysis, relevance scoring
- Job Listings: Career page scraping, position details, requirements
- Review Collection: Employee feedback (with ethical considerations)
- Financial Data: Public financial information and metrics
- Concurrent Processing: Multiple jobs running simultaneously
- Intelligent Queuing: Priority-based job scheduling
- Caching Systems: Robots.txt and metadata caching
- Error Recovery: Automatic retry with exponential backoff
- Resource Management: Memory and CPU optimization
See Web Scraping Infrastructure Guide for comprehensive technical documentation.
RateMyEmployer features a comprehensive, modern design system delivering exceptional user experience:
Modern, accessible UI components with advanced functionality:
- Enhanced Buttons: 8 variants, loading states, icon support, accessibility-first design
- Enhanced Cards: 10 variants, hover effects, structured content, skeleton loading
- Enhanced Inputs: 4 variants, validation states, interactive elements, full accessibility
- Enhanced Navigation: 4 variants, dropdown menus, mobile responsive, theme switching
- Design Tokens: Comprehensive CSS custom properties for consistent theming
Sophisticated visual design with modern patterns:
- Glassmorphism Effects: Subtle transparency and backdrop blur
- Gradient Systems: Dynamic color transitions and animations
- Micro-interactions: Smooth 60fps animations with hardware acceleration
- Responsive Design: Mobile-first, adaptive layouts with touch optimization
- Dark Mode: Complete light/dark theme system with automatic switching
WCAG 2.1 AA compliant throughout the platform:
- Keyboard Navigation: Full keyboard accessibility for all components
- Screen Reader Support: Comprehensive ARIA implementation
- Color Contrast: 4.5:1+ contrast ratios throughout
- Focus Management: Visible focus indicators and proper tab order
- Reduced Motion: Respects user motion preferences
# Access the design system documentation
# Visit: /design-system
# Component usage examples
import { EnhancedButton, EnhancedCard, EnhancedInput } from '@/components/ui';
<EnhancedButton variant="premium" loading>
Premium Action
</EnhancedButton>
<EnhancedCard variant="glass" hoverEffect="lift">
Modern card with glassmorphism
</EnhancedCard>
<EnhancedInput
label="Email"
type="email"
clearable
showValidation
/>Optimized for speed and efficiency:
- CSS-in-JS: Class Variance Authority for minimal bundle size
- Hardware Acceleration: GPU-accelerated transforms and animations
- Code Splitting: Dynamic imports for optimal loading
- Responsive Images: WebP format with intelligent fallbacks
- Efficient Rendering: React.memo and optimized re-renders
Touch-optimized interface design:
- Large Touch Targets: Minimum 44px for all interactive elements
- Gesture Support: Swipe, pinch, and tap interactions
- Adaptive Navigation: Collapsible menus and mobile-first design
- Performance: Optimized animations for lower-end devices
- Modern Aesthetic: Glassmorphism, gradients, and elevated design
- Enhanced UX: Micro-interactions, loading states, and clear feedback
- Accessibility: WCAG 2.1 AA compliance throughout
- Performance: 60fps animations with hardware acceleration
- Consistency: Unified design language with systematic spacing and typography
See UI Design System Upgrade Guide for comprehensive implementation documentation.
- Go to the "Actions" tab in your repository
- Select "Fetch Company News" workflow
- Click "Run workflow"
- Select the branch and click "Run workflow"
RateMyEmployer includes integration with the Model Context Protocol (MCP), which enables natural language interaction with the Supabase database through AI tools like Cursor.
- Query the database using plain English instead of SQL
- Generate complex queries without writing SQL
- Analyze company ratings, review trends, and user activity
- Integrate AI-powered queries into your application
-
Set up the MCP server:
npm run mcp:setup
-
Start the MCP server:
npm run mcp:start
Or use the interactive runner:
npm run mcp:runner
-
Visit the MCP demo page at
/mcp-demoto see it in action
If your Supabase schema changes, you can update the MCP schema:
npm run mcp:update-schemaThis will fetch the latest schema from your Supabase instance and update the MCP configuration files.
As an alternative to PostgreSQL stored procedures, we've implemented a TypeScript-based statistics module in src/lib/statistics.ts. This module provides:
- Industry and location statistics calculation
- Improved reliability over SQL stored procedures
- Full TypeScript type safety
- Better error handling and debugging
- Easy integration with React components
To use the statistics module:
import {
getIndustryStatistics,
getAllIndustryStatistics,
getLocationStatistics,
getAllLocationStatistics
} from '@/lib/statistics';
// Example usage
const industryStats = await getIndustryStatistics();For more details, see the statistics module documentation.
For comprehensive documentation on the MCP integration, see MCP_DOCUMENTATION.md.
RateMyEmployer uses database migrations to manage schema changes. The migrations are stored in the supabase/migrations directory.
To run database migrations:
npm run migrations:runThis will apply any pending migrations to your Supabase instance.
- Create a new SQL file in the
supabase/migrationsdirectory with a timestamp prefix - Write your migration SQL in the file
- Run the migrations using the command above
- Always test migrations in a development environment first
- Back up your database before running migrations in production
- Keep migrations small and focused on specific changes
- Include both "up" and "down" migrations when possible
- Document complex migrations with comments
For more details on database management, see the Database Guide.