Connect talented professionals with leading companies through intelligent resume analysis and job matching
- Overview
- Features
- Tech Stack
- Project Structure
- Installation
- Configuration
- Running the Application
- API Documentation
- Database Schema
- Authentication
- Contributing
- License
JobLink is a modern job matching platform that leverages AI technology to streamline the recruitment process. It provides:
- For Job Seekers: AI-powered resume analysis, personalized job recommendations, and application tracking
- For Employers: Easy job posting, AI-matched candidate screening, and application management
The platform uses intelligent algorithms to extract skills from resumes, match candidates with relevant positions, and provide insights to both parties for better hiring decisions.
- π Resume Upload & Analysis: AI-powered extraction of skills, contact information, and qualifications
- π Smart Job Search: Search and filter jobs by title, location, and requirements
- π Application Tracking: Monitor application status in real-time
- π― Match Scoring: See how well your skills match job requirements
- π€ Profile Management: Update profile information and profile pictures
- π Job Posting: Create and manage job listings with detailed requirements
- π₯ Candidate Review: Review applications with AI-generated match scores
- π Analytics Dashboard: Track job posting performance and applications
- β Application Management: Update candidate status (pending, reviewed, shortlisted, rejected, accepted)
- π’ Company Profile: Manage company information and branding
- π Secure Authentication: Email/password and Google OAuth support (ready for integration)
- π± Responsive Design: Fully responsive UI that works on all devices
- π¨ Professional UI: LinkedIn-inspired design with DaisyUI components
- β‘ Real-time Updates: Instant feedback and state management with Zustand
- π Toast Notifications: User-friendly notifications for all actions
- React 18.3.1 - UI library
- Tailwind CSS 3.4.1 - Utility-first CSS
- Vite 5.1.4 - Build tool and dev server
- Node.js - Runtime environment
- Express.js - Web framework
- Supabase - Database and authentication
- PostgreSQL - Relational database
- JWT - Token-based authentication
- AI/ML Services - Resume parsing and skill extraction
- PostCSS - CSS processing
- Autoprefixer - CSS vendor prefixing
JobLink/
βββ frontend/
β βββ public/
β β βββ logo1.png
β β βββ vite.svg
β βββ src/
β β βββ api/ # API service layer
β β β βββ applications.api.js
β β β βββ auth.api.js
β β β βββ axios.js
β β β βββ jobs.api.js
β β β βββ resumes.api.js
β β βββ components/ # Reusable components
β β β βββ auth/
β β β β βββ LoginForm.jsx
β β β β βββ SignupForm.jsx
β β β βββ candidate/
β β β β βββ ApplicationCard.jsx
β β β β βββ ContactInfo.jsx
β β β β βββ JobCard.jsx
β β β β βββ ResumeCard.jsx
β β β β βββ ResumeUpload.jsx
β β β β βββ SkillsDisplay.jsx
β β β βββ company/
β β β β βββ ApplicationReviewCard.jsx
β β β β βββ JobPostCard.jsx
β β β β βββ JobPostForm.jsx
β β β βββ layout/
β β β β βββ Footer.jsx
β β β β βββ Navbar.jsx
β β β β βββ Sidebar.jsx
β β β βββ shared/
β β β βββ Badge.jsx
β β β βββ EmptyState.jsx
β β β βββ LoadingSpinner.jsx
β β β βββ ProtectedRoute.jsx
β β β βββ StatCard.jsx
β β βββ hooks/ # Custom React hooks
β β β βββ useAuth.js
β β β βββ useFileUpload.js
β β βββ pages/ # Page components
β β β βββ candidate/
β β β β βββ BrowseJobs.jsx
β β β β βββ CandidateDashboard.jsx
β β β β βββ CandidateProfile.jsx
β β β β βββ MyApplications.jsx
β β β β βββ MyResumes.jsx
β β β βββ company/
β β β β βββ CompanyDashboard.jsx
β β β β βββ CompanyProfile.jsx
β β β β βββ CreateJob.jsx
β β β β βββ EditJob.jsx
β β β β βββ MyJobPostings.jsx
β β β β βββ ViewApplications.jsx
β β β βββ public/
β β β βββ LandingPage.jsx
β β β βββ LoginPage.jsx
β β β βββ SignupPage.jsx
β β βββ store/ # Zustand state management
β β β βββ applicationStore.js
β β β βββ authStore.js
β β β βββ jobStore.js
β β β βββ resumeStore.js
β β βββ utils/ # Utility functions
β β β βββ constants.js
β β β βββ formatters.js
β β β βββ skillsExtractor.js
β β β βββ validators.js
β β βββ App.jsx # Main app component
β β βββ index.css # Global styles
β β βββ main.jsx # App entry point
β βββ .gitignore
β βββ eslint.config.js
β βββ index.html
β βββ package.json
β βββ postcss.config.js
β βββ tailwind.config.js
β βββ vite.config.js
βββ backend/ # (Backend implementation)
βββ (Your backend structure)
- Node.js (v16 or higher)
- npm or yarn
- Git
- Supabase Account (for database)
git clone https://github.com/d-mahi14/JobLink-Inheritance.git
cd JobLink-Inheritancecd frontend
npm installcd backend
npm installCreate a .env file in the frontend directory:
# API Configuration
VITE_API_URL=http://localhost:5000/api
# For production
# VITE_API_URL=https://your-api-domain.com/apiVITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key-hereCreate a .env file in the backend directory:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/joblink
# JWT
JWT_SECRET=your-jwt-secret-key
# Server
PORT=5000
NODE_ENV=development
# Google OAuth (Optional)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_CALLBACK_URL=http://localhost:5000/api/auth/google/callbackFrontend:
cd frontend
npm run devThe app will run at http://localhost:3000
Backend:
cd backend
npm run devThe API will run at http://localhost:5000
Frontend:
cd frontend
npm run build
npm run previewRegister a new user (candidate or company)
Request Body:
{
"email": "user@example.com",
"password": "password123",
"fullName": "John Doe",
"userType": "candidate" // or "company"
}Login user
Request Body:
{
"email": "user@example.com",
"password": "password123"
}Response:
{
"session": {
"access_token": "jwt-token"
},
"user": {
"id": "uuid",
"email": "user@example.com"
},
"profile": {
"user_type": "candidate",
"full_name": "John Doe"
}
}Upload and analyze resume
Request Body:
{
"resumeFile": "base64-encoded-file",
"fileName": "resume.pdf"
}Get user's resumes
Delete a resume
Get all jobs (with optional filters)
Query Parameters:
page: Page numbersearch: Search termlocation: Location filter
Create job posting (Company only)
Request Body:
{
"title": "Senior Software Engineer",
"description": "Job description...",
"requirements": ["React", "Node.js"],
"location": "Remote",
"salaryRange": "βΉ80k - βΉ120k",
"status": "active"
}Update job posting
Delete job posting
Apply for a job
Request Body:
{
"jobId": "uuid",
"resumeId": "uuid"
}Get candidate's applications
Get applications for a job (Company only)
Update application status
Request Body:
{
"status": "shortlisted",
"matchScore": 85
}CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255), -- nullable for OAuth users
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);CREATE TABLE profiles (
id UUID PRIMARY KEY REFERENCES users(id),
full_name TEXT NOT NULL,
user_type VARCHAR(50) CHECK (user_type IN ('candidate', 'company')),
profile_pic TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);CREATE TABLE resumes (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id),
file_name TEXT NOT NULL,
file_size INTEGER,
resume_url TEXT NOT NULL,
analysis_data JSONB,
created_at TIMESTAMP DEFAULT NOW()
);CREATE TABLE job_postings (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
company_id UUID REFERENCES users(id),
title TEXT NOT NULL,
description TEXT,
requirements TEXT[],
location TEXT,
salary_range TEXT,
status VARCHAR(50) DEFAULT 'active',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);CREATE TABLE applications (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
job_id UUID REFERENCES job_postings(id),
candidate_id UUID REFERENCES users(id),
resume_id UUID REFERENCES resumes(id),
status VARCHAR(50) DEFAULT 'pending',
match_score INTEGER,
match_details JSONB,
applied_at TIMESTAMP DEFAULT NOW()
);JobLink supports two authentication methods:
- Users sign up with email and password
- Passwords are hashed and stored securely
- JWT tokens are used for session management
- Google Sign-In/Sign-Up buttons are implemented
- OAuth flow components are ready
- Requires backend OAuth setup (see Supabase setup files)
To enable Google OAuth:
- Follow
SUPABASE_SETUP_GUIDE.md(provided separately) - Configure Google OAuth in Supabase Dashboard
- Update environment variables
- Uncomment OAuth routes in backend
- Upload and manage resumes
- Browse and search jobs
- Apply for positions
- Track application status
- View match scores
- Post and manage jobs
- Review applications
- Update candidate status
- Assign match scores
- Manage company profile
- LinkedIn-Inspired Design: Professional and familiar interface
- Responsive Layout: Works seamlessly on mobile, tablet, and desktop
- DaisyUI Components: Pre-built, customizable components
- Toast Notifications: Real-time feedback for user actions
- Loading States: Spinners and skeleton screens for better UX
- Empty States: Helpful messages when no data is available
- Form Validation: Client-side validation for all forms
# Run frontend tests (if configured)
cd frontend
npm test
# Run backend tests (if configured)
cd backend
npm test-
Build the project:
npm run build
-
Deploy the
distfolder to your hosting service -
Set environment variables in hosting dashboard
- Push code to Git repository
- Connect repository to hosting service
- Set environment variables
- Deploy
- Create Supabase project
- Run migrations
- Configure authentication providers
- Update connection strings
- Enhanced AI matching algorithm
- Video interview integration
- Chat/messaging system
- Email notifications
- Advanced analytics dashboard
- Mobile app (React Native)
- Resume builder
- Company verification system
- Payment integration for premium features
- Multi-language support
- AI resume parsing may require backend service configuration
- Google OAuth requires additional setup (guide provided)
- File upload size limited to 5MB
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Use ESLint configuration provided
- Follow React best practices
- Write meaningful commit messages
- Add comments for complex logic
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- Icons by Lucide React
- UI Components by DaisyUI
- Styling by Tailwind CSS
- Database by Supabase
- Live Demo: [Coming Soon]
- Documentation: [Coming Soon]
- API Docs: [Coming Soon]
- GitHub: https://github.com/d-mahi14/JobLink-Inheritance.git
β Star this repo if you find it helpful!