JobSeek is an intelligent job search platform that leverages AI to help users find their dream jobs more effectively. The platform provides personalized job recommendations, resume analysis, and smart matching algorithms.
Visit our live application at: JOB-SEEK
- React.js (Vite) - Fast and modern frontend framework
- Tailwind CSS - Utility-first CSS framework
- Clerk - Authentication and user management
- Zod - TypeScript-first schema validation
- Supabase - Backend as a Service (BaaS)
- Database
- Authentication
- RLS Policy Secured database
- Storage
- Clone the repository:
git clone https://github.com/SjxSubham/JOB-SEEK
- Install dependencies:
npm install
-
Environment Setup:
- Copy
.env.sample
to.env
- Add your own API keys and configuration values
- Required environment variables:
VITE_SUPABASE_URL
: Your Supabase project URLVITE_SUPABASE_ANON_KEY
: Your Supabase anonymous keyVITE_CLERK_PUBLISHABLE_KEY
: Your Clerk publishable keyVITE_HUGGINGFACE_API_TOKEN
: Your Hugging Face API token- Other configuration variables as specified in
.env.sample
- Copy
-
Run the development server:
npm run dev
- Build for production:
npm run build
npm preview
The AI Job Recommendation feature uses the Mistral-7B-Instruct-v0.2 model from Hugging Face to provide personalized job matches based on user profiles. Here's how it works: (work is still going on...)
- Located in
src/components/AIJobRecommendation.tsx
- Collects user profile data including:
- Skills
- Years of experience
- Preferred location
- Remote work preference
- Salary expectations
- Job type preferences
- Education background
- Displays job matches in a clean card layout with:
- Job title and company
- Match score
- Job description
- Required skills
- Uses Hugging Face's API with Mistral-7B-Instruct-v0.2 model
- Located in
src/services/aiService.ts
- Processes user profile data and generates a structured prompt
- Returns top 3 job matches with match scores and relevant details
- Add your Hugging Face API key to
.env
:
VITE_HUGGINGFACE_API_KEY=your_api_key_here
- Navigate to the AI Job Recommendation section
- Fill in your profile details
- Click "Find My Matches"
- View your personalized job recommendations
- The AI model analyzes the user profile and generates job matches based on:
- Skill compatibility
- Experience level
- Location preferences
- Salary expectations
- Job type preferences
- Each match includes a match score (0-1) indicating the relevance
- The response is formatted in JSON and processed for display
The platform uses Clerk for authentication. To access protected endpoints, include the session token in the request headers:
headers: {
'Authorization': `Bearer ${sessionToken}`,
'Content-Type': 'application/json'
}
GET /api/jobs
- Get all jobsGET /api/jobs/:id
- Get job by IDPOST /api/jobs
- Create new jobPUT /api/jobs/:id
- Update jobDELETE /api/jobs/:id
- Delete job
GET /api/companies
- Get all companiesGET /api/companies/:id
- Get company by IDPOST /api/companies
- Create new companyPUT /api/companies/:id
- Update companyDELETE /api/companies/:id
- Delete company
GET /api/users/profile
- Get user profilePUT /api/users/profile
- Update user profileGET /api/users/saved-jobs
- Get user's saved jobsPOST /api/users/saved-jobs/:jobId
- Save a jobDELETE /api/users/saved-jobs/:jobId
- Remove a saved job
βββ public/ # static assets
βββ src/
β βββ components/ # Reusable UI components
β β βββ ui/ # Job listing card component
β βββ data/ # JSON Data
β βββ pages/ # React pages and routing
β βββ hooks/ # fectching database.data
β βββ styles/ # Global styles and Tailwind config
β βββ utils/ # Helper functions and utilities
β βββ api/ # Supabase and API integration
| βββ lib/
β βββ types/ # TypeScript type definitions
βββ .env.sample # Environment variables template
βββ vite.config.ts # Vite configuration
JOB-SEEK/
βββ π public/ # Static assets
β βββ πΌοΈ vite.svg
β βββ π index.html
βββ π src/ # Source code
β βββ π api/ # Supabase API integration layer
β β βββ π§ apiJobs.js # Job CRUD operations
β β βββ π§ apiApplication.js # Application management
β β βββ π§ apiCompanies.js # Company data operations
β βββ π components/ # Reusable UI components
β β βββ π ui/ # Base UI components
β β βββ π§© header.jsx # Navigation header
β β βββ π protected-route.jsx # Route protection
β β βββ π¨ theme-provider.jsx # Theme management
β βββ π data/ # Static JSON data
β β βββ π companies.json # Company listings
β β βββ β faq.json # FAQ content
β βββ π hooks/ # Custom React hooks
β β βββ π£ use-fetch.js # Data fetching hook
β βββ π layouts/ # Layout components
β β βββ π app-layout.jsx # Main app layout
β βββ π lib/ # Utility libraries
β βββ π pages/ # React pages/routes
β β βββ π landing.jsx # Landing page
β β βββ π€ onboarding.jsx # User onboarding
β β βββ π jobListing.jsx # Job listings
β β βββ π job.jsx # Job details
β β βββ β post-job.jsx # Job posting
β β βββ πΌ my-jobs.jsx # Recruiter jobs
β β βββ β saved-jobs.jsx # Saved jobs
β βββ π utils/ # Helper utilities
β β βββ π supabase.js # Supabase client config
β βββ π¨ App.css # Global styles
β βββ βοΈ App.jsx # Main App component
β βββ π¨ index.css # Base styles
β βββ π main.jsx # App entry point
βββ π .env.sample # Environment variables template
βββ π .gitignore # Git ignore rules
βββ π components.json # shadcn/ui config
βββ π eslint.config.js # ESLint configuration
βββ π jsconfig.json # JavaScript config
βββ π package.json # Dependencies & scripts
βββ π postcss.config.js # PostCSS config
βββ π README.md # Project documentation
βββ π tailwind.config.js # Tailwind CSS config
βββ π vercel.json # Vercel deployment config
βββ π vite.config.js # Vite build config
graph TB
subgraph "π₯οΈ CLIENT (Frontend)"
A[βοΈ React App<br/>Vite + Tailwind]
B[π£ Custom Hooks<br/>use-fetch.js]
C[π§ API Layer<br/>apiJobs, apiApplication, apiCompanies]
D[π Authentication<br/>Clerk JWT]
E[π± UI Components<br/>Pages & Layouts]
end
subgraph "βοΈ BACKEND SERVICES"
F[π Clerk Auth Service<br/>User Management & JWT]
G[ποΈ Supabase Backend<br/>Database + Storage + Auth]
H[π€ AI Services<br/>Hugging Face API]
end
subgraph "πΎ DATABASE LAYER"
I[π PostgreSQL Database<br/>Jobs, Companies, Applications]
J[π File Storage<br/>Resumes & Company Logos]
K[π RLS Policies<br/>Row Level Security]
end
%% Client Flow
E --> B
B --> C
C --> D
%% Authentication Flow
A -.->|Sign In/Up| F
F -.->|JWT Token| D
D -->|Authenticated Requests| G
%% Data Flow
C -->|CRUD Operations| G
G --> I
G --> J
I --> K
%% AI Integration
C -.->|Job Matching| H
H -.->|AI Recommendations| C
%% Styling
classDef client fill:#e1f5fe
classDef backend fill:#f3e5f5
classDef database fill:#e8f5e8
classDef auth fill:#fff3e0
%% Styling for Frontend nodes
style A color:#E63946
style B color:#457B9D
style C color:#1D3557
style D color:#073B4C
style E color:#A8DADC
%% Styling for Backend nodes
style F color:#FF6B6B
style G color:#4ECDC4
style H color:#FFA69E
%% Styling for Database nodes
style I color:#06D6A0
style J color:#FFD166
style K color:#073B4C
class A,B,C,E client
class F,G,H backend
class I,J,K database
class D auth
sequenceDiagram
participant User as π€ User
participant React as βοΈ React App
participant Clerk as π Clerk Auth
participant Hooks as π£ Custom Hooks
participant API as π§ API Layer
participant Supabase as ποΈ Supabase
participant DB as πΎ Database
%% Authentication Flow
User->>React: Access Protected Route
React->>Clerk: Check Authentication
Clerk-->>React: Return JWT Token
%% Data Fetching Flow
React->>Hooks: Trigger Data Fetch
Hooks->>Clerk: Get Session Token
Clerk-->>Hooks: JWT Token
Hooks->>API: Call API Function with Token
API->>Supabase: Authenticated Request
Supabase->>DB: Query Database
DB-->>Supabase: Return Data
Supabase-->>API: Response Data
API-->>Hooks: Processed Data
Hooks-->>React: Update State
React-->>User: Display Content
%% File Upload Flow (Resume/Logo)
User->>React: Upload File
React->>API: Upload Request
API->>Supabase: Store in Bucket
Supabase-->>API: File URL
API->>Supabase: Save URL to Database
Supabase-->>API: Success Response
API-->>React: Upload Complete
React-->>User: Show Success
graph LR
subgraph "π± User Interface"
A[π Landing Page]
B[π Job Listings]
C[π Job Details]
D[β Post Job]
E[πΌ My Jobs]
F[β Saved Jobs]
end
subgraph "π£ Data Management"
G[use-fetch Hook]
H[useState/useEffect]
end
subgraph "π§ API Integration"
I[apiJobs.js]
J[apiApplication.js]
K[apiCompanies.js]
end
subgraph "ποΈ Backend"
L[Supabase Client]
M[Database Tables]
N[File Storage]
end
A --> G
B --> G
C --> G
D --> G
E --> G
F --> G
G --> H
G --> I
G --> J
G --> K
I --> L
J --> L
K --> L
L --> M
L --> N
%% Styling for Frontend nodes
style A color:#E63946
style B color:#457B9D
style C color:#1D3557
style D color:#F1FAEE
style E color:#A8DADC
%% Styling for Backend nodes
style F color:#FF6B6B
style G color:#4ECDC4
style H color:#FFA69E
%% Styling for Database nodes
style I color:#06D6A0
style J color:#FFD166
style K color:#073B4C
style L color:#FF6B6B
style M color:#4ECDC4
style N color:#FFA69E
classDef ui fill:#e3f2fd
classDef data fill:#f1f8e9
classDef api fill:#fff8e1
classDef backend fill:#fce4ec
class A,B,C,D,E,F ui
class G,H data
class I,J,K api
class L,M,N backend
- React.js (Vite) for fast development and building
- Supabase for backend services and database
- Clerk with JWT for secure authentication
- Tailwind CSS for styling (clean and responsive UI )
- Zod for runtime type checking and validation
User Login β Clerk Authentication β JWT Token β Supabase RLS β Database Access
Search Input β API Filter β Supabase Query β Database β Filtered Results β UI Display
Apply Button β Resume Upload β File Storage β Application Record β Database β Email Notification
Job Form β Validation β Company Logo Upload β Job Creation β Database β Live Listing
Save Action β Check Auth β Toggle Saved State β Database Update β UI Refresh
- Live Job Updates: Supabase real-time subscriptions
- Application Status: Real-time status changes
- New Job Notifications: Instant updates when jobs match criteria
File Upload β Supabase Storage β URL Generation β Database Reference β Display/Download
graph TD
A[User Login] --> B{Role Check}
B -->|Candidate| C[Job Search, Apply, Save Jobs]
B -->|Recruiter| D[Post Jobs, Manage Applications]
B -->|No Role| E[Onboarding Process]
E --> F[Select Role] --> B
Form Input β Zod Schema β Client Validation β API Request β Server Validation β Database
API Request β Error Check β User-friendly Message β Fallback UI β Retry Mechanism
-
Performance vs. Features
- Real-time AI analysis may impact response times
- Caching strategies implemented for optimization
- Supabase real-time subscriptions for live updates
- Rate limiting for AI API calls
-
Scalability
- Supabase handles database scaling
- Clerk manages authentication scaling
- AI service rate limits considered in design
- Ready for horizontal scaling if needed
-
User Behavior
- Users will provide accurate profile information
- Regular updates to job preferences
- Secure authentication through Clerk
- Willing to wait for AI processing
-
Data Quality
- Job listings are up-to-date
- Resume data is in supported formats
- Data validation through Zod schemas
- AI model responses are reliable
Component | File Path | Purpose |
---|---|---|
π§ API Layer | src/api/ |
Supabase integration functions |
π£ Data Hooks | src/hooks/use-fetch.js |
Custom data fetching logic |
π Supabase Config | src/utils/supabase.js |
Database client setup |
πͺ Routing | src/App.jsx |
React Router configuration |
π Auth Guard | src/components/protected-route.jsx |
Route protection logic |
π± Pages | src/pages/ |
Main application views |
π¨ Components | src/components/ |
Reusable UI elements |
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
VITE_HUGGINGFACE_API_TOKEN=your_huggingface_token
JWT_ISSUER_DOMAIN=your_jwt_issuer_domain
npm install # Install dependencies
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint
π Tables:
βββ users # User profiles and roles
βββ companies # Company information
βββ jobs # Job listings
βββ applications # Job applications
βββ saved_jobs # User saved jobs
ποΈ Storage Buckets:
βββ resumes # PDF resume files
βββ company-logo # Company logo images
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
π§ Feedback
For support or inquiries, Feedback please reach out to - Here