<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hardik</title>
    <description>The latest articles on DEV Community by Hardik (@hardikgaikwad).</description>
    <link>https://dev.to/hardikgaikwad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159619%2F7ac80ab0-6c51-4a42-b2f0-35a213d1faf3.jpg</url>
      <title>DEV Community: Hardik</title>
      <link>https://dev.to/hardikgaikwad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hardikgaikwad"/>
    <language>en</language>
    <item>
      <title>No More TeX Errors: Meet CVstart, a 100% Private AI Resume Builder</title>
      <dc:creator>Hardik</dc:creator>
      <pubDate>Sun, 04 Oct 2026 11:20:14 +0000</pubDate>
      <link>https://dev.to/hardikgaikwad/no-more-tex-errors-meet-cvstart-a-100-private-ai-resume-builder-4fbe</link>
      <guid>https://dev.to/hardikgaikwad/no-more-tex-errors-meet-cvstart-a-100-private-ai-resume-builder-4fbe</guid>
      <description>&lt;p&gt;What I Built&lt;br&gt;
I built CVstart—a local-first, AI-powered agentic LaTeX resume builder designed for anyone who loves the typographical beauty of LaTeX but dreads fighting syntax errors, brittle formatting, and margin spills.&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/5Zeit4GWklw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Code&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/hardikgaikwad" rel="noopener noreferrer"&gt;
        hardikgaikwad
      &lt;/a&gt; / &lt;a href="https://github.com/hardikgaikwad/CVStart" rel="noopener noreferrer"&gt;
        CVStart
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local LLM AI Resume Builder in Latex
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CVstart&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A Local-First, AI-Powered Agentic LaTeX Resume Builder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/hardikgaikwad/CVStart/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1498a580110c107910a7e0d7e7a667d43d06947b1db0d8f183a03c00e5ec3352/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d627269676874677265656e2e737667" alt="Python: 3.10+"&gt;&lt;/a&gt;
&lt;a href="https://react.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ba3c159a0fd14b09005b75937b7f95f72b310fad55b0af7027dddb9cf95bfbc0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d6379616e2e737667" alt="React: 19"&gt;&lt;/a&gt;
&lt;a href="https://tectonic-typesetting.github.io/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f043d3f4da10937f61fee331d65dac04ea512d244dc893834a198b487da86f8a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c615465582d546563746f6e69632d707572706c652e737667" alt="LaTeX: Tectonic"&gt;&lt;/a&gt;
&lt;a href="https://ollama.ai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a1f6a1cfc72f2f83e0c51e6b607b4595402cbe346da483ca0a4ce3383c20d81b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f496e666572656e63652d4f6c6c616d61253230284c6f63616c292d6f72616e67652e737667" alt="Inference: Ollama"&gt;&lt;/a&gt;
&lt;a href="https://github.com/hardikgaikwad/CVStart/tests/" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/404575de2c4d9a0760395888144fbb5e694306efcc84842774145a73ae84373a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d31392532305061737365642d737563636573732e737667" alt="Tests: 19 Passed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CVstart&lt;/strong&gt; empowers software engineers, students, and professionals to create, edit, format, compile, inspect, and export stunning LaTeX resumes using natural language—without needing to write or debug complex LaTeX syntax.&lt;/p&gt;
&lt;p&gt;Unlike conventional AI resume tools that merely generate raw text and dump it into an unverified document, CVstart features a &lt;strong&gt;true agentic compile-inspect-correct loop&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The AI translates user facts or instructions into a structured change plan.&lt;/li&gt;
&lt;li&gt;The LaTeX engine compiles the source in a secure, sandboxed local environment.&lt;/li&gt;
&lt;li&gt;The geometry inspection engine analyzes the resulting PDF text bounding boxes, density, margins, and page spills using PyMuPDF.&lt;/li&gt;
&lt;li&gt;If an overflow or layout flaw is detected, the agent autonomously executes targeted corrections (up to 3 bounded iterations) to produce a flawless document.&lt;/li&gt;
&lt;li&gt;All operations run &lt;strong&gt;100% locally&lt;/strong&gt; on your machine using Ollama and local compilation—&lt;strong&gt;zero cloud calls, zero telemetry, absolute privacy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/hardikgaikwad/CVStart" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Who I Built It For&lt;br&gt;
I built this for my close friend Abhinav, a final year B. preparing for backend and development roles.&lt;/p&gt;

&lt;p&gt;Abhinav faced two frustrating roadblocks:&lt;/p&gt;

&lt;p&gt;The "LaTeX Tax": Every time he tailored his resume for a job, he spent 80% of his time debugging cryptic TeX compilation errors (! LaTeX Error: Missing $ inserted, bad table line breaks, or bullet points overflowing onto page 2 by three lonely lines).&lt;br&gt;
The Cloud Privacy Dilemma: He refused to paste his unredacted career history, private internal team metrics, home address, and compensation notes into closed cloud LLM websites. A resume contains your most sensitive personal and career data, and the idea of feeding it into closed AI APIs that log prompts and train on user inputs felt unacceptable.&lt;br&gt;
The Solution&lt;br&gt;
CVstart solves both problems:&lt;/p&gt;

&lt;p&gt;100% Local-First &amp;amp; Air-Gapped: Powered entirely by open-weight models (llama3.2, qwen2.5) running locally via Ollama, with an embedded local LaTeX compiler. Zero cloud calls, zero telemetry, absolute data sovereignty.&lt;br&gt;
Agentic Compile-Inspect-Correct Loop: Instead of generating raw markdown and hoping for the best, CVstart compiles the document in a sandboxed local environment, analyzes the PDF page geometry with PyMuPDF, detects vertical density and page spills, and autonomously adjusts vertical spacing and padding to fit exactly on a single page.&lt;br&gt;
Editorial Document Editor Experience: Built with a minimal, light-mode, distraction-free aesthetic with square geometry, clean monochrome typography, and no AI chat-bubble clutter.&lt;br&gt;
Demo&lt;br&gt;
CVstart runs as a desktop application with a single CLI command (CVstart). It features a real-time split workspace: structured section editing on the left, an authentic rendered document sheet on the right, and an integrated AI utility panel.&lt;/p&gt;

&lt;p&gt;Workflow Highlights&lt;br&gt;
Single-Command Launch: Typing CVstart in the terminal runs system readiness checks (Python, Tectonic compiler, Ollama models), migrations, and opens the local interface at &lt;a href="http://127.0.0.1:9999/" rel="noopener noreferrer"&gt;http://127.0.0.1:9999/&lt;/a&gt;.&lt;br&gt;
Natural Language Assistant: Ask the local model to "Strengthen action verbs under my latest backend role and emphasize distributed systems metrics." The assistant returns a structured Change Plan with a color-coded diff review card (Accept / Discard).&lt;br&gt;
Live PDF Rendering: Every accepted change re-renders the LaTeX PDF in sub-second time, displaying the high-resolution document directly on the neutral canvas with zoom and pan controls.&lt;br&gt;
One-Click Export: Download publication-ready PDFs or export the raw .tex source files.&lt;br&gt;
Code&lt;br&gt;
CVstart is open-source under the MIT License:&lt;/p&gt;

&lt;p&gt;Repository URL: &lt;a href="https://github.com/hardikgaikwad/CVstart" rel="noopener noreferrer"&gt;https://github.com/hardikgaikwad/CVstart&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;br&gt;
Backend: Python 3.10+, Django REST Framework, SQLite&lt;br&gt;
Frontend: React 19, TypeScript, Tailwind CSS, Lucide Icons&lt;br&gt;
Local AI Inference: Ollama HTTP Client (llama3.2:3b, qwen2.5:7b, llama3.2-vision)&lt;br&gt;
Compilation Engine: Sandboxed Tectonic LaTeX compiler (zero shell escapes)&lt;br&gt;
Geometry Inspection: PyMuPDF (fitz) for printable bounding box measurement and layout density analysis&lt;br&gt;
How I Built It&lt;br&gt;
CVstart is architected around open-source AI and local tooling:&lt;/p&gt;

&lt;p&gt;Local AI Inference with Ollama: We integrated local open-weight models using Ollama's HTTP API. llama3.2:latest (3.2B) is used as an ultra-fast model for rapid structured JSON planning, summary rewrites, and skill categorizations, while qwen2.5:latest (7.6B) handles advanced technical reasoning to ensure strict schema validation.&lt;/p&gt;

&lt;p&gt;Guardrailed Agentic Change Planner: When a user asks for edits, CVstart outputs a strictly structured JSON change plan (summary, affected_sections, proposed_structured_data). An anti-hallucination guardrail verifies that the AI didn't invent non-existent company names or degrees that weren't present in the user's ground-truth profile. The user retains complete control with an auditable visual diff review card.&lt;/p&gt;

&lt;p&gt;PyMuPDF Layout Inspection Loop: One of the hardest parts of resume formatting is preventing an accidental 2-line spill onto page 2. We built a closed-loop inspector using PyMuPDF (fitz). It computes vertical density, printable margins, and total word count. If an overflow is detected, the agent autonomously invokes a micro-refinement pass, adjusting LaTeX font size and list separations until the document fits cleanly on exactly 1 page.&lt;/p&gt;

&lt;p&gt;Why Does Open Innovation Matter?&lt;br&gt;
Open innovation made CVstart possible in ways closed commercial APIs simply could not:&lt;/p&gt;

&lt;p&gt;True Privacy &amp;amp; Data Sovereignty: Closed proprietary AI APIs require transmitting sensitive personal information—employment history, contact info, patents, and compensation metrics—to third-party cloud servers. With open-weight models running on Ollama, all data stays strictly on the user's machine. Zero data leakage, zero tracking.&lt;br&gt;
No Paywalls or Subscriptions: Job hunting is stressful enough without having to pay a $25/month SaaS fee to export your own resume. Open-source models mean free, unlimited compilations and edits forever, even when you're completely offline.&lt;br&gt;
Deterministic, Introspectable Tooling: Closed chatbots trap users in conversational black boxes. Open weights enabled us to build a transparent, introspectable loop: translating natural language into validated schemas, compiling with a local TeX engine, and measuring physical bounding boxes with PyMuPDF.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
