A full-stack job application tracker with resume versioning, analytics dashboard, and Kanban board to help you organize and monitor your job search.
- Track interview rate, offers received, pending applications, and total applications
- Visualize your job search progress at a glance
- Identify trends and optimize your application strategy
- Upload and store multiple versions of your resume
- Compare versions side-by-side to track changes
- Keep track of which resume you sent to which company
- Visualize applications across stages: Applied β Interviewing β Offered β Rejected
- Quickly see where each application stands
- Stay organized throughout your job search
- Search applications by company, role, or keywords
- Filter by status, date, or tags
- Find any application instantly
- Add notes to each application
- Track interview questions, contacts, and follow-ups
- Never forget important details
- JWT token-based authentication
- Bcrypt password hashing
- Protected routes and secure session management
- React - UI library
- Next.js - React framework
- TypeScript - Type safety
- Tailwind CSS - Styling
- Node.js - Runtime
- Express.js - Web framework
- MongoDB - Database
- Mongoose - ODM
- JWT - JSON Web Tokens
- Bcrypt - Password hashing
- Jest - Testing framework
- Node.js (v18 or higher)
- MongoDB (local or Atlas)
- npm or yarn
-
Clone the repository
git clone https://github.com/kasimsuh/jobfolio.git cd jobfolio -
Install dependencies
# Install backend dependencies cd server npm install # Install frontend dependencies cd ../client npm install
-
Set up environment variables
Create a
.envfile in theserverdirectory:PORT=5000 MONGODB_URI=your_mongodb_connection_string JWT_SECRET=your_jwt_secret_key
Create a
.env.localfile in theclientdirectory:NEXT_PUBLIC_API_URL=http://localhost:5000/api
-
Run the application
# Start backend (from server directory) npm run dev # Start frontend (from client directory) npm run dev
-
Open your browser
http://localhost:3000
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/login |
Login user |
| GET | /api/auth/me |
Get current user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/applications |
Get all applications |
| GET | /api/applications/:id |
Get single application |
| POST | /api/applications |
Create application |
| PUT | /api/applications/:id |
Update application |
| DELETE | /api/applications/:id |
Delete application |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/resumes |
Get all resumes |
| POST | /api/resumes |
Upload resume |
| DELETE | /api/resumes/:id |
Delete resume |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/analytics |
Get dashboard stats |
jobfolio/
βββ client/ # Frontend (Next.js)
β βββ components/ # Reusable UI components
β βββ pages/ # Next.js pages
β βββ styles/ # Global styles
β βββ hooks/ # Custom React hooks
β βββ utils/ # Utility functions
β βββ types/ # TypeScript types
β
βββ server/ # Backend (Express)
β βββ controllers/ # Route controllers
β βββ models/ # Mongoose models
β βββ routes/ # API routes
β βββ middleware/ # Custom middleware
β βββ utils/ # Utility functions
β
βββ README.md
- Drag-and-drop Kanban board
- Email reminders for follow-ups
- Browser extension to save jobs from LinkedIn/Indeed
- Export applications to CSV
- Dark mode
Contributions are welcome! Feel free to open an issue or submit a pull request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Suhiyini Kasim
- GitHub: @kasimsuh
- LinkedIn: Suhiyini Kasim
- Email: [email protected]


