Skip to main content

Terminal UI for CV management — powered by Textual and cv-api

Project description

cv-tui-py

Python License PyPI

Terminal UI for CV management, powered by Python and Textual. Connects to the cv-api HTTP/WebSocket backend to manage job applications, generate tailored CV documents, and run health audits — all from the terminal.

Features

  • Dashboard — Pipeline funnel bar chart and recent applications at a glance
  • Applications — Searchable DataTable of all applications with async health scores
  • Kanban — Drag-free board with five columns for application status (applied, interview, offer, rejected, ghosted)
  • Actions — Browse Make targets grouped by category, fill arguments, execute with streaming WebSocket output and AI provider detection
  • Stats — Funnel chart showing pipeline conversion and weekly activity timeline
  • Audit — CV health metrics and score reporting
  • Create applications — Quick dialog to add new applications directly from the TUI
  • Catppuccin Mocha theme — Consistent, readable color scheme throughout
  • Async streaming — All long-running operations stream real-time output without blocking the UI

Requirements

  • Python 3.12 or later
  • Running instance of cv-api
  • Terminal with 256-color support

Installation

Install via pip:

pip install cv-tui

Or via uv:

uv add cv-tui

Configuration

Create ~/.config/cv/config.toml:

[api]
base_url = "http://localhost:3001"
api_key  = "your-api-key-here"
timeout  = 30.0

On Windows, use %APPDATA%\cv\config.toml instead.

The configuration is shared across cv-tui-py, cv-tui-go, and cv-tui-rs.

Usage

Launch the TUI

cv-tui

Or specify a custom config file:

cv-tui --config /path/to/config.toml

Health Check

Check if cv-api is reachable:

cv-tui health

Exits with code 0 if connected, 1 if unreachable. Useful for CI/CD and monitoring.

Debug Mode

Enable DEBUG logging:

cv-tui -v

Screens

Dashboard (Tab 1)

Shows total application count, a funnel bar chart of the pipeline (applied → interview → offer → accepted), and a list of the 10 most recent applications. Quick overview of your recruitment activity.

Applications (Tab 2)

Searchable DataTable displaying all applications. Columns include date created, company, position, status, outcome, and health score. Press Enter to open the detail view. Use / to focus the search input and filter by company, position, status, or application name. Health scores are fetched asynchronously in the background via the audit action.

Kanban (Tab 3)

Card-based board with five columns representing application status: applied, interview, offer, rejected, and ghosted. Cards are populated in real time from cv-api. Provides a visual overview of where applications stand in the pipeline.

Actions (Tab 4)

Targets loaded from cv-api are listed and grouped by category (build, deploy, tailor, review, etc.). Select a target to view its arguments. Fill in the application name (often available via dropdown) and any other required parameters. Press Run to execute the target. Output streams via WebSocket, with automatic AI provider detection (Gemini, Claude, OpenAI, Mistral, Ollama) displayed as a badge.

Stats (Tab 5)

Displays a funnel chart with conversion percentages at each stage (applied → interview → offer) and a weekly activity timeline showing the number of applications per week. Helps track recruitment trends over time.

Audit (Tab 6)

Select an application and run the health audit action. Returns a composite health score (0–100) and individual metrics (structure, content, formatting, etc.). Displays structured results with progress bars, duplicated phrases, and overused words detected in the CV.

Keybindings

Key Action
1–6 Switch to tab 1–6
[ / ] Previous / next tab
Ctrl+H / Ctrl+L Previous / next tab
n New application dialog
Ctrl+R Refresh all screens
r Refresh current screen
j / k Cursor down / up
g / G Jump to first / last row (Applications)
Enter Open detail view (Applications)
/ Focus search (Applications)
q Quit

Development

Clone the repository and set up the development environment:

git clone https://github.com/jsoyer/cv-tui-py
cd cv-tui-py
uv sync

Run tests:

uv run pytest

Run linting:

uv run ruff check src/

Run type checking:

uv run mypy src/ --strict

License

MIT

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

cv_tui-1.0.0.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

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

cv_tui-1.0.0-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

Details for the file cv_tui-1.0.0.tar.gz.

File metadata

  • Download URL: cv_tui-1.0.0.tar.gz
  • Upload date:
  • Size: 44.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cv_tui-1.0.0.tar.gz
Algorithm Hash digest
SHA256 cc260047677e42c42b40da9a1b5179314b48909e028723506a828b5df7f5e4d5
MD5 7f27c67e7c4435f77f09a33e3dbda287
BLAKE2b-256 92fcc8357e354f2c69d5135acece5325276655ee9e0dcbf1fd227593399cf7fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cv_tui-1.0.0.tar.gz:

Publisher: release.yml on jsoyer/cv-tui-py

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

File details

Details for the file cv_tui-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: cv_tui-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 36.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cv_tui-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f476d300d146d9f22618716759424fcd51de40c1426a0415a08245eab6f9c6d3
MD5 dbc08e9bab2fd205b6aab3cba802aafd
BLAKE2b-256 ee37895702192ba18533961ed20f020b7cf1b57b106affb71e19ca2c6d8f4f14

See more details on using hashes here.

Provenance

The following attestation bundles were made for cv_tui-1.0.0-py3-none-any.whl:

Publisher: release.yml on jsoyer/cv-tui-py

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