Skip to content

Repository files navigation

ApplyVault

ApplyVault

A job application tracker built to stop losing track of where you applied.

Python 3.12 FastAPI PostgreSQL SQLAlchemy Alembic JavaScript Playwright CI status on main MIT License

Live Demo

Open ApplyVault →

ApplyVault dashboard showing application status counts, search, filters, and application cards


Stack

  • Backend: FastAPI, async SQLAlchemy, PostgreSQL
  • Auth: JWT (PyJWT), bcrypt
  • Frontend: vanilla HTML/CSS/JS
  • Tests: pytest, httpx, Playwright

Features

  • Register and log in with JWT sessions
  • Track company, role, status, date applied, notes, and job posting links
  • Update status as things progress (Applied, Interview, Offer, Rejected, Withdrawn)
  • Search by company or role, filter by status
  • Dashboard with live counts per status

Running locally

Requires Python 3.12 (latest security patch) and PostgreSQL.

1. Clone the repo

git clone https://github.com/Affaniqbal234/applyvault.git
cd applyvault

2. Create and activate a virtual environment

Windows Command Prompt:

python -m venv .venv
.venv\Scripts\activate

macOS / Linux:

python3 -m venv .venv
source .venv/bin/activate

3. Install dependencies

From the repository root:

python -m pip install -r backend/requirements.txt

4. Set up environment variables

Copy the template from the repository root:

:: Windows Command Prompt
copy .env.example .env
# macOS / Linux
cp .env.example .env

Open .env and fill in your values:

DATABASE_URL=postgresql+asyncpg://<user>:<password>@localhost:5432/applyvault
APP_ENV=development
JWT_SECRET=<paste-a-generated-secret-here>
FRONTEND_ORIGIN=http://localhost:5500

Generate JWT_SECRET with python -c "import secrets; print(secrets.token_urlsafe(48))". Secrets must contain at least 32 bytes. Keep .env outside Git.

Use your local PostgreSQL credentials. Create an empty database named applyvault in pgAdmin or with createdb -U <user> applyvault.

5. Migrate the database and start the API

From the repository root:

cd backend
python -m alembic upgrade head
uvicorn main:app --reload

The API does not change the schema at startup. Run migrations before starting it or releasing a new version. If the database already contains ApplyVault tables, follow the database adoption procedure first.

6. Serve the frontend

In a second terminal, from the repository root:

cd frontend
python -m http.server 5500

Then open http://localhost:5500/index.html in your browser.

See deployment configuration for hosting settings.


Tests

Backend/API and browser tests use isolated SQLite databases. With the virtual environment active, run the backend suite from the repository root:

cd backend
python -m pip install -r requirements-dev.txt
python -m pytest tests/ -v

Run the Playwright browser suite with headless Chromium from the same backend/ directory:

python -m pip install -r requirements-browser.txt
python -m playwright install chromium
python -m pytest browser_tests/ -v

On Linux, use python -m playwright install --with-deps chromium to install the browser's system dependencies too.

PostgreSQL integration tests cover migrations, constraints, existing database adoption, and persistence after an API restart. They create a disposable cluster and ignore your configured DATABASE_URL. Install PostgreSQL binaries and add their bin directory to PATH, or set POSTGRES_BIN to that directory. Run as a non-root user from the repository root:

python -m pytest integration_tests/ -q

GitHub Actions CI runs all three suites, JavaScript syntax checks, and a production dependency audit with Python 3.12 and PostgreSQL 16.

About

Track job applications, update their status, and keep notes and posting links in one place.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages