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.sampleto.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 previewThe 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
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
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_domainnpm 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
