Initial commit
This commit is contained in:
241
README.md
Normal file
241
README.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# MysteryApp-Cursor - Recruiter Workflow SAAS
|
||||
|
||||
A comprehensive SAAS application for managing recruiter workflows, built with modern technologies and following TDD principles.
|
||||
|
||||
## Features
|
||||
|
||||
### Core Functionality
|
||||
- **User Management**: Multi-role authentication system (Admin, Recruiter, Employer, Candidate)
|
||||
- **Employer Management**: Company profiles, job postings, candidate management
|
||||
- **Candidate Management**: Profile creation, resume uploads, application tracking
|
||||
- **Job Management**: Job posting creation, filtering, search capabilities
|
||||
- **Application Tracking**: End-to-end application workflow management
|
||||
- **Resume Management**: File upload, download, and management system
|
||||
|
||||
### User Roles
|
||||
- **Admin**: Full system access and user management
|
||||
- **Recruiter**: Candidate and employer management, job posting oversight
|
||||
- **Employer**: Job posting creation, candidate review, application management
|
||||
- **Candidate**: Job browsing, application submission, profile management
|
||||
|
||||
## Technology Stack
|
||||
|
||||
### Backend
|
||||
- **Node.js** with Express.js
|
||||
- **PostgreSQL** database
|
||||
- **JWT** authentication
|
||||
- **Multer** for file uploads
|
||||
- **Jest** for testing
|
||||
- **Docker** containerization
|
||||
|
||||
### Frontend
|
||||
- **React 18** with modern hooks
|
||||
- **React Router** for navigation
|
||||
- **React Query** for data fetching
|
||||
- **Tailwind CSS** for styling
|
||||
- **Lucide React** for icons
|
||||
- **React Hot Toast** for notifications
|
||||
|
||||
### Infrastructure
|
||||
- **Docker Compose** for orchestration
|
||||
- **PostgreSQL** database
|
||||
- **File upload** handling with proper validation
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
- Docker and Docker Compose
|
||||
- Git
|
||||
|
||||
### Installation
|
||||
|
||||
1. **Clone the repository**
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd MysteryApp-Cursor
|
||||
```
|
||||
|
||||
2. **Start the application**
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
3. **Initialize the database**
|
||||
```bash
|
||||
# Run database migrations
|
||||
docker-compose exec MysteryApp-Cursor-backend npm run migrate
|
||||
|
||||
# Seed the database with sample data
|
||||
docker-compose exec MysteryApp-Cursor-backend npm run seed
|
||||
```
|
||||
|
||||
4. **Access the application**
|
||||
- Frontend: http://localhost:3000
|
||||
- Backend API: http://localhost:3001
|
||||
- Database: localhost:5432
|
||||
|
||||
### Demo Accounts
|
||||
|
||||
The application comes with pre-seeded demo accounts:
|
||||
|
||||
- **Admin**: admin@mysteryapp.com / admin123
|
||||
- **Recruiter**: recruiter@mysteryapp.com / recruiter123
|
||||
- **Employer**: employer@techcorp.com / employer123
|
||||
- **Candidate**: candidate@example.com / candidate123
|
||||
|
||||
## API Documentation
|
||||
|
||||
### Authentication Endpoints
|
||||
- `POST /api/auth/register` - User registration
|
||||
- `POST /api/auth/login` - User login
|
||||
- `GET /api/auth/me` - Get current user
|
||||
- `POST /api/auth/logout` - User logout
|
||||
|
||||
### User Management
|
||||
- `GET /api/users` - List all users (Admin only)
|
||||
- `GET /api/users/:id` - Get user by ID
|
||||
- `PUT /api/users/:id` - Update user profile
|
||||
- `PUT /api/users/:id/deactivate` - Deactivate user (Admin only)
|
||||
|
||||
### Job Management
|
||||
- `GET /api/jobs` - List jobs with filtering
|
||||
- `GET /api/jobs/:id` - Get job details
|
||||
- `POST /api/jobs` - Create job posting
|
||||
- `PUT /api/jobs/:id` - Update job posting
|
||||
- `DELETE /api/jobs/:id` - Delete job posting
|
||||
|
||||
### Candidate Management
|
||||
- `GET /api/candidates` - List candidates with filtering
|
||||
- `GET /api/candidates/:id` - Get candidate details
|
||||
- `POST /api/candidates` - Create candidate profile
|
||||
- `PUT /api/candidates/:id` - Update candidate profile
|
||||
|
||||
### Application Management
|
||||
- `GET /api/applications` - List applications
|
||||
- `GET /api/applications/:id` - Get application details
|
||||
- `POST /api/applications` - Submit application
|
||||
- `PUT /api/applications/:id/status` - Update application status
|
||||
|
||||
### Resume Management
|
||||
- `GET /api/resumes/candidate/:candidateId` - Get candidate resumes
|
||||
- `POST /api/resumes/upload` - Upload resume
|
||||
- `GET /api/resumes/:id/download` - Download resume
|
||||
- `PUT /api/resumes/:id/primary` - Set primary resume
|
||||
- `DELETE /api/resumes/:id` - Delete resume
|
||||
|
||||
## Testing
|
||||
|
||||
### Backend Tests
|
||||
```bash
|
||||
# Run all tests
|
||||
docker-compose exec MysteryApp-Cursor-backend npm test
|
||||
|
||||
# Run tests in watch mode
|
||||
docker-compose exec MysteryApp-Cursor-backend npm run test:watch
|
||||
```
|
||||
|
||||
### Frontend Tests
|
||||
```bash
|
||||
# Run frontend tests
|
||||
docker-compose exec MysteryApp-Cursor-frontend npm test
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
### Project Structure
|
||||
```
|
||||
MysteryApp-Cursor/
|
||||
├── backend/
|
||||
│ ├── src/
|
||||
│ │ ├── routes/ # API route handlers
|
||||
│ │ ├── middleware/ # Authentication middleware
|
||||
│ │ ├── database/ # Database schema and migrations
|
||||
│ │ ├── tests/ # Backend tests
|
||||
│ │ └── server.js # Main server file
|
||||
│ ├── uploads/ # File upload directory
|
||||
│ └── Dockerfile
|
||||
├── frontend/
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # Reusable React components
|
||||
│ │ ├── pages/ # Page components
|
||||
│ │ ├── contexts/ # React contexts
|
||||
│ │ └── App.js # Main App component
|
||||
│ └── Dockerfile
|
||||
├── docker-compose.yml # Docker orchestration
|
||||
└── README.md
|
||||
```
|
||||
|
||||
### Database Schema
|
||||
|
||||
The application uses a comprehensive PostgreSQL schema with the following main tables:
|
||||
- `users` - User authentication and basic info
|
||||
- `employers` - Company/employer profiles
|
||||
- `candidates` - Candidate profiles and skills
|
||||
- `jobs` - Job postings with requirements
|
||||
- `applications` - Job applications and status tracking
|
||||
- `resumes` - Resume file management
|
||||
- `interviews` - Interview scheduling and management
|
||||
|
||||
## Features in Detail
|
||||
|
||||
### Job Management
|
||||
- Advanced filtering by location, salary, experience level, skills
|
||||
- Search functionality across job titles and descriptions
|
||||
- Remote work support
|
||||
- Application deadline management
|
||||
- Status tracking (active, paused, closed, draft)
|
||||
|
||||
### Candidate Management
|
||||
- Skills-based filtering and search
|
||||
- Experience level categorization
|
||||
- Location-based filtering
|
||||
- Salary expectation tracking
|
||||
- Portfolio and social media links
|
||||
|
||||
### Application Workflow
|
||||
- Multi-stage application process
|
||||
- Status tracking (applied, reviewed, shortlisted, interviewed, offered, rejected)
|
||||
- Notes and comments system
|
||||
- Interview scheduling capabilities
|
||||
|
||||
### File Management
|
||||
- Secure resume upload with validation
|
||||
- Multiple file format support (PDF, DOC, DOCX, TXT)
|
||||
- File size limits and type validation
|
||||
- Primary resume designation
|
||||
- Secure download with proper access controls
|
||||
|
||||
## Security Features
|
||||
|
||||
- JWT-based authentication
|
||||
- Role-based access control
|
||||
- Password hashing with bcrypt
|
||||
- File upload validation
|
||||
- SQL injection prevention
|
||||
- CORS configuration
|
||||
- Helmet.js security headers
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
- Database indexing for optimal query performance
|
||||
- Pagination for large datasets
|
||||
- Efficient file handling
|
||||
- Optimized React components
|
||||
- Proper error handling and logging
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Add tests for new functionality
|
||||
5. Ensure all tests pass
|
||||
6. Submit a pull request
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License.
|
||||
|
||||
## Support
|
||||
|
||||
For support and questions, please contact the development team or create an issue in the repository.
|
||||
Reference in New Issue
Block a user