A job application tracker with AI resume scoring and interview prep — built with Next.js, Groq, and Neon Postgres.
Live → https://pipe-lined-ab-hais-projects.vercel.app
- Application Tracking — Add and manage job applications across statuses: Bookmarked → Applied → Interview → Offer / Rejected
- AI Resume Scoring — Paste a job description and your resume, get a match score with strengths and gaps powered by Llama 3.3 70B via Groq
- Interview Prep — Auto-generates 6 targeted interview questions per role based on the job description, streamed in real time
- Dashboard Stats — Total applied, interview count, and average AI score at a glance
- OAuth Auth — Sign in with GitHub or Google, no passwords
| Layer | Tech |
|---|---|
| Framework | Next.js 15 (App Router) |
| Language | TypeScript |
| Auth | NextAuth v5 (JWT) |
| Database | Neon Postgres + Prisma ORM |
| AI | Groq SDK — llama-3.3-70b-versatile |
| Styling | Tailwind CSS + DaisyUI |
| Animations | Framer Motion |
| Icons | Lucide React + React Icons |
| Deployment | Vercel |
git clone https://github.com/yourname/pipelined.git
cd pipelined
npm installcp .env.example .envFill in your .env — here's where to get each value:
DATABASE_URL
- Go to neon.tech → create a project → copy the connection string from the dashboard
AUTH_SECRET
- Run this in your terminal and paste the output:
openssl rand -base64 32
AUTH_URL
- Use
http://localhost:3000for local dev, your Vercel URL in production
GITHUB_ID + GITHUB_SECRET
- Go to github.com → Settings → Developer settings → OAuth Apps → New OAuth App
- Homepage URL:
http://localhost:3000 - Callback URL:
http://localhost:3000/api/auth/callback/github - Copy the Client ID and generate a Client Secret
GOOGLE_ID + GOOGLE_SECRET
- Go to console.cloud.google.com → Create project → APIs & Services → Credentials → Create OAuth 2.0 Client ID
- Authorized redirect URI:
http://localhost:3000/api/auth/callback/google - Copy the Client ID and Client Secret
GROQ_API_KEY
- Go to console.groq.com → API Keys → Create API Key
DATABASE_URL= # Neon Postgres connection string
AUTH_SECRET= # openssl rand -base64 32
AUTH_URL= # http://localhost:3000
GITHUB_ID= # GitHub OAuth client ID
GITHUB_SECRET= # GitHub OAuth client secret
GOOGLE_ID= # Google OAuth client ID
GOOGLE_SECRET= # Google OAuth client secret
GROQ_API_KEY= # Groq API keynpx prisma migrate dev
npm run devOpen http://localhost:3000.
src/
├── app/
│ ├── actions/ # Server actions (CRUD + AI scoring)
│ ├── api/
│ │ └── ai/
│ │ └── stream-questions/ # Streaming interview questions route
│ ├── dashboard/
│ │ ├── page.tsx # Dashboard home
│ │ ├── layout.tsx # Dashboard layout + background
│ │ └── applications/
│ │ ├── new/ # Create application
│ │ └── [id]/ # Detail, edit, interview pages
│ └── page.tsx # Landing page
├── components/
│ ├── ui/ # Reusable UI (spotlight, status badge, dropdown)
│ ├── AISection.tsx # Resume scoring UI
│ ├── ApplicationCard.tsx # Application list item
│ ├── ApplicationForm.tsx # Create / edit form
│ └── InterviewSection.tsx # Streaming interview questions
└── lib/
├── groq.ts # Groq client
└── prisma.ts # Prisma singleton
- Push to GitHub
- Import repo on vercel.com
- Add all env vars from
.env(updateAUTH_URLto your Vercel URL) - Set build command to:
prisma migrate deploy && next build - Add OAuth callback URLs in GitHub and Google:
https://your-app.vercel.app/api/auth/callback/github https://your-app.vercel.app/api/auth/callback/google - Redeploy
User
└── Application
├── aiScore (JSON) # { score, summary, strengths[], gaps[] }
└── InterviewQuestion[] # Generated questions per application
| Variable | Description |
|---|---|
DATABASE_URL |
Neon Postgres connection string |
AUTH_SECRET |
Random secret for NextAuth |
AUTH_URL |
App URL (localhost or production) |
GITHUB_ID |
GitHub OAuth client ID |
GITHUB_SECRET |
GitHub OAuth client secret |
GOOGLE_ID |
Google OAuth client ID |
GOOGLE_SECRET |
Google OAuth client secret |
GROQ_API_KEY |
Groq API key for LLM inference |