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 installEnvironment 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
