AI-powered job matching platform with resume analysis, LinkedIn job scraping, and voice-based mock interviews.
- Resume Analysis: Upload PDF resumes for AI-powered skill extraction and profile building
- Job Matching: Scrape LinkedIn jobs based on user preferences and match with resume profiles
- Mock Interviews: Voice-based AI interviews with real-time feedback using LiveKit
- Dashboard Analytics: Track interview scores, saved jobs, and employee outreach
- Conversational AI: Chat interface powered by Google Gemini and LangGraph
JobNexus/
├── app/ # Next.js frontend
├── backend/ # Python FastAPI backend
├── JobNexusAIInterview/ # Voice AI interview module
└── README.md
- Next.js 16 (Turbopack)
- React 19
- TypeScript
- Tailwind CSS
- Supabase (Auth & Storage)
- ECharts (Visualizations)
- LiveKit (Voice AI)
- Python 3.12
- FastAPI
- LangGraph (AI Workflows)
- Google Gemini 2.5 Flash
- Pinecone (Vector Database)
- Supabase
- Playwright (Web Scraping)
- Node.js 18+
- Python 3.12+
- Supabase account
- Google AI API key
- Pinecone account
- LiveKit account (for voice interviews)
cd app
npm install
cp .env.local.example .env.local
# Add your environment variables
npm run devcd backend
pip install -r requirements.txt
# or use uv
uv sync
cp .env.example .env
# Add your environment variables
python main.pycd backend/voiceAI
uv sync
# Configure LiveKit credentials
python src/agent.pyNEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
LIVEKIT_URL=your_livekit_url
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
SUPABASE_URL=your_supabase_url
SUPABASE_API_KEY=your_supabase_service_key
GOOGLE_API_KEY=your_google_ai_api_key
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_INDEX_NAME=your_index_name
POST /chat/initiate- Start new conversationGET /chat/continue- Continue existing conversationGET /chat/health- Health check
POST /api/connection-details- Get LiveKit connection details
User → Next.js Frontend → FastAPI Backend → LangGraph Agents
↓ ↓
Supabase Auth Gemini AI + Pinecone
↓
LinkedIn Job Scraper
Voice Interview: Next.js → LiveKit → Python Voice Agent
- Resume Upload: User uploads PDF → Stored in Supabase
- Profile Extraction: AI extracts skills, experience, education
- Embedding Generation: Create vector embeddings → Store in Pinecone
- Job Scraping: Scrape LinkedIn based on preferences
- Job Matching: Match jobs with user profile
- Mock Interview: Voice-based AI interview with feedback
cd app
npm run dev # Development server
npm run build # Production build
npm run lint # Lint codecd backend
python main.py # Start FastAPI server (port 8000)See LICENSE file for details.
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request