Skip to content

ryangeo17/Job-Application-Tracker-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Job Application Tracker API

A RESTful API built with Flask for tracking job applications throughout the hiring process. Manage your job search by recording applications, updating their status, and querying your application history.

Features

  • Create Applications: Add new job applications with company name, role, and status
  • Track Status: Monitor application progress through different stages (applied, interview, offer, rejected)
  • Query & Filter: Search applications by status with sorting and pagination support
  • Update Progress: Modify application status as you move through the hiring pipeline
  • Bulk Operations: Delete multiple applications by status
  • RESTful Design: Clean, intuitive API endpoints following REST principles

Tech Stack

  • Framework: Flask 3.1.3
  • Database: SQLite with SQLAlchemy ORM
  • ORM: Flask-SQLAlchemy 3.1.1
  • Server: Gunicorn 25.1.0 (production-ready)
  • Language: Python 3.x

Installation

Prerequisites

  • Python 3.7 or higher
  • pip (Python package manager)

Setup

  1. Clone the repository:
git clone <repository-url>
cd <project-directory>
  1. Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Run the application:
python run.py

The API will be available at http://localhost:5000

API Endpoints

Get All Applications

GET /applications

Query Parameters:

  • status - Filter by status (applied, interview, offer, rejected)
  • sort - Sort by date (applied_at or -applied_at for descending)
  • limit - Limit number of results
  • offset - Offset for pagination

Example:

curl http://localhost:5000/applications?status=interview&sort=-applied_at&limit=10

Get Single Application

GET /applications/<id>

Example:

curl http://localhost:5000/applications/1

Create Application

POST /applications

Request Body:

{
  "company": "Tech Corp",
  "role": "Software Engineer",
  "status": "applied"
}

Example:

curl -X POST http://localhost:5000/applications \
  -H "Content-Type: application/json" \
  -d '{"company":"Tech Corp","role":"Software Engineer","status":"applied"}'

Update Application Status

PUT /applications/<id>

Request Body:

{
  "status": "interview"
}

Example:

curl -X PUT http://localhost:5000/applications/1 \
  -H "Content-Type: application/json" \
  -d '{"status":"interview"}'

Delete Application

DELETE /applications/<id>

Example:

curl -X DELETE http://localhost:5000/applications/1

Bulk Delete by Status

DELETE /applications?status=<status>

Example:

curl -X DELETE "http://localhost:5000/applications?status=rejected"

Application Status Values

  • applied - Initial application submitted
  • interview - Interview stage
  • offer - Offer received
  • rejected - Application rejected

Database Schema

Application Model

Field Type Description
id Integer Primary key (auto-generated)
company String(100) Company name (required)
role String(100) Job role/title (required)
status String(20) Application status (default: "applied")
applied_at DateTime Timestamp of application (auto-generated)

Project Structure

.
├── app/
│   ├── __init__.py      # Application factory
│   ├── db.py            # Database initialization
│   ├── models.py        # SQLAlchemy models
│   └── routes.py        # API endpoints
├── instance/
│   └── jobtracker.db    # SQLite database (auto-created)
├── requirements.txt     # Python dependencies
├── run.py              # Application entry point
└── README.md           # This file

Error Handling

The API returns appropriate HTTP status codes:

  • 200 - Success
  • 201 - Created
  • 400 - Bad Request (invalid input)
  • 404 - Not Found
  • 500 - Internal Server Error

Error responses include a JSON body with an error field describing the issue.

Releases

No releases published

Packages

 
 
 

Contributors

Languages