<?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: Vatsal Panchal</title>
    <description>The latest articles on DEV Community by Vatsal Panchal (@notvats).</description>
    <link>https://dev.to/notvats</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%2F4154805%2Fd94851e3-5fc0-449c-a84c-e3497fdf0dcc.png</url>
      <title>DEV Community: Vatsal Panchal</title>
      <link>https://dev.to/notvats</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/notvats"/>
    <language>en</language>
    <item>
      <title>My friend was lost in the internship hunt, so I built him Get A Job.</title>
      <dc:creator>Vatsal Panchal</dc:creator>
      <pubDate>Sun, 04 Oct 2026 15:29:48 +0000</pubDate>
      <link>https://dev.to/notvats/my-friend-was-lost-in-the-internship-hunt-so-i-built-him-get-a-job-27l4</link>
      <guid>https://dev.to/notvats/my-friend-was-lost-in-the-internship-hunt-so-i-built-him-get-a-job-27l4</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;I wanted to build something a friend could actually use beyond this weekend.&lt;br&gt;
My friend is a third-year Computer Science student looking for summer and software internships. He wants opportunities at good companies, but finding them means going through different career pages, checking locations and requirements, and figuring out which roles fit his resume. Then comes entering the same information into another application form.&lt;br&gt;
So I built Get A Job, an internship discovery and application assistant that keeps those steps in one place.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Demo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7IXoFRc8v48" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Check out the GitHub Repo:&lt;/strong&gt;
&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/ItsVats" rel="noopener noreferrer"&gt;
        ItsVats
      &lt;/a&gt; / &lt;a href="https://github.com/ItsVats/get-a-job" rel="noopener noreferrer"&gt;
        get-a-job
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open-source AI internship discovery and application assistant.
    &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;Get A Job&lt;/h1&gt;
&lt;/div&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/70796755/665146812-0ad74085-cd98-440a-afa1-b134b2f7dfdb.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTExMzgwMTEsIm5iZiI6MTc5MTEzNzcxMSwicGF0aCI6Ii83MDc5Njc1NS82NjUxNDY4MTItMGFkNzQwODUtY2Q5OC00NDBhLWFmYTEtYjEzNGIyZjdkZmRiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDA0VDE4MTUxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZlYWIzNTY4MmM0ZDM2NDBhY2M2ZjU0YWFlNTFhMmZlMzNiZjRhODMxMzEyZDIyOWM1Y2VhOGNiMjY1Mzg5OTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.n4TKuulQ73jiRe33t5WnoWTIB6G8pWndEmRHIPoxA1k"&gt;&lt;img width="1416" height="837" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F70796755%2F665146812-0ad74085-cd98-440a-afa1-b134b2f7dfdb.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTExMzgwMTEsIm5iZiI6MTc5MTEzNzcxMSwicGF0aCI6Ii83MDc5Njc1NS82NjUxNDY4MTItMGFkNzQwODUtY2Q5OC00NDBhLWFmYTEtYjEzNGIyZjdkZmRiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDA0VDE4MTUxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZlYWIzNTY4MmM0ZDM2NDBhY2M2ZjU0YWFlNTFhMmZlMzNiZjRhODMxMzEyZDIyOWM1Y2VhOGNiMjY1Mzg5OTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.n4TKuulQ73jiRe33t5WnoWTIB6G8pWndEmRHIPoxA1k" class="js-gh-image-fallback"&gt;&lt;/a&gt;
&lt;p&gt;An internship discovery and application assistant built for a real third-year
Computer Science student looking for summer and software internships.&lt;/p&gt;
&lt;p&gt;Upload a resume, review your profile, and find opportunities in your current
country. Each search adds new listings to the dashboard, with locations
source links, matched skills and missing requirements. Application assistance
fills supported forms and asks you to review everything before submitting.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Stack&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js, TypeScript, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI, SQLAlchemy, PostgreSQL, Alembic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Ollama with Qwen3 8B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discovery:&lt;/strong&gt; Firecrawl and public Greenhouse/Lever job APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF / browser:&lt;/strong&gt; pypdf and Playwright&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resume understanding, job requirement extraction and answer drafts run through
the local open-weight model. The AI provider can be replaced; there is no
OpenAI/GPT runtime fallback. PDF parsing and match scores use deterministic code.
Job discovery still needs an internet connection.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Prerequisites: Python 3.12+, Node.js (24 tested), PostgreSQL and Ollama.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Install dependencies&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;For…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ItsVats/get-a-job" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;I built Get A Job with Next.js, TypeScript, and Tailwind CSS on the frontend, backed by FastAPI and PostgreSQL.&lt;/p&gt;

&lt;p&gt;For the AI, I used Qwen3 8B running locally through Ollama. It reads the extracted resume, understands job requirements, and helps draft application answers using the user’s confirmed professional information. The generated answers are reviewed before being used.&lt;/p&gt;

&lt;p&gt;I kept the straightforward parts in regular code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pypdf extracts resume text.&lt;/li&gt;
&lt;li&gt;Firecrawl discovers public job listings.&lt;/li&gt;
&lt;li&gt;Greenhouse and Lever adapters fetch published job data.&lt;/li&gt;
&lt;li&gt;Matching scores are calculated deterministically.&lt;/li&gt;
&lt;li&gt;Playwright prepares supported application forms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also added validation and source evidence instead of blindly trusting the model. One thing I learned while building this was that valid JSON doesn't necessarily mean accurate information.&lt;/p&gt;

&lt;p&gt;I used Codex as a development assistant, but the finished application’s AI runs locally through Ollama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does Open Innovation Matter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A resume contains personal information, and I didn't want the user to have to send it to a closed AI API just to understand their own profile.&lt;/p&gt;

&lt;p&gt;Running Qwen3 8B locally means resume inference can happen directly on the user's machine. Job discovery still needs the internet, and applying obviously involves sending reviewed information to an employer, but the resume-processing part stays local.&lt;/p&gt;

&lt;p&gt;It also gives me more control. The model sits behind a provider interface, so I can experiment with different open-weight models, prompts, and validation methods without rebuilding the application around a proprietary API.&lt;/p&gt;

&lt;p&gt;Local inference isn't perfect—it needs more resources and can still make mistakes. But it gives the project more control over how personal data is processed.&lt;/p&gt;

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