{
  "markdown": "# easyCV\n\nCV/resume consolidation pipeline. Upload your CVs, resumes, and LinkedIn exports — get a clean, ATS-optimized single-column LaTeX resume.\n\n## How It Works\n\n1. **Upload** — drag-and-drop your PDFs, text files, or LinkedIn exports\n2. **Extract** — text is pulled from your documents server-side\n3. **Consolidate** — an LLM (GPT-4o, Claude, or Ollama) merges everything into a structured profile\n4. **Generate** — produces a clean single-column LaTeX resume optimized for ATS parsers\n5. **Download** — pay once ($9-19) to download the final PDF\n\nThe LLM handles the hard part: deduplicating overlapping roles, ranking experience relevance, and writing strong bullet points. Your files are processed then discarded — no accounts, no retention.\n\n## Quick Start\n\n```bash\n# Install dependencies\npip install -e .\n\n# CLI: scan directories for resumes\neasycv scan --auto\n\n# CLI: specific directories with a particular LLM\neasycv scan ~/Downloads ~/Desktop --llm openai\n\n# Dry run to preview before copying\neasycv scan ~/Downloads --dry-run\n```\n\n## LLM Configuration\n\nThe pipeline supports three LLM providers. Set via `LLM_PROVIDER` env var:\n\n| Provider | Default Model | API Key Env Var |\n|----------|---------------|-----------------|\n| `openai` | `gpt-4o` | `OPENAI_API_KEY` |\n| `anthropic` | `claude-sonnet-4-20250514` | `ANTHROPIC_API_KEY` |\n| `ollama` | `llama3.2` | none (local) |\n\nSet API keys via environment variables or in `~/.config/cv-pipeline/config.json`.\n\n## Web App\n\nA Next.js + Convex frontend handles upload, live preview, Stripe checkout, and PDF download. A Python worker process handles background consolidation jobs.\n\n```bash\n# Run frontend dev server\ncd web && bun run dev\n\n# Run worker (polls Convex for queued jobs)\nuv run python -m backend.worker\n```\n\n## Architecture\n\n```\neasyCV\n├── backend/\n│   ├── pipeline.py    — Resume processing pipeline (extract, LLM consolidate, STE-100, LaTeX)\n│   ├── latex.py       — LaTeX/PDF resume generation\n│   ├── ste100.py      — ASD-STE100 grammar/style validator\n│   └── worker.py      — Long-lived background worker (polls Convex for jobs)\n├── web/\n│   ├── app/           — Next.js 16 App Router (upload, preview, checkout, download)\n│   ├── convex/        — Convex DB schema & functions\n│   └── components/    — React UI components\n├── tests/             — Python test suite\n└── automation/        — Autonomous coding framework (OCR, TDD, LLM refactor)\n```\n\n### Pipeline Stages\n\n1. **Scan** — find PDFs matching CV/resume/LinkedIn patterns, group by person\n2. **Extract** — pull text from PDFs using system tools\n3. **Consolidate** — LLM produces structured JSON (name, skills, experience, education)\n4. **Score** — evaluate completeness and quality\n5. **Generate** — produce LaTeX/PDF resume in single-column ATS format\n\n## Tech Stack\n\n- **Python 3.13+** — pipeline, extraction, LaTeX generation (`uv run pytest`)\n- **TypeScript / Bun** — Next.js 16 web frontend, Convex backend\n- **Convex** — database, realtime subscriptions, file storage\n- **OpenAI / Anthropic / Ollama** — LLM providers for consolidation\n- **LaTeX** — PDF resume output\n- **Stripe** — payment processing (one-time or subscription)\n",
  "bytes": 3170,
  "sha": "c1a74c1a36eaa352be1cbc0accedc3d7ab8dd43f7dc891f5f3ba0c3e0f508e62",
  "repo_slug": "4cecoder/easycv",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_4cecoder_easycv_knowledge_index_md_3cc548b0/readme"
}