Find jobs. Practice interviews. Land offers.
A full-stack career platform blending a hyperlocal job marketplace with AI-powered interview prep and gamified progress tracking.
Students, freelancers, and early-career pros need one place to:
β¨ Discover real local opportunities β Browse, save, apply to jobs near you
ποΈ Practice with AI interviews β Get instant feedback from Gemini
π Track progress & earn badges β Streaks, tokens, leaderboards
Built as a production-style app with modern Next.js, typed server actions, and hybrid persistence (PostgreSQL + MongoDB) optimized for real-world workflows.
Find and post opportunities in your network
β
Browse jobs by role, skills, location
β
Save favorites and track applications
β
Manage postings (for employers)
β
Apply directly in-app
Generate questions β Practice with voice AI β Get scored feedback
β
Role-based question generation
β
Live Vapi voice interview sessions
β
Real-time transcript collection
β
Structured AI scoring (5 categories)
β
Auto-redirect to feedback page
Track mastery, earn rewards, climb leaderboards
β
Unified profile (skills, bio, preferences)
β
Token system for milestones
β
Streaks for consistency
β
Unlockable badges
β
Public leaderboards
βββββββββββββββββββββββββββββββββββββββ
β Frontend: Next.js 15 + React 19 β
β (TypeScript, Tailwind, Framer) β
ββββββββββββββββββ¬βββββββββββββββββββββ
β
ββββββββββ΄βββββββββ
β β
ββββββΌββββββ ββββββΌββββββ
βPostgreSQLβ β MongoDB β
β(Prisma) β β(Mongoose)β
β ββββββββββ β ββββββββββ
β Users β β Jobs β
β Feedback β β Apps β
β Badges β β Saved β
β Tokens β β β
ββββββββββββ ββββββ¬ββββββ
β
ββββββββββ¬ββββββββΌβββββββββ¬βββββββ
β β β β β
ββββββΌβββ ββββΌββββ βββΌβββββββββΌβββββββΌβββ
βGemini β βVapi β βFirebaseββAuthββJWT β
β(AI) β βVoice β β(Legacy)ββ ββ β
βββββββββ ββββββββ ββββββββββββββββββββββ
jobvue/
βββ app/ π£οΈ Next.js routes & API handlers
β βββ (interview)/ Interview pages & flows
β βββ (auth)/ Auth pages
β βββ jobs/ Job marketplace
β βββ profile/ User profiles
β βββ api/ REST endpoints
β βββ layout.tsx Root layout
β
βββ components/ βοΈ React components
β βββ Agent.tsx Interview session component
β βββ FeedbackClient.tsx Feedback display
β βββ Navbar.tsx Navigation
β βββ ui/ Radix-based primitives
β
βββ lib/ π§ Utilities & services
β βββ actions/ Server actions (Prisma, AI)
β βββ models/ Mongoose schemas
β βββ auth.ts JWT + auth logic
β βββ prisma.ts Prisma client
β βββ vapi.sdk.ts Vapi initialization
β
βββ prisma/ π Database
β βββ schema.prisma PostgreSQL schema
β βββ seed.ts Demo data seeder
β βββ migrations/ Schema versions
β
βββ constants/ βοΈ Config & schemas
β βββ index.ts Zod schemas, mappings
β
βββ public/ π¦ Static assets
| Route | Feature |
|---|---|
| / | Home + hero |
| /jobs | Browse marketplace |
| /jobs/[id] | Job details |
| /jobs/post | Post new listing |
| /jobs/manage | Manage your postings |
| /profile | View/edit profile |
| /interview | Interview history |
| /interview/[id] | Run interview |
| /interview/[id]/feedback | View results |
| /quiz | Practice quizzes |
| /leaderboard | Rankings |
POST /api/vapi/generate Generate & start interview
GET /api/jobs List jobs
POST /api/jobs/[id]/apply Submit application
GET /api/me Current user
GET /api/gamification/badges User badges
GET /api/gamification/leaderboard Global rankings
git clone https://github.com/your-org/jobvue.git
cd jobvue
npm installCreate a .env file in the root:
# ποΈ Databases
DATABASE_URL=postgresql://user:pass@host/db
DIRECT_URL=postgresql://user:pass@host/db
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/jobvue
# π Security
JWT_SECRET=your-super-secret-key-min-32-chars
# π€ AI & Voice
GEMINI_API_KEY=your-gemini-key
NEXT_PUBLIC_GEMINI_API_KEY=your-gemini-key
NEXT_PUBLIC_VAPI_WEB_TOKEN=your-vapi-token
NEXT_PUBLIC_VAPI_WORKFLOW_ID=your-workflow-id
β οΈ Never commit.envto version control. Use.env.localfor local development.
npm run prisma:generate # Generate Prisma client
npm run prisma:push # Sync schema
npm run seed # Load demo datanpm run devServer runs at http://localhost:3000 with Turbopack hot reload.
Visit the app and use demo credentials:
| Password | Role | |
|---|---|---|
| demo@jobvue.com | demo1234 | Seeker + Poster |
| poster@jobvue.com | poster1234 | Poster |
npm run dev # Start dev server (Turbopack)
npm run build # Production build
npm run start # Run production server
npm run lint # ESLint checks
npm run prisma:generate # Regenerate Prisma client
npm run prisma:push # Push schema to DB
npm run prisma:migrate # Interactive migrations
npm run seed # Seed PostgreSQL + MongoDBββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Interview Session Flow β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. User clicks "Call" β Vapi session starts
ββ Questions loaded
ββ Voice agent initialized
ββ Client listening for transcripts
2. Live conversation
ββ User speaks (captured by Vapi)
ββ Agent responds
ββ Transcripts streamed to frontend
3. User clicks "End" β Call terminates
ββ All messages collected
ββ Sent to server action
4. Server processes feedback
ββ Gemini analyzes transcript
ββ Generates structured scores (5 categories)
ββ Saves to PostgreSQL
ββ Creates/awards badges (non-blocking)
5. Auto-redirect β /interview/[id]/feedback
ββ Client automatically navigated
ββ Feedback page displays scores & analysis
| Category | Focus |
|---|---|
| π£οΈ Communication Skills | Clarity, articulation, structure |
| π‘ Technical Knowledge | Depth of understanding |
| π§© Problem Solving | Analysis & solution design |
| π₯ Cultural Fit | Values alignment & collaboration |
| πͺ Confidence & Clarity | Assertiveness & decisiveness |
Each scores 0β100, with detailed comments and actionable improvement areas.
β
Schema Validation β Fixed AI output category naming to match strict Zod schema
β
Dependency Updates β Upgraded @daily-co/daily-js and @vapi-ai/web
β
Badge System β Made non-blocking with lazy badge creation
β
Auto-Redirect β Interview completion now reliably routes to feedback page
β
Windows EPERM β Resolved native module lock issues with clean install script
- Server Actions β Type-safe, compiled Prisma queries
- Streaming β Next.js streaming for fast TTFB
- Error Boundaries β Graceful fallbacks for badge/gamification failures
- Database Optimization β Indexes on frequently queried fields (userId, interviewId)
- Native Modules β Proper lightningcss and Prisma engine management
β
Use strong, unique JWT_SECRET (min 32 chars)
β
Rotate API keys every 90 days
β
Never commit .env files
β
Restrict DB users with least-privilege access
β
Enable HTTPS in production
β
Validate all user inputs with Zod
# Kill node processes
taskkill /F /IM node.exe
# Clean & reinstall
rm -r .next node_modules package-lock.json
npm ci
npm run build- Check Gemini API key in .env
- Verify PostgreSQL connectivity
- Confirm interview transcript collection
- Check server logs for Zod validation errors
Fix: Category names must match exactly:
- "Problem Solving" (not "Problem-Solving")
- "Cultural Fit" (not "Cultural & Role Fit")
- "Confidence and Clarity" (not "Confidence & Clarity")
- Verify NEXT_PUBLIC_VAPI_WEB_TOKEN
- Verify NEXT_PUBLIC_VAPI_WORKFLOW_ID
- Check Vapi dashboard for endpoint status
- Confirm browser microphone permissions
# Verify PostgreSQL
psql $DATABASE_URL -c "SELECT 1"
# Verify MongoDB
mongosh "$MONGODB_URI" --eval "db.adminCommand('ping')"
# Reset Prisma
npm run prisma:generate
npm run prisma:pushBefore shipping to production:
- All environment variables configured
-
prisma generatesucceeds in CI/CD pipeline -
npm run buildcompletes without errors - Database connectivity tested (PostgreSQL + MongoDB)
- Gemini & Vapi API keys verified
- JWT_SECRET is strong & unique
- CORS properly configured
- Rate limiting enabled on API routes
- Monitoring & error tracking set up (Sentry, etc.)
Future enhancements in progress:
π Peer interviews β Practice with real people
π Interview analytics β Trend tracking over time
π― Personalized learning paths β Adaptive question generation
π€ Mentorship matching β Connect with industry professionals
π± Mobile app β React Native companion
MIT License - Free to use, modify, and distribute.
We welcome PRs! Please:
- Fork the repository
- Create a 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 a Pull Request
- π§ Email: support@jobvue.ai
- π Report bugs: GitHub Issues
- π Discuss: GitHub Discussions