Skip to content

Log and track your job applications, written with Vue.js and Python Flask

Notifications You must be signed in to change notification settings

pmmd2000/JobApplicationTracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Job Application Tracker

A modern, full-stack web application for tracking job applications with an intuitive UI built with Vue.js and PrimeVue.

πŸš€ Features (Phase 1 - MVP)

  • βœ… Complete CRUD Operations: Create, read, update, and delete job applications
  • βœ… Rich Data Tracking: Company name, position, location, job type/level, status, dates, notes
  • βœ… Modern UI: Built with PrimeVue v4 components and Aura theme
  • βœ… Data Persistence: PostgreSQL database with automatic schema creation
  • βœ… Containerized: Fully Dockerized application with single-command deployment
  • βœ… Production Ready: Gunicorn WSGI server, nginx reverse proxy, health monitoring

πŸ“‹ Prerequisites

  • Docker (version 20.10+)
  • Docker Compose (version 2.0+)
  • Bun (optional, for local frontend development)

πŸƒ Quick Start

1. Clone and Setup

# Navigate to project directory
cd /root/projects/JobApplicationTracker

# Generate environment configuration
chmod +x scripts/setup_env.sh
./scripts/setup_env.sh

The setup script will:

  • Auto-generate secure passwords and secret keys
  • Prompt for application host (default: localhost:8080)
  • Prompt for optional Google Tag Manager ID
  • Create a .env file with all configuration

2. Start the Application

# Build and start all services
docker compose up --build

This will start:

  • PostgreSQL 16 database
  • Flask backend with Gunicorn (Python 3.12)
  • Vue 3 frontend with PrimeVue v4
  • Nginx reverse proxy

3. Access the Application

Open your browser and navigate to:

http://localhost:8080

πŸ› οΈ Development

Backend Development

# View backend logs
docker compose logs -f backend

# Access backend container
docker compose exec backend bash

# Run database migrations (if needed)
docker compose exec backend python -c "from app.database import db; from app import create_app; app = create_app(); app.app_context().push(); db.create_all()"

Frontend Development

For local development with hot-reload:

cd frontend
bun install
bun run dev

The dev server will start at http://localhost:5173 with API proxying to the backend.

Database Access

# Access PostgreSQL CLI
docker compose exec postgres psql -U tracker_user -d job_tracker

# Backup database
docker exec job_tracker_postgres pg_dump -U tracker_user job_tracker > backup.sql

# Restore database
docker exec -i job_tracker_postgres psql -U tracker_user job_tracker < backup.sql

πŸ—οΈ Architecture

Tech Stack

Backend:

  • Python 3.12
  • Flask (web framework)
  • SQLAlchemy (ORM)
  • PostgreSQL 16 (database)
  • Gunicorn (WSGI server)

Frontend:

  • Vue 3 (framework)
  • PrimeVue v4 (UI library, Aura theme)
  • Vite (build tool)
  • Bun (package manager)
  • Axios (HTTP client)

Infrastructure:

  • Docker & Docker Compose
  • Nginx (reverse proxy)
  • Single Docker network (job_tracker_network)

Directory Structure

JobApplicationTracker/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ __init__.py       # Flask app factory
β”‚   β”‚   β”œβ”€β”€ config.py         # Configuration
β”‚   β”‚   β”œβ”€β”€ database.py       # SQLAlchemy setup
β”‚   β”‚   β”œβ”€β”€ models.py         # Database models
β”‚   β”‚   └── routes.py         # API endpoints
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ requirements.txt
β”‚   └── gunicorn.conf.py
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/       # Vue components
β”‚   β”‚   β”œβ”€β”€ services/         # API service
β”‚   β”‚   β”œβ”€β”€ App.vue          # Root component
β”‚   β”‚   └── main.js          # Vue app entry
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ package.json
β”‚   └── vite.config.js
β”œβ”€β”€ nginx/
β”‚   β”œβ”€β”€ nginx.conf.template  # Nginx config with env vars
β”‚   └── Dockerfile
β”œβ”€β”€ scripts/
β”‚   └── setup_env.sh         # Environment setup script
β”œβ”€β”€ .env.example             # Environment variables template
β”œβ”€β”€ docker-compose.yml       # Docker orchestration
└── README.md

πŸ”Œ API Endpoints

All API endpoints are prefixed with /api/:

Method Endpoint Description
GET /api/health Health check
GET /api/applications List all applications
POST /api/applications Create new application
GET /api/applications/<id> Get single application
PUT /api/applications/<id> Update application
DELETE /api/applications/<id> Delete application

Example API Calls

# Health check
curl http://localhost:8080/api/health

# Create application
curl -X POST http://localhost:8080/api/applications \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Corp",
    "position_title": "Senior Developer",
    "location": "Remote",
    "job_type": "Full-time",
    "status": "Applied"
  }'

# List all applications
curl http://localhost:8080/api/applications

πŸ›‘ Stopping the Application

# Stop all services
docker compose down

# Stop and remove volumes (WARNING: deletes all data)
docker compose down -v

πŸ› Troubleshooting

Issue: Port 8080 already in use

# Find and kill process using port 8080
lsof -ti:8080 | xargs kill -9

# Or change APP_HOST in .env to use different port

Issue: Database connection failed

# Check if PostgreSQL is running
docker compose ps postgres

# View PostgreSQL logs
docker compose logs postgres

# Restart PostgreSQL
docker restart postgres

Issue: Frontend not loading

# Rebuild nginx container
docker compose up --build nginx

# Check nginx logs
docker compose logs nginx

πŸ“š Environment Variables

All configuration is managed through the .env file:

Variable Description Default
APP_HOST Application hostname localhost:8080
POSTGRES_DB Database name job_tracker
POSTGRES_USER Database user tracker_user
POSTGRES_PASSWORD Database password Auto-generated
SECRET_KEY Flask secret key Auto-generated
BACKEND_CORS_ORIGIN CORS origin http://localhost:8080
GTM_ID Google Tag Manager ID Empty

πŸ” Security Notes

  • Never commit .env to version control
  • Auto-generated secrets use cryptographically secure random generation
  • CORS is configured to only allow requests from configured origin
  • Input validation on both frontend and backend

🚧 Roadmap

Phase 2: Document Management (Upcoming)

  • Resume and cover letter uploads
  • Document storage in Docker volumes
  • File download functionality

Phase 3: AI Integration (Planned)

  • OpenAI job description parsing
  • Automatic field extraction
  • AI-powered resume/cover letter feedback

Phase 4: Authentication (Planned)

  • JWT-based authentication
  • User session management
  • Protected routes

Phase 5: Advanced Features (Planned)

  • In-browser PDF/DOCX viewing
  • Analytics dashboard
  • Advanced filtering and search

πŸ“„ License

This project is proprietary.

🀝 Contributing

This is a personal project. For inquiries, please contact the repository owner.

About

Log and track your job applications, written with Vue.js and Python Flask

Topics

Resources

Stars

Watchers

Forks

Packages