Skip to main content

pushcv-ui — a minimalist local web UI for pushcv. Same workspace, same SQLite, zero cloud.

Project description

pushcv-ui

A minimalist local web UI for pushcv — your job-application pipeline as a clean Kanban board in the browser, with the same local-first guarantees as the CLI: same folder, same pushcv.db, bound to 127.0.0.1, no accounts, no telemetry, no CDN assets.

pushcv-cli stays terminal-only by design; this is a separate, optional frontend for people who want a visual board. Both frontends share one service layer (pushcv.core), so anything you do here shows up in pushcv status and vice versa.

What you get

  • 📋 The four-column pipeline (Drafting → Applied → Interviewing → Closed) with the same position numbers [1], [2], … the CLI uses.
  • 🔎 Paste a posting URL (LinkedIn, Greenhouse, Lever, SmartRecruiters, or any page with JobPosting metadata) → preview → track.
  • 📄 A detail drawer per job: move between statuses, dated notes timeline, full description, posting + apply links, delete.
  • ⏱ Follow-up nudges on stale applications, salary estimates when the CLI has filled them in.
  • ✍️ A built-in profile editor — view and edit the profile.md the AI tailors resumes from, with a first-run template and ⌘S/Ctrl+S save.
  • AI features guided, not hidden — each job shows copyable pushcv draft commands, lists the drafts they generate (view them right in the drawer), and nudges you when your profile is still the blank template. A "local AI setup" explainer covers the Lemonade/.env details.
  • 🌗 Light and dark, following your system preference. One self-contained HTML page — no build step, no external fonts or scripts.

Install & run

With uv (recommended — no install at all):

cd ~/job-hunt          # the folder where your pushcv.db lives
uvx pushcv-ui

Or install it with pipx:

pipx install pushcv-ui --include-deps
cd ~/job-hunt
pushcv-ui

Why --include-deps? pushcv-ui depends on the pushcv CLI — installing the UI always brings the CLI along, and the AI features (pushcv draft, salary estimates) run through it. The flag puts the pushcv command on your PATH too. Without it, install the CLI separately: pipx install pushcv — the two share data through the workspace folder either way.

The server starts on http://127.0.0.1:7878/ and opens your browser. Options:

pushcv-ui [--dir PATH] [--port N] [--no-browser]

Setting up the AI features

Resume/cover-letter drafting and AI salary synthesis are pushcv CLI features — the UI guides you to them rather than reimplementing them. Installing pushcv-ui already brought the CLI along; to use the AI:

  1. Run a local model. Any OpenAI-compatible inference server works — e.g. Lemonade — serving a chat model (the default model id is Qwen3-8B-GGUF; override with pushcv draft <n> --model <id>). pushcv talks to http://localhost:13305/v1 by default; point it elsewhere with PUSHCV_AI_BASE in a .env file in your job-hunt folder.
  2. Fill in your profile — click Profile in the UI header. It's the source of truth the AI tailors from; drafts sign off with the name you put there, and the prompts never invent experience you didn't list.
  3. Copy the command from the job's drawer (e.g. pushcv draft 3) and run it in a terminal in the same folder. The generated draft appears in the job's drawer — and in drafts/ — when it's done.

Everything stays on your machine: the model is local, and nothing is sent to a remote provider. Full details live in the pushcv README.

Local-first, like the CLI

  • Binds to 127.0.0.1 only — nothing is reachable from your network — and rejects non-localhost Host headers (DNS-rebinding protection).
  • Operates on the directory you start it in (or --dir); all writes go to the same SQLite file the CLI uses.
  • The AI features execute in the CLI — the UI hands you the exact command for the job you're looking at, and the results (drafts, estimates) appear on the board the moment they exist. Same folder, same pushcv.db, one source of truth.

Development

git clone https://github.com/notnotparas/pushcv-ui.git && cd pushcv-ui
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"         # resolves pushcv from PyPI
pushcv-ui --dir /tmp/demo

Hacking on the UI and the CLI/service layer at the same time? Install the sibling checkout editably first: pip install -e ../pushcv-cli.

Layout:

pushcv-ui/
├── pyproject.toml
├── tests/                 # API tests over a throwaway workspace
└── src/pushcv_ui/
    ├── server.py          # FastAPI over pushcv.core.Workspace (localhost only)
    └── static/index.html  # the whole UI — one hand-written page, zero deps

License

MIT © pushcv contributors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pushcv_ui-0.1.0.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pushcv_ui-0.1.0-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file pushcv_ui-0.1.0.tar.gz.

File metadata

  • Download URL: pushcv_ui-0.1.0.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pushcv_ui-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ff362e430dee7aff7a7df1e61decb5895ec81fea8a487880651bc74b273fd9b8
MD5 cb672fad6d2af87456ff8f2d6338d064
BLAKE2b-256 c65aaf8cb924d2b3fcd33ad75525fb62235bf5b542fd9db54032959057b6cd98

See more details on using hashes here.

Provenance

The following attestation bundles were made for pushcv_ui-0.1.0.tar.gz:

Publisher: release.yml on notnotparas/pushcv-ui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pushcv_ui-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pushcv_ui-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pushcv_ui-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5291b6ec3c2ac79ce8a1f3fb293ef6207108ab26edafd42dd6d391d46a622d3
MD5 6ebe73a86332ef9b53548cac2cbefe04
BLAKE2b-256 8a2345b16bf9bf3d9002f7df5f20516e46e29d49780bbac35799e85b09b088be

See more details on using hashes here.

Provenance

The following attestation bundles were made for pushcv_ui-0.1.0-py3-none-any.whl:

Publisher: release.yml on notnotparas/pushcv-ui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page