A modern, production-ready job application platform built with the MERN stack (MongoDB, Express, React, Node.js).
Features • Tech Stack • Quick Start • API Docs • Contributing
This is a fully customizable, enterprise-grade job application platform that provides a complete solution for managing job postings and candidate applications. Built with modern technologies and best practices, it's ready for production deployment while remaining easy to customize for your specific needs.
- Full-Stack Solution: Complete backend API and responsive frontend
- Production-Ready: Security hardening, rate limiting, input validation, and comprehensive error handling
- Highly Customizable: Easy branding and feature configuration via environment variables
- Docker Support: Containerized deployment with Docker Compose
- API-First Design: RESTful API with comprehensive documentation
- Modern UI: Built with Material UI for a polished, responsive experience
- Developer-Friendly: ESLint, Prettier, testing setup, and detailed documentation
-
Job Management
- Create, read, update, and delete job postings
- Filter jobs by type and department
- Pagination support for large datasets
- Search and advanced filtering
-
Application Management
- Submit applications with resume links and cover letters
- View and manage candidate applications
- Application filtering by job
- Email validation and URL verification
-
Security
- Helmet.js for HTTP header security
- CORS with configurable origins
- Rate limiting (100 requests per 15 minutes)
- MongoDB injection protection
- Input validation and sanitization
- Request size limits
-
Developer Experience
- Comprehensive API documentation
- Jest and React Testing Library setup
- ESLint and Prettier configuration
- Hot reload in development
- Docker and Docker Compose support
- Sample test files included
-
Production Features
- Environment-based configuration
- Request logging with Morgan
- Graceful error handling
- Health check endpoints
- CI/CD pipeline with GitHub Actions
- Graceful shutdown handling
- Runtime: Node.js 20.x
- Framework: Express 4.x
- Database: MongoDB 7.x with Mongoose ODM
- Security: Helmet, CORS, express-rate-limit, express-mongo-sanitize
- Validation: express-validator
- Logging: Morgan
- Testing: Jest, Supertest
- Framework: React 18.x
- UI Library: Material UI 5.x
- HTTP Client: Axios
- Build Tool: Create React App
- Testing: Jest, React Testing Library
- Containerization: Docker, Docker Compose
- CI/CD: GitHub Actions
- Code Quality: ESLint, Prettier
- Version Control: Git
Fullstack-Job-Application/
├── backend/ # Node.js backend
│ ├── config/ # Database configuration
│ │ └── db.js
│ ├── models/ # Mongoose models
│ │ ├── Job.js
│ │ └── Application.js
│ ├── routes/ # API routes
│ │ ├── jobs.js
│ │ └── applications.js
│ ├── __tests__/ # Backend tests
│ ├── .env.example # Environment variables template
│ ├── Dockerfile # Backend Docker configuration
│ ├── jest.config.js # Jest configuration
│ ├── package.json
│ └── server.js # Express server entry point
├── frontend/ # React frontend
│ ├── public/ # Static files
│ │ └── index.html
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── Header.js
│ │ │ ├── Footer.js
│ │ │ ├── JobList.js
│ │ │ ├── JobForm.js
│ │ │ └── ApplicationForm.js
│ │ ├── styles/
│ │ │ └── main.css
│ │ ├── App.js
│ │ ├── config.js # Frontend configuration
│ │ └── index.js
│ ├── .env.example # Environment variables template
│ ├── Dockerfile # Frontend Docker configuration
│ └── package.json
├── docs/ # Documentation
│ └── API.md # API documentation
├── .github/
│ └── workflows/
│ └── ci.yml # CI/CD pipeline
├── docker-compose.yml # Docker Compose configuration
├── package.json # Root package.json for scripts
├── .eslintrc.json # ESLint configuration
├── .prettierrc # Prettier configuration
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
└── README.md
- Node.js v18 or higher
- npm v9 or higher
- MongoDB (local instance or MongoDB Atlas)
- Docker (optional, for containerized deployment)
git clone https://github.com/UNC-GDSC/Fullstack-Job-Application.git
cd Fullstack-Job-Applicationnpm run install:allcd backend
cp .env.example .env
# Edit .env with your MongoDB connection string
npm run devBackend Environment Variables:
PORT=5000
NODE_ENV=development
MONGO_URI=mongodb://localhost:27017/job_applications_db
COMPANY_NAME=Your Company Name
COMPANY_LOGO_URL=https://example.com/logo.png
ALLOWED_ORIGINS=http://localhost:3000
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100In a new terminal:
cd frontend
cp .env.example .env
# Edit .env if needed
npm startFrontend Environment Variables:
REACT_APP_API_URL=http://localhost:5000
REACT_APP_COMPANY_NAME=Your Company Name
REACT_APP_COMPANY_LOGO_URL=https://example.com/logo.png- Frontend: http://localhost:3000
- Backend API: http://localhost:5000
- Health Check: http://localhost:5000/api/health
# Start all services (MongoDB, Backend, Frontend)
npm run docker:up
# View logs
npm run docker:logs
# Stop all services
npm run docker:downAccess after Docker deployment:
- Frontend: http://localhost
- Backend API: http://localhost:5000
# Run all tests
npm test
# Backend tests only
npm run test:backend
# Frontend tests only
npm run test:frontend
# Frontend tests with coverage
cd frontend && npm run test:coverage# Format all code
npm run format
# Check formatting
npm run format:check
# Lint code
npm run lint
# Fix linting issues
npm run lint:fixFrom the root directory:
npm run install:all- Install all dependenciesnpm run dev- Run both frontend and backend in development modenpm run dev:backend- Run backend onlynpm run dev:frontend- Run frontend onlynpm test- Run all testsnpm run lint- Lint all codenpm run format- Format all codenpm run docker:up- Start Docker containersnpm run docker:down- Stop Docker containers
Comprehensive API documentation is available in docs/API.md.
GET /api/jobs- Get all jobs (with pagination and filtering)GET /api/jobs/:id- Get single jobPOST /api/jobs- Create new jobPUT /api/jobs/:id- Update jobDELETE /api/jobs/:id- Delete job
GET /api/applications- Get all applicationsGET /api/applications/:id- Get single applicationPOST /api/applications- Submit applicationDELETE /api/applications/:id- Delete application
GET /api/health- API health status
Update environment variables in .env files:
Backend (backend/.env):
COMPANY_NAME=Acme Corporation
COMPANY_LOGO_URL=https://acme.com/logo.pngFrontend (frontend/.env):
REACT_APP_COMPANY_NAME=Acme Corporation
REACT_APP_COMPANY_LOGO_URL=https://acme.com/logo.png- Modify components in
frontend/src/components/ - Update Material UI theme in
frontend/src/App.js - Adjust styles in
frontend/src/styles/main.css
- Extend models in
backend/models/ - Add new routes in
backend/routes/ - Modify validation rules in route files
- Add middleware in
backend/server.js
- Set
NODE_ENV=productionin backend.env - Configure production MongoDB URI
- Set proper CORS origins
- Configure secure secrets
- Heroku: Deploy backend and frontend separately
- Vercel/Netlify: Frontend static hosting
- AWS/Azure/GCP: Full-stack deployment with managed MongoDB
- Docker: Use provided Docker Compose configuration
- VPS: Deploy using PM2 or similar process manager
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
cd backend
npm test # Run tests
npm run test:watch # Watch modecd frontend
npm test # Run tests
npm run test:watch # Watch mode
npm run test:coverage # Generate coverage report- Input validation on all endpoints
- Rate limiting to prevent abuse
- MongoDB injection protection
- Helmet.js for security headers
- CORS configuration
- Environment variable protection
Note: This application should have authentication/authorization implemented before production use.
- Ensure MongoDB is running
- Check
MONGO_URIin.env - For MongoDB Atlas, whitelist your IP
- Change
PORTin backend.env - Update frontend API URL accordingly
# Restart containers
npm run docker:down
npm run docker:up
# View logs
npm run docker:logs
# Rebuild containers
docker-compose up --buildThis project is licensed under the MIT License - see the LICENSE file for details.
Created and maintained by the UNC-Chapel Hill Google Developer Student Club (GDSC) team.
- Material UI for the component library
- MongoDB for the database solution
- The open-source community for various packages and tools
- Issues: GitHub Issues
- Documentation: API Docs | Contributing Guide
- Community: Join our GDSC community
Made with ❤️ by UNC GDSC