Spaces:
Running
Running
| title: DraftMe | |
| emoji: ⚡ | |
| sdk: docker | |
| app_port: 7860 | |
| app_file: app.py | |
| pinned: true | |
| short_description: Optimize your CV for any job description | |
| models: | |
| - Qwen 3.5 27B FP8 | |
| - NVIDIA Nemotron 3 Nano 30B BF16 | |
| colorFrom: blue | |
| colorTo: blue | |
| tags: | |
| - track:backyard | |
| - sponsor:openai | |
| - sponsor:nvidia | |
| - sponsor:modal | |
| - achievement:offbrand | |
| # DraftMe | |
| DraftMe is an AI resume tailoring tool. Upload a PDF resume, paste a job description, choose a model, and generate a targeted one-page resume PDF. | |
| The app extracts structured information from the resume, parses the job posting, optimizes the resume against the role, validates the result, and renders the final HTML to PDF. | |
| Video Link - https://www.loom.com/share/2fa0728d3ed84880acf34f2dc7723f34 | |
| Social Post Link - https://x.com/doksterium/status/2066206333112828216 | |
| GitHub Link - https://github.com/naradey2k/draftme, co-authored with Codex (didn't find how to make Codex-attributed commits) | |
| Models used deployed on Modal: Nemotron-3-Nano 30B and Qwen3.5 27B | |
| ## What It Does | |
| - Extracts resume content from uploaded PDFs with PyMuPDF | |
| - Parses job postings into title, company, requirements, keywords, and summary | |
| - Uses Modal-hosted vLLM endpoints for LLM inference | |
| - Lets users choose between Qwen and NVIDIA Nemotron backends | |
| - Runs validation filters for structure, length, hallucination risk, and keyword coverage | |
| - Shows live workflow telemetry while the resume is being generated | |
| - Renders the optimized resume to PDF with WeasyPrint | |
| ## Models | |
| DraftMe currently supports: | |
| - Qwen 3.5 27B FP8 | |
| - NVIDIA Nemotron 3 Nano 30B BF16 | |
| Both models are served through OpenAI-compatible Modal endpoints. | |
| ## Stack | |
| - Python 3.11 | |
| - Gradio Server with custom HTML, CSS, and JavaScript UI | |
| - FastAPI / ASGI | |
| - Pydantic and Pydantic AI | |
| - OpenAI SDK for Modal vLLM calls | |
| - PyMuPDF for PDF text extraction | |
| - WeasyPrint for PDF rendering | |
| - Jinja2 resume templates | |
| ## Local Run | |
| ```bash | |
| uv run --with-requirements requirements.txt uvicorn app:app --host 127.0.0.1 --port 8801 | |
| ``` | |
| Then open: | |
| ```text | |
| http://127.0.0.1:8801 | |
| ``` | |
| ## Hugging Face Spaces | |
| This project is configured as a Docker Space because it serves a custom ASGI app instead of a standard Gradio Blocks interface. | |
| The container starts with: | |
| ```bash | |
| uvicorn app:app --host 0.0.0.0 --port 7860 | |
| ``` | |
| ## Notes | |
| Generated PDFs are written to the local `output/` directory and are ignored during Space uploads. |