<?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: Khang Nguyen Pham</title>
    <description>The latest articles on DEV Community by Khang Nguyen Pham (@giottopham).</description>
    <link>https://dev.to/giottopham</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%2F712352%2F4990e269-f350-48a3-8875-42d1902a6907.jpeg</url>
      <title>DEV Community: Khang Nguyen Pham</title>
      <link>https://dev.to/giottopham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/giottopham"/>
    <language>en</language>
    <item>
      <title>I built an AI tool that tells you exactly what's missing from your resume before you apply</title>
      <dc:creator>Khang Nguyen Pham</dc:creator>
      <pubDate>Wed, 08 Jul 2026 08:37:08 +0000</pubDate>
      <link>https://dev.to/giottopham/i-built-an-ai-tool-that-tells-you-exactly-whats-missing-from-your-resume-before-you-apply-1abl</link>
      <guid>https://dev.to/giottopham/i-built-an-ai-tool-that-tells-you-exactly-whats-missing-from-your-resume-before-you-apply-1abl</guid>
      <description>&lt;p&gt;Every time I applied to a job, I'd stare at a JD and a resume side by side, trying to guess which keywords mattered and which gaps would actually come up in the interview. I built &lt;strong&gt;CareerReady&lt;/strong&gt; to do that comparison for me, and then let me practice the exact gaps it found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://career-ready.site" rel="noopener noreferrer"&gt;career-ready.site&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/GiottoPham/dev-career-ready" rel="noopener noreferrer"&gt;GiottoPham/dev-career-ready&lt;/a&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/GiottoPham" rel="noopener noreferrer"&gt;
        GiottoPham
      &lt;/a&gt; / &lt;a href="https://github.com/GiottoPham/dev-career-ready" rel="noopener noreferrer"&gt;
        dev-career-ready
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;CareerReady&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Biết mình thiếu gì. Luyện đúng chỗ. Tự tin phỏng vấn.&lt;/strong&gt;
Know your gaps. Practice right. Interview with confidence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://career-ready.site" rel="nofollow noopener noreferrer"&gt;career-ready.site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CareerReady helps developers prepare for job interviews. Paste a job description and upload your CV — the AI analyzes your skills against the JD, surfaces matched/missing skills with CV quick tips, and generates a mock interview covering the gaps.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/GiottoPham/dev-career-ready/docs/landing-page.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FGiottoPham%2Fdev-career-ready%2FHEAD%2Fdocs%2Flanding-page.png" alt="CareerReady landing page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Modules&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skill Analyzer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Paste or upload a JD (PDF/DOCX) + upload CV (PDF) or enter skills manually. AI outputs matched skills, missing skills (with priority), and CV quick tips.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mock Interview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Two modes — Project Deep Dive and Technical Quiz — generated from your CV/JD analysis. Answer via text or voice; AI scores the session and gives feedback with a full transcript.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recent analyses, mock interview history, and score tracking across sessions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Note: there is currently no learning-roadmap generation feature — the Skill Analyzer surfaces gaps…&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/GiottoPham/dev-career-ready" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paste a job description&lt;/strong&gt; (or upload PDF/DOCX) and &lt;strong&gt;upload your CV&lt;/strong&gt; (PDF).&lt;/li&gt;
&lt;li&gt;AI compares the two and returns matched skills, missing skills ranked by priority, and quick CV tips.&lt;/li&gt;
&lt;li&gt;From there you jump straight into a &lt;strong&gt;mock interview&lt;/strong&gt; built from the gaps it found — either a Project Deep Dive or a Technical Quiz, answered by text or voice.&lt;/li&gt;
&lt;li&gt;Everything lands on a dashboard: past analyses, interview history, and score trends over time.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why this design
&lt;/h2&gt;

&lt;p&gt;The interesting part wasn't the AI call, it was making the &lt;em&gt;waiting&lt;/em&gt; feel honest. The analyze pipeline is a few real steps — parsing the CV/JD, validating the JD is actually a job description (so someone can't paste garbage and burn a Gemini call), uploading files, then the actual skill-gap analysis — and I stream each step's status to the frontend over SSE instead of showing a generic spinner. If step 1 fails, the user sees &lt;em&gt;that&lt;/em&gt; step fail, not a blank error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vite + TanStack Router (file-based routing), React 19, Tailwind v4, Base UI primitives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Bun + Express 5, Drizzle ORM over Postgres (Supabase)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Google Gemini for the skill-gap analysis and interview question generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy:&lt;/strong&gt; Cloudflare Pages (frontend) + Railway (API), with a CF Pages Function proxying &lt;code&gt;/api/*&lt;/code&gt; so auth cookies stay same-origin across the two hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's free to use at &lt;a href="https://career-ready.site" rel="noopener noreferrer"&gt;career-ready.site&lt;/a&gt;. I'd genuinely appreciate feedback, especially on whether the missing-skills output feels accurate, and whether the mock interview questions feel like something you'd actually get asked.&lt;/p&gt;

&lt;p&gt;If you want to poke at the code, it's open on &lt;a href="https://github.com/GiottoPham/dev-career-ready" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>react</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
