Skip to content

abstractionjackson/cv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cv

cv is a FastAPI application for managing professional resumes. It includes:

  • A JSON API with SQLite persistence
  • A desktop-focused web client (single-page experience) built with templates, HTMX, Web Components, and Pico CSS
  • JSON export validated against JSON Schema

Features

  • Resume CRUD with nested sections:
    • Contact info
    • Optional summary
    • Education
    • Experience
  • Reusable highlight bullets that can be attached to experiences
  • Resume export endpoint validated using JSON Schema
  • Styled HTML/PDF document rendering for saved resumes
  • Browser UI with:
    • Resume list view
    • Dynamic create-resume composer
    • Reuse of existing contact, education, experience, and highlight data
    • Document page describing the formatted/PDF rendering flow

Quickstart

  1. Create a virtual environment and install dependencies:
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
  1. Run the API:
uvicorn app.main:app --reload
  1. Open the web client:
http://127.0.0.1:8000/
  1. API docs:
http://127.0.0.1:8000/docs

Key Endpoints

  • POST /highlights create or reuse a highlight
  • GET /highlights list highlights
  • POST /resumes create a resume
  • GET /resumes list resumes
  • GET /resumes/{resume_id} fetch a resume
  • PUT /resumes/{resume_id} replace a resume
  • DELETE /resumes/{resume_id} delete a resume
  • POST /summaries/generate generate a resume summary from the current draft resume payload
  • GET /resumes/{resume_id}/export get schema-validated JSON export
  • GET /resumes/{resume_id}/document get the styled HTML document for a resume
  • GET /resumes/{resume_id}/pdf render a resume as PDF
  • GET /schemas/resume-export get the JSON schema used for exports

Web UI Routes

  • GET / main SPA shell (resume list + create workflow)
  • GET /ui/resumes HTMX partial for resume list
  • GET /ui/resume/new HTMX partial for dynamic resume composer
  • POST /ui/resumes HTMX form submit for creating a resume
  • GET /document placeholder for future formatted/PDF document rendering

PDF Rendering Dependencies

The PDF renderer uses WeasyPrint, which converts HTML/CSS into PDF output. On macOS, install the native libraries it depends on with Homebrew:

brew install cairo pango harfbuzz fribidi glib

Then install the project dependencies in your virtual environment:

pip install -e ".[dev]"

AI Summary Generation

The resume composer supports AI-generated summaries. The frontend sends the current draft resume payload to POST /summaries/generate, the backend summarizes the experience section, and the returned text is saved into Resume.summary when the user submits the full resume form.

For local development, this feature is Ollama-first. Start Ollama, then pull a lighter model such as gemma3:4b:

ollama serve
ollama pull gemma

Configuration is controlled with environment variables:

  • CV_SUMMARY_PROVIDER defaults to ollama
  • CV_OLLAMA_URL defaults to http://127.0.0.1:11434
  • CV_OLLAMA_MODEL defaults to gemma

Example: Create Resume

curl -X POST http://127.0.0.1:8000/resumes \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior Backend Engineer",
    "contact_info": {
      "name": "Jordan Candidate",
      "email": "jordan@example.com",
      "phone": "555-0100",
      "location": "Remote"
    },
    "summary": "Backend engineer with strong API design experience.",
    "education": [],
    "experiences": [
      {
        "job_title": "Senior Engineer",
        "employer": "Acme Corp",
        "is_current": true,
        "highlights": [
          {"text": "Improved deployment speed by 40%."}
        ]
      }
    ]
  }'

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors