<?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: Dipendu Ray</title>
    <description>The latest articles on DEV Community by Dipendu Ray (@blezecon).</description>
    <link>https://dev.to/blezecon</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%2F4153713%2Fc69e86fa-2c97-4888-98b9-0ef67d252571.jpeg</url>
      <title>DEV Community: Dipendu Ray</title>
      <link>https://dev.to/blezecon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blezecon"/>
    <language>en</language>
    <item>
      <title>DevOrbit Grounded Resume &amp; Job Matching Built for Friends Seeking Work</title>
      <dc:creator>Dipendu Ray</dc:creator>
      <pubDate>Sat, 03 Oct 2026 15:16:12 +0000</pubDate>
      <link>https://dev.to/blezecon/devorbit-grounded-resume-job-matching-built-for-friends-seeking-work-2ka6</link>
      <guid>https://dev.to/blezecon/devorbit-grounded-resume-job-matching-built-for-friends-seeking-work-2ka6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Applying for jobs today feels like screaming into a void. You send a resume out, hear nothing back, and never find out whether you were rejected for a missing skill or because a recruiter simply moved on. Job listings are walls of buzzwords. Resumes are walls of bullet points. To make things worse, generic AI resume tools paper over this with an arbitrary number—&lt;em&gt;"72% match"&lt;/em&gt;—and then proceed to hallucinate skills or experience you don't even have.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;DevOrbit&lt;/strong&gt; for my friends who are actively seeking jobs. &lt;/p&gt;

&lt;p&gt;When you're searching for work, what you need isn't flattery or invented qualifications—it's &lt;strong&gt;honest clarity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does my background legitimately line up with this job listing?&lt;/li&gt;
&lt;li&gt;What requirements do I satisfy, what is partial, and what is genuinely missing?&lt;/li&gt;
&lt;li&gt;How can I highlight my real experience without making anything up?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DevOrbit&lt;/strong&gt; is a privacy-first, grounded job matching web app. It takes a candidate's PDF resume, extracts their profile using an open-weight model, searches across six real-time job boards simultaneously, and runs a &lt;strong&gt;deterministic matching engine in plain code&lt;/strong&gt; to produce an honest breakdown of where you stand. Every single recommendation is strictly grounded in what you actually wrote.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Check out the project repository on GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/blezecon/devorbit" rel="noopener noreferrer"&gt;https://github.com/blezecon/devorbit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Run Locally
&lt;/h3&gt;

&lt;p&gt;You can spin up DevOrbit in minutes with local inference via Ollama or via OpenRouter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone &amp;amp; install&lt;/span&gt;
git clone https://github.com/blezecon/devorbit.git
&lt;span class="nb"&gt;cd &lt;/span&gt;devorbit
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="c"&gt;#pnpm i&lt;/span&gt;

&lt;span class="c"&gt;# 2. Setup environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env.local

&lt;span class="c"&gt;# Run completely local with Gemma (Ollama)&lt;/span&gt;
ollama pull gemma3:4b
ollama serve

&lt;span class="c"&gt;# You Can run this with llama cpp also&lt;/span&gt;
&lt;span class="c"&gt;# If you are facing problems with local models, then You can use openrouter api also&lt;/span&gt;

&lt;span class="c"&gt;# 3. Start DevOrbit&lt;/span&gt;
npm run dev &lt;span class="c"&gt;#pnpm dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Visit &lt;code&gt;http://localhost:3000&lt;/code&gt; to upload a resume and explore matched jobs.&lt;/p&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&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/blezecon" rel="noopener noreferrer"&gt;
        blezecon
      &lt;/a&gt; / &lt;a href="https://github.com/blezecon/devorbit" rel="noopener noreferrer"&gt;
        devorbit
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Fully Vibe Coded 
    &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;DevOrbit&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Understand which jobs actually fit your resume.&lt;/p&gt;

&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest 2026 Weekend Challenge: Build for a Friend&lt;/strong&gt; — an MVP that helps one
real person compare their resume against real job listings, with an open-weight model doing the
reading.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Applying to jobs feels like guessing. You send a resume, hear nothing back, and never learn whether you
were rejected for a skill you lacked or because the recruiter moved on. Job descriptions are walls of
text. Your resume is a different wall of text. Nothing in either tells you where they line up.&lt;/p&gt;
&lt;p&gt;Generic AI resume tools paper over this with a single invented score — "72% match" — and then suggest
you add experience you do not have.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Solution&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;DevOrbit reads both documents with an open-weight model, puts them in the same structured
vocabulary, and then compares them with plain code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Matches&lt;/strong&gt; — requirements your resume…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/blezecon/devorbit" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The codebase is open source under the permissive &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend / Framework&lt;/strong&gt;: Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS v4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Components&lt;/strong&gt;: &lt;a href="https://www.neobrutalism.dev" rel="noopener noreferrer"&gt;Neobrutalism UI&lt;/a&gt; built on Base UI / shadcn registry with Lucide icons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation&lt;/strong&gt;: Zod runtime schema validation on all inputs and model outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF Extraction&lt;/strong&gt;: &lt;code&gt;unpdf&lt;/code&gt; for zero-disk, pure in-memory text parsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Suite&lt;/strong&gt;: Vitest suite covering matching logic, job providers, and parsing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The core philosophy behind DevOrbit is &lt;strong&gt;separation of language extraction from evaluation logic&lt;/strong&gt;. Large language models are fantastic parsers, but notoriously unreliable judges if left unconstrained. &lt;/p&gt;

&lt;p&gt;DevOrbit implements a 5-stage pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A["1. PDF Upload (In-memory via unpdf)"] --&amp;gt; B["2. Candidate Extraction (Gemma Open-Weight Model)"]
    C["Job Search (6 Free APIs: Himalayas, Jobicy, RemoteOK, Remotive, Arbeitnow, Ocean of Jobs)"] --&amp;gt; D["3. Requirements Extraction (Gemma Open-Weight Model)"]
    B --&amp;gt; E["4. Deterministic Matching Engine (Plain Code - Zero LLM Hallucinations)"]
    D --&amp;gt; E
    E --&amp;gt; F["5. Grounded Explanation &amp;amp; Suggestions (Gemma Model + strict evidenceRef)"]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  The 5 Stages:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extract&lt;/strong&gt;: The PDF is parsed directly in memory with &lt;code&gt;unpdf&lt;/code&gt; without writing any temp files to disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Candidate Extraction&lt;/strong&gt;: An open-weight model parses messy resume text into structured &lt;code&gt;Candidate&lt;/code&gt; JSON (skills, experience, projects, education).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Requirements Extraction&lt;/strong&gt;: When a job is selected from one of the 6 integrated job boards, the model extracts core requirements into structured &lt;code&gt;JobRequirements&lt;/code&gt; JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Match (Plain Code)&lt;/strong&gt;: &lt;strong&gt;No model is involved here.&lt;/strong&gt; The matching is pure arithmetic and normalized token matching with an alias table. The same resume and job will always produce the identical fit score. A model cannot talk itself into an inflated percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grounded Explanation&lt;/strong&gt;: The model explains matches and highlights suggestions. Every single suggestion must quote an exact phrase (&lt;code&gt;evidenceRef&lt;/code&gt;) from your resume. If it references an ungrounded or invented detail, the suggestion is discarded in code.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open-source AI is not an afterthought in DevOrbit—it is the foundational reason the product can be trusted:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Resume Privacy&lt;/strong&gt;: A resume contains deeply sensitive personal information—full legal names, employment timelines, educational history, and contact details. Sending this data to closed proprietary cloud APIs exposes job seekers to tracking, logging, and data harvesting. With open-weight models (running locally on Ollama or llama.cpp), the resume &lt;strong&gt;never leaves your machine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Barrier to Entry (Zero API Cost)&lt;/strong&gt;: Job seekers are often on strict budgets. Running an open-weight 4B model locally costs nothing in API subscriptions or token billing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability &amp;amp; Integrity&lt;/strong&gt;: Commercial ATS scanners hide their algorithms behind proprietary black boxes. With open-source models and transparent prompts versioned directly in code (&lt;code&gt;PROMPT_VERSION&lt;/code&gt;), every evaluation is fully auditable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience&lt;/strong&gt;: The system supports standard OpenAI-compatible endpoints, allowing users to swap between local runtimes (Ollama, llama-server) or hosted gateways (OpenRouter) with zero code modifications.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for friends on the job hunt during the Hacktoberfest 2026 Weekend Challenge.&lt;/em&gt;&lt;/p&gt;

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