AI-powered job search management system built with Next.js and Claude AI.
- 📝 Resume Management - Create and manage multiple resume versions with Markdown support
- 🤖 AI Job Evaluation - Evaluate job postings against your resume using Claude AI
- 📊 Application Tracker - Kanban board to track your application pipeline
- 📈 Analytics Dashboard - Real-time stats and insights on your job search
- 🎯 Smart Matching - AI-powered job-resume matching with detailed feedback
- Frontend: Next.js 14 (App Router), React, TypeScript, Tailwind CSS
- UI Components: shadcn/ui (Radix UI)
- Database: SQLite with better-sqlite3
- AI: Anthropic Claude API (Sonnet 4)
- Icons: Lucide React
- Node.js 18+ or Bun
- Anthropic API key (Get one here)
git clone <your-repo-url>
cd jobskillnpm install
# or
bun installcp .env.example .env.localEdit .env.local and add your Anthropic API key:
ANTHROPIC_API_KEY=your_api_key_here
DATABASE_PATH=./data/jobskill.dbnpm run dev
# or
bun devOpen http://localhost:3000 in your browser.
- Navigate to Resumes in the sidebar
- Click New Resume
- Enter your resume content in Markdown format
- Set as default if you want to use it for evaluations
- Navigate to Jobs in the sidebar
- Click Add Job
- Fill in job details (title, company, description, etc.)
- Click Save
- On the Jobs page, click Evaluate on any job
- The AI will analyze the job against your default resume
- View the match score (0-100) and detailed feedback
- Review strengths, concerns, and recommendations
- Navigate to Applications in the sidebar
- View your application pipeline in Kanban format
- Drag cards between columns or use status buttons
- Click on a card to add notes
jobskill/
├── app/
│ ├── api/ # API routes
│ │ ├── jobs/ # Job endpoints
│ │ ├── resumes/ # Resume endpoints
│ │ └── applications/ # Application endpoints
│ ├── dashboard/ # Dashboard pages
│ │ ├── jobs/ # Jobs management
│ │ ├── resumes/ # Resume management
│ │ └── applications/ # Application tracker
│ └── layout.tsx # Root layout
├── lib/
│ ├── db/ # Database operations
│ │ ├── index.ts # Database client
│ │ ├── schema.sql # Database schema
│ │ ├── jobs.ts # Job operations
│ │ ├── resumes.ts # Resume operations
│ │ └── applications.ts # Application operations
│ └── ai/
│ └── evaluate.ts # AI evaluation logic
├── components/
│ └── ui/ # shadcn/ui components
├── data/ # SQLite database (auto-created)
└── public/ # Static assets
The application uses SQLite with the following main tables:
- resumes - Resume versions with Markdown content
- jobs - Tracked job opportunities
- applications - Application pipeline tracking
- interviews - Interview scheduling and notes
GET /api/resumes- List all resumesPOST /api/resumes- Create a resumeGET /api/resumes/[id]- Get resume by IDPUT /api/resumes/[id]- Update resumeDELETE /api/resumes/[id]- Delete resumePATCH /api/resumes/[id]- Set default resume
GET /api/jobs- List all jobsPOST /api/jobs- Create a jobGET /api/jobs/[id]- Get job by IDPUT /api/jobs/[id]- Update jobDELETE /api/jobs/[id]- Delete jobPOST /api/jobs/[id]/evaluate- Evaluate job with AI (streaming)
GET /api/applications- List all applicationsPOST /api/applications- Create an applicationGET /api/applications/[id]- Get application by IDPUT /api/applications/[id]- Update applicationDELETE /api/applications/[id]- Delete application
npm run build
npm startnpm run lintDocker and docker-compose configurations will be added for easy deployment.
Contributions are welcome! Please feel free to submit a Pull Request.
MIT
- Built with Next.js
- UI components from shadcn/ui
- AI powered by Anthropic Claude
- Inspired by career-ops