A cloud-based personal ATS (Applicant Tracking System) for students and early professionals to track job applications, manage resumes, and monitor application statuses.
- 🔐 Secure Authentication - JWT-based auth with bcrypt password hashing
- 📝 Application Tracking - CRUD operations with status workflow
- 📄 Resume Management - PDF upload/download with version control
- 📊 Status History - Complete audit trail of status changes
- 🔍 Search & Filter - Pagination, status filtering, sorting
- Backend: Python 3.11+ / Flask
- Database: SQLite (dev) / MySQL (production)
- ORM: SQLAlchemy
- Auth: JWT (PyJWT)
- File Storage: Local (dev) / AWS S3 (production)
cd C:\Users\thegp\.gemini\antigravity\scratch\applytrack
# Create virtual environment
python -m venv venv
venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt# Copy example env file
copy .env.example .env
# Edit .env with your secret keys# Create database tables
python -c "from app import create_app, db; app = create_app(); app.app_context().push(); db.create_all(); print('Database created!')"python run.pyServer runs at: http://localhost:5000
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/login |
Login, get JWT token |
| POST | /api/auth/logout |
Logout |
| GET | /api/auth/me |
Get current user |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/applications |
Create application |
| GET | /api/applications |
List (with pagination) |
| GET | /api/applications/:id |
Get single |
| PUT | /api/applications/:id |
Update |
| DELETE | /api/applications/:id |
Delete |
| PUT | /api/applications/:id/status |
Update status |
| GET | /api/applications/:id/history |
Status history |
| POST | /api/applications/:id/attach-resume |
Attach resume |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/resumes/upload |
Upload PDF |
| GET | /api/resumes |
List all |
| GET | /api/resumes/:id |
Get metadata |
| GET | /api/resumes/:id/download |
Get download URL |
| DELETE | /api/resumes/:id |
Delete |
# Register
curl -X POST http://localhost:5000/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"Test@123","fullName":"Test User"}'
# Login
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"Test@123"}'
# Create Application (use token from login)
curl -X POST http://localhost:5000/api/applications \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"companyName":"Google","position":"SWE Intern","appliedDate":"2025-01-07"}'applytrack/
├── app/
│ ├── __init__.py # Flask app factory
│ ├── config.py # Configuration
│ ├── models/ # Database models
│ ├── routes/ # API endpoints
│ ├── services/ # Business logic
│ └── utils/ # Helpers
├── uploads/ # Resume storage (local)
├── requirements.txt
├── run.py # Entry point
└── README.md
- Phase 2: Migrate to AWS RDS MySQL
- Phase 3: Deploy to EC2
- Phase 4: Integrate AWS S3
- Phase 5: CloudWatch monitoring
- Phase 6: Security hardening
MIT