A lightweight job hunt tracker that keeps your search organized: job links, key points, status, LinkedIn outreach, and your Overleaf resume link — all in one place. Built with Flask + SQLite and a single-page UI.
- Multi-user login with hashed passwords
- One SQLite DB per user
- Track job links with status, YoE, location, and key points
- LinkedIn connections per job with status (PENDING / MESSAGED / REFERRED)
- Overleaf project link per job
- Collapsible job cards with tabbed details
- Backend: Python, Flask, SQLite
- Frontend: Vanilla JS + CSS (single page)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.pyOpen http://localhost:5000.
docker build -t job_seek:latest .docker run -d --name job_seek \
-p 5000:5000 \
-e JOB_SEEK_SECRET="change-me" \
-v $(pwd)/job_seek:/app/data \
job_seek:latestNotes:
-druns the container in the background (detached).-p 5000:5000maps host port5000to container port5000.- Visit
http://localhost:5000on the host. - The container runs Gunicorn for production. Override the command to tune workers/threads if needed, for example:
docker run ... job_seek:latest gunicorn --bind 0.0.0.0:5000 --workers 4 --threads 4 app:appdocker stop job_seek
docker rm job_seekNotes:
JOB_SEEK_SECRETshould be a strong random string in production. It can be generated using -python -c "import secrets; print(secrets.token_urlsafe(32))"- The
data/volume holds the global users DB and per-user SQLite files.
app.py— Flask API + DB setuptemplates/index.html— main UIstatic/app.js— UI logicstatic/styles.css— UI stylesdata/— runtime SQLite files
Jobs:
INTERESTED,APPLIED,ONGOING,ACCEPTED,REJECTED
Connections:
PENDING,MESSAGED,REFERRED