Darzi is a résumé suite built by a student club at VIT Bhopal: upload your résumé, check it against a job post, and edit it in LaTeX with a live PDF preview. Eleven people committed code between July and September 2025. I built most of the backend API and parts of the LaTeX editor, and I'm second by commits and first by lines changed.
What it is
"Darzi" means tailor. You sign in, upload a PDF, Word file or image of your résumé, and get it back as structured data. The ATS checker scores the résumé against a job description on keywords, measurable results, sections and repetition. The LaTeX editor puts your details into a template and compiles a PDF beside the form.
Why it mattered
Applicant tracking systems filter résumés on wording before a person reads them. Students and people switching fields often have the skills but not the words the posting uses, and paid résumé services cost money they don't have. The project set out to close that gap with a free tool.
My part
The club split the work. Arpit ran the repo and the infrastructure, Manthan built the landing page and the final ATS analyser, Ayush the LaTeX templates and the compile server, and Swayam the sign-in. My part was the résumé-processing backend, across nine merged pull requests:
Text extraction (PR #45): a FastAPI service that pulls text out of PDFs, Word files and images, with a Docker image for Hugging Face Spaces.
The parsing layer (PRs #48 and #54): an LLM manager with a Gemini provider that turns raw text into the résumé schema. The API then checks the schema, removes duplicates, merges several uploaded files into one résumé and reshapes it for the frontend.
The production API (PR #54):
/parse-data,/generate-resume,/auto-fixand/health, plus a production Docker image with worker and keep-alive settings read from the environment.Editor parts (PR #55): the Monaco LaTeX editor, the template and style panel, and the PDF preview with zoom, download and retry.
Earlier I built the dashboard layout and the issue templates. By lines I'm the top contributor: about 11,500 added and 7,900 removed, not counting lockfiles. Arpit has the most commits.
- UploadPDF, Word, image or text
- ExtractText from each file
- StructureGemini fills the résumé schema; local parser if it fails
- NormaliseMerged, de-duplicated, shaped for the editor

What was hard
Résumés don't share a layout. My first parser (PR #26) used PyPDF2 and spaCy rules, and a heavier field extractor followed. Rules kept missing fields as soon as the layout changed. In the PR #45 review I recommended flipping the order: let the model structure the text, and keep the local parser as the fallback. The final API works that way. The cost is a Gemini call per upload and a dependency on a model that can be retired.
Keeping the model replaceable. I put the LLM behind a small manager with one Gemini provider. Callers ask the manager, not Gemini, so adding a second provider doesn't touch them. When no key is set the API still answers: /health reports whether the model is available, and parsing falls back to the local extractor.
Too much code. By late August the backend had an old parser, an old analyser, a generator and a Streamlit app beside the new API, and a reviewer said the structure was confusing. PR #54 deleted about 5,000 lines of it and left one FastAPI app.
Where it landed
Darzi is live at darze.vercel.app. Work stopped in September 2025. The club repo has 17 stars and 23 forks, mostly from members. Some planned features never made the final code, including LinkedIn and GitHub import and an MCP tool server a teammate built early on.
When I checked in October 2026, the API was up but the Gemini step failed. Parsing fell back to the local extractor and returned only the name and email. The model in the code, gemini-1.5-flash, needs updating before the parser works fully again.

