A modern web application to help job seekers track their applications, interview progress, and job offers. Built with Next.js, React, and TypeScript. This was built in the initial stage with GitHub Spec Kit using Claude Code for the first two specs. See the initial specify prompts in user-prompt-history. After this stage, I used Copilot to make mostly UI improvements, see commits starting with PR #3
- Features
- Project Description
- Technology Stack
- Installation
- Usage Guide
- Project Structure
- Available Scripts
- Data Storage
- Contributing
- License
- Support
- Add & Manage Applications: Create detailed job application records with company info, position, salary ranges, and more
- Track Interview Stages: Monitor multiple rounds of interviews and record feedback from each stage
- Manage Offers: Track job offers with due dates and compare opportunities
- Filter & Sort: Quickly find applications by status, company category, skills match, job source, and more
- Archive & Delete: Organize your tracker by archiving completed applications or removing entries
- Dark Mode: Toggle between light and dark themes for comfortable viewing
- Responsive Design: Seamlessly works on desktop and mobile devices
- Local Storage: All data is stored locally in your browser - no cloud sync required
The Application Tracker is a productivity tool designed specifically for job seekers managing multiple applications simultaneously. It provides a centralized hub to:
- Record detailed information about each job application
- Track interview progress through multiple rounds
- Manage job offers with decision deadlines
- Filter and sort applications to gain insights into your job search progress
- Maintain organized records with archival and deletion capabilities
Whether you're early in your job search or juggling multiple offers, this tracker helps you stay organized and on top of every opportunity.
- Framework: Next.js 14.2+ - React framework with server-side rendering
- Language: TypeScript - Type-safe JavaScript
- Styling: Tailwind CSS - Utility-first CSS framework
- UI Components: Custom React components with accessibility in mind
- Testing:
- Jest - Unit and integration tests
- Playwright - End-to-end testing
- React Testing Library - Component testing
- Package Manager: npm
- Runtime: Node.js
- Node.js 18+ and npm (or yarn/pnpm)
- Clone the repository:
git clone https://github.com/WhatIfWeDigDeeper/application-tracker.git
cd application-tracker- Install dependencies:
npm install- Start the development server:
npm run dev- Open http://localhost:3000 in your browser
- Click the "Add Application" button
- Fill in the required fields:
- Company Name: Name of the hiring company
- Position: Job title or role
- Date Applied: When you submitted the application
- Optionally add:
- Company URL and job posting links
- Company category (AI, Finance, Education, etc.)
- Skills match rating (1-5 scale)
- Salary range
- Job source (LinkedIn, Recruiter, etc.)
- Special requirements or notes
- Click Save to add the application to your tracker
- View All: See all active applications in the main list
- Filter by Status: Click the filter icon to show applications by status (Applied, Interviewing, Offered, Rejected, etc.)
- Filter by Category: Filter applications by company category
- Filter by Skills Match: Show only applications matching your skill level threshold
- Filter by Source: Find applications from specific sources
- Sort: Click the sort icon to organize by date applied, company name, or other criteria
- Open an application detail view
- Expand the Interviews section
- Add each interview round with:
- Interview type (Phone, Video, In-Person, etc.)
- Date conducted
- Interviewer details
- Notes and feedback
- Update status as you progress through rounds
- Update application status to Offered
- In the offer details section, set:
- Offer acceptance deadline
- Salary and compensation details
- Additional benefits or special terms
- Track multiple offers side-by-side for comparison
- Archive: Move completed applications to archive without deleting them
- Restore: Bring archived applications back to active list
- Delete: Permanently remove applications from your tracker
- Click the Theme Toggle button in the top right to switch between light and dark modes
- Your preference is automatically saved
src/
├── app/ # Next.js app directory
│ ├── layout.tsx # Root layout component
│ ├── page.tsx # Home page
│ └── globals.css # Global styles
├── assets/ # Static assets
│ └── icons/ # Custom SVG icons
├── components/ # React components
│ ├── ThemeProvider.tsx # Dark mode provider
│ ├── ThemeToggle.tsx # Theme switcher
│ ├── applications/ # Application-related components
│ ├── interviews/ # Interview tracking components
│ ├── common/ # Shared components
│ └── ui/ # UI component library
├── hooks/ # Custom React hooks
│ ├── useApplications.ts # Application state management
│ ├── useFilters.ts # Filter logic
│ ├── useSorting.ts # Sort logic
│ ├── useLocalStorage.ts # Local storage persistence
│ └── useTheme.ts # Theme management
├── lib/ # Utility functions and constants
│ ├── constants.ts # App constants
│ ├── theme.ts # Theme configuration
│ └── utils.ts # Helper functions
├── services/ # Business logic
│ ├── storage.ts # Local storage service
│ └── validation.ts # Input validation
└── types/ # TypeScript type definitions
├── application.ts # Application type definitions
└── theme.ts # Theme types
tests/ # Test files
├── e2e/ # End-to-end tests (Playwright)
├── integration/ # Integration tests
└── unit/ # Unit tests
specs/ # Project specifications
├── 001-job-application-tracker/ # Core features spec
└── 002-dark-mode/ # Dark mode spec
npm run dev # Start development server with hot reload
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run typecheck # Check TypeScript typesnpm test # Run unit and integration tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate coverage report
npm run test:e2e # Run end-to-end tests
npm run test:e2e:ui # Run E2E tests with UI
npm run test:e2e:debug # Debug E2E testsAll application data is stored in your browser's local storage. This means:
- ✅ Your data stays private and never leaves your device
- ✅ No account setup or login required
⚠️ Data is tied to your browser (clearing browser storage will delete data)⚠️ Use browser export features or manual backups for data persistence across devices
Contributions are welcome! Here's how you can help:
- Report Bugs: Open an issue describing the problem and steps to reproduce
- Suggest Features: Create an issue with your feature request and use case
- Submit Code:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Make your changes with clear commit messages
- Add or update tests as needed
- Submit a pull request with a description of changes
- Install dependencies:
npm install - Start dev server:
npm run dev - Make your changes
- Run tests:
npm test - Test in browser: Visit
http://localhost:3000 - Ensure all tests pass before submitting PR
- Use TypeScript for type safety
- Follow existing code patterns and naming conventions
- Write meaningful commit messages
- Add tests for new features
- Run
npm run lintto check code quality
This project is licensed under the MIT License. See the LICENSE file for details.
If you encounter any issues or have questions:
- Check the Issues page
- Review the project specification in
specs/directory - Open a new issue with detailed information about your problem
Built with ❤️ to help job seekers stay organized