An AI-powered career assistant that helps users get job-ready with:
- AI resume builder and improver
- AI cover letter generator
- Technical interview quiz with explanations + progress tracking
- Industry insights (salary ranges, top skills, market trends) auto-updated via scheduled jobs
- Resume: Structured builder with validation, save/update, AI improvement suggestions
- Cover Letters: Generate tailored letters from company, role, and JD; view history
- Interview: Auto-generated MCQ quizzes based on user industry/skills, score + feedback
- Insights Dashboard: Salary ranges, growth rate, top skills, market outlook, trends
- Onboarding: Select industry/specialization, experience, bio, skills
- Auth: Managed via Clerk (sign-in/sign-up flows)
- Theming + UI: Tailwind CSS + shadcn/ui, dark mode, toast notifications
- App: Next.js 15 (App Router), React 19
- Auth: Clerk
- UI: Tailwind CSS, shadcn/ui, Radix UI, lucide-react
- Forms & Validation: React Hook Form + Zod
- AI: Google Gemini 1.5 Flash via
@google/generative-ai - DB/ORM: PostgreSQL + Prisma
- Background Jobs: Inngest (scheduled weekly updates)
- Prerequisites
- Node.js 18+ and pnpm/npm
- A PostgreSQL database (Neon, Supabase, Railway, etc.)
- Clerk account and application
- Google AI Studio API key for Gemini
- Install dependencies
npm install- Environment variables
Create a
.envfile in the project root:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DB?sslmode=require
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/onboarding
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/onboarding
GEMINI_API_KEY=- Generate Prisma client
npm run postinstall
# or
npx prisma generate- Run database migrations
npx prisma migrate deploy
# For local development (if you have pending migrations):
# npx prisma migrate dev- Start the dev server
npm run devVisit http://localhost:3000
- Prisma uses PostgreSQL via
DATABASE_URL. - Gemini is accessed with
GEMINI_API_KEYand is used across server actions. - Clerk is required for authentication and route protection.
npm run dev— Next dev with Turbopacknpm run build— Production buildnpm run start— Start production servernpm run lint— Lint with ESLintpostinstall—prisma generate
- Schema:
prisma/schema.prisma - Generate Client:
npx prisma generate - Apply Migrations:
npx prisma migrate deploy(CI/prod) ornpx prisma migrate dev(local) - Studio (optional):
npx prisma studio
- Weekly industry insights refresh via cron at Sunday midnight.
- Entry points:
- Client:
lib/inngest/client.js - Function:
lib/inngest/function.js(uses Gemini to produce insights) - API route:
app/api/inngest/route.js
- Client:
app/
(auth)/ # Clerk sign-in/up routes
(main)/ # Authenticated app
dashboard/ # Insights dashboard
resume/ # Resume builder + AI improvements
ai-cover-letter/ # Cover letter generator, history, details
interview/ # Quiz generation and results
onboarding/ # First-time user profile setup
careervault/ # Static resources
components/ # Shared UI components (shadcn/ui)
actions/ # Server actions (resume, cover-letter, interview, etc.)
lib/ # Prisma, utils, Inngest client/functions
prisma/ # Prisma schema and migrations
public/ # Static assets
- Auth Provider:
app/layout.js(wraps app withClerkProviderand theme) - Server Actions:
actions/*.js - Prisma Client:
lib/prisma.js - AI Usage:
actions/*andlib/inngest/*with@google/generative-ai
- Set all env vars in your hosting platform (Vercel, Netlify, etc.)
- Run
npx prisma migrate deployagainst your production DB - Ensure
GEMINI_API_KEYand Clerk keys are configured - Expose
app/api/inngest/routeif using Inngest Cloud (configure accordingly)
This project is for educational and hackathon purposes.