A full-stack web application that dynamically bridges GitHub's GraphQL API and Overleaf's LaTeX compilation engine. GitCV automates the generation of a professional, typeset curriculum vitae by extracting a user's repository data, processing it through an LLM for professional phrasing, and injecting it into a parameterized TeX template.
- Authentication: OAuth 2.0 flow via GitHub to provision a short-lived user access token.
- Data Extraction: Queries the GitHub GraphQL API to batch-fetch user bios, pinned repositories, and language statistics in a single network request.
- LLM Transformation (BYOK): Intercepts raw repository descriptions and routes them to an LLM (OpenAI/Gemini) using user-provided API keys. The LLM parses technical git-commits into impact-driven resume bullet points.
- LaTeX Sanitization: Passes the LLM output through a strict sanitization layer to safely escape TeX special characters (e.g.,
&,%,_) to prevent compiler failures. - Template Injection: Binds the sanitized JSON payload to a base
.tex.jinjatemplate using the Jinja2 engine. - Packaging & Routing: Bundles the generated
.texfile into an in-memory.ziparchive, hosts it temporarily, and redirects the client to Overleaf via thesnip_uriprotocol for instant remote compilation.
- Backend: Python 3.10+, FastAPI, Uvicorn
- Templating: Jinja2
- Integrations: GitHub GraphQL API, OpenAI/Gemini REST APIs, Overleaf URL Import API
- Python 3.10+
- A registered GitHub OAuth Application (Requires
CLIENT_IDandCLIENT_SECRET) - An OpenAI or Gemini API key (for local LLM integration testing)
-
Clone the repository:
git clone [https://github.com/YOUR_USERNAME/gitcv.git](https://github.com/YOUR_USERNAME/gitcv.git) cd gitcv/backend -
Configure environment variables:
cp .env.example .env
Open
.envand populate it with your GitHub OAuth credentials and local testing keys. Ensure.envis listed in your.gitignore. -
Initialize the virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Start the ASGI development server:
uvicorn app.main:app --reload
The API will be available at
http://127.0.0.1:8000. Accesshttp://127.0.0.1:8000/docsfor the interactive Swagger UI.
Status: MVP in progress. Core API scaffolding complete.
- Phase 0: Project Setup & Repo Scaffolding
- Phase 1: GitHub OAuth flow & token exchange
- Phase 2: GitHub GraphQL data fetching & edge-case testing
- Phase 3: LLM Integration & prompt engineering for resume generation
- Phase 4: LaTeX Sanitization layer & unit testing
- Phase 5: Jinja2 LaTeX templating & local TeX compilation checks
- Phase 6: In-memory Zip creation & Overleaf
snip_urirouting - Phase 7: End-to-End Integration & Frontend UI build
- Phase 8: Security hardening, rate limiting, and public release
Distributed under the Apache 2.0 License.