DEV Community

Lekhraj Yadav
Lekhraj Yadav

Posted on

Career OS: An AI-Powered Career Operating System Born From Resume Chaos

This is a submission for Weekend Challenge: Passion Edition

What I Built

A few months into my job hunt, I realized I had a folder containing more than a dozen resume files — resume_final.docx, resume_final_v2.docx, resume_REALLY_final.docx — and I genuinely couldn't tell which one represented the latest version of me. Every application meant copy-pasting bullets, re-ordering projects, and rewriting my summary from memory. I wasn't presenting myself anymore; I was managing chaos.

That frustration is exactly why I built Career OS.

Career OS is an AI-powered career operating system that flips the traditional model on its head. Instead of resumes being the source of truth, I maintain one validated professional profile, which I call the Career Vault, and everything else is generated from it.

The Career Vault stores my entire professional identity across seven validated modules:

  • Personal Information
  • Skills
  • Education
  • Experience
  • Projects
  • Certifications
  • Achievements

On top of this single source of truth, I built four core capabilities:

  1. ATS Resume Builder — Generates an ATS-friendly, single-column resume with live scoring and browser print/PDF export.

  2. Smart Apply — Paste a job description and receive a deterministic match score, matched and missing keywords, and recommendations on which projects and experiences to highlight. No AI is required for this analysis.

  3. AI Resume Optimizer — Suggests stronger resume bullets while ensuring the original data remains untouched.

  4. AI Cover Letter Generator & Interview Prep — Generates tailored cover letters and personalized technical, HR, resume, and project interview questions using Google Gemini.

There was one rule I refused to break:

The AI never overwrites my Career Vault.

Every AI-generated suggestion lives in a session-only overlay that I can explicitly accept or reject. Refresh the page, and it's gone. My original data always remains intact.

For the first time in this entire process, I finally have one version of my professional story that I genuinely trust.

Demo

🎥 Full walkthrough (2–3 min video):
Watch the Career OS Demo

A note on access: The live deployment is intentionally private — it holds my real, personal career data. So instead of a public URL, the video above walks through every feature end to end, and the full source code and engineering documentation are public (linked below).

Here's a look at the app:

Dashboard — a SaaS-style home with sidebar navigation and quick actions.

Career OS Dashboard

Resume Builder — a read-only render of the Vault as an ATS-safe template, with a live score panel on the side.

Career OS Resume Builder

Smart Apply — paste a job description and get a deterministic match score, keyword analysis, and concrete recommendations.

Career OS Smart Apply

AI Resume Optimizer — suggestions I accept or reject, affecting only the session preview and never my saved data.

Career OS AI Resume Optimizer

AI Cover Letter & Interview Prep — tailored to the pasted job description.

Career OS AI Cover Letter

Career OS AI Interview Prep

Code

Career OS

Your AI-Powered Career Operating System

Store your professional profile once. Build ATS-friendly resumes. Analyze every job description with deterministic matching — then tailor applications with Gemini-powered optimization, cover letters, and interview preparation.

Note: This repository is intended for portfolio demonstration and technical review. The deployed application is private because it contains personal career data.

Next.js React TypeScript Prisma PostgreSQL Gemini


Overview

Career OS is a full-stack career management platform built with Next.js 16 and PostgreSQL. Instead of maintaining separate resume files for every application, you keep a single validated profile in Career Vault and generate resumes, match scores, and AI-assisted application materials from that one source of truth.

Core idea: Career Vault stores the data. Resume Builder renders it. Smart Apply analyzes job fit. AI features help you tailor — without ever overwriting your vault.


Features

  • Career Vault — seven validated modules (personal info, skills, education, experience, projects, certifications, achievements)
  • ATS

The project is public for portfolio and technical review:

Repository:

https://github.com/LEKHRAJYADAV8190/Career-OS-AI-Powered-Career-Management-Platform-Weekly-Hacton-

The stack:

  • Next.js 16 (App Router, Server Actions — no separate REST API layer)
  • React 19 + Tailwind CSS 4 + shadcn/ui (on Base UI)
  • TypeScript
  • Prisma 7 with @prisma/adapter-pg
  • PostgreSQL (Supabase)
  • Zod + react-hook-form for validation
  • Google Gemini (@google/generative-ai) for the AI features

I organized everything around feature-based modules under features/, where each domain (skills, projects, smart-apply, cover-letter, etc.) owns its own actions/, components/, schemas/, and — where relevant — engine/ or providers/. It keeps each part of the app self-contained and easy to reason about.

There's also a full Engineering Handbook available here:

https://github.com/LEKHRAJYADAV8190/Career-OS-AI-Powered-Career-Management-Platform-Weekly-Hacton-/blob/main/docs/Career-OS-Engineering-Handbook.md

The handbook documents every module, the scoring algorithms, architectural decisions, and — honestly — the known implementation gaps.


How I Built It

I want to be honest about what drove the hard parts, because the engineering decisions here weren't just technical — they were personal.

I refused to let an AI hallucinate my career.

The easy path for Smart Apply would have been to throw the job description at an LLM and ask, "How good a match is this?" I didn't, because I'd seen AI confidently invent skills, and the whole point was to trust this tool with my real profile.

So Smart Apply's core analysis is 100% deterministic, built on a curated skill dictionary with aliases and categories. The matches are:

  • Explainable
  • Reproducible
  • Free to run
  • Never made up

The scoring in relevance.ts blends two signals so entries with similar match counts don't collapse onto identical scores:

const blended =
  SATURATION_BLEND_WEIGHT * saturationComponent +
  COVERAGE_BLEND_WEIGHT * coverageComponent;

const score = Math.round(Math.min(1, blended) * 100);
Enter fullscreen mode Exit fullscreen mode

Saturation rewards a few strong, exact technology matches, while coverage is a smooth matched-to-required ratio.

Category weights make sure a Docker match counts more than a Communication match, because a job asking for communication is satisfied by almost any resume, while a project tagged Docker is unambiguously relevant.

Aliases mean a bullet saying NLP still matches a job description requiring Natural Language Processing.


The overlay pattern is where the trust lives.

When the Gemini optimizer suggests a better bullet, it never touches the database.

The suggestion goes into a client-side overlay keyed by:

experienceId:bulletIndex
Enter fullscreen mode Exit fullscreen mode

A merge function applies it only to the preview.

The Cover Letter and Interview Prep features then read from that same overlay-enriched snapshot.

This was non-negotiable for me:

AI is allowed to help me tailor my applications, but it is never allowed to quietly rewrite the truth about who I am.


Google Gemini powers the AI features.

All three AI features:

  • Resume Optimizer
  • Cover Letter Generator
  • Interview Preparation

run server-side through Google Gemini via @google/generative-ai.

Free-tier quotas are brutal, so my Gemini configuration iterates through a fallback chain of models, continuing past:

  • 429 quota errors
  • 404 unavailable-model errors

It even parses the API's retry in Xs hint to tell the user exactly how long to wait.

Every provider requests JSON output and defensively strips markdown fences before parsing, because models absolutely love wrapping JSON in code blocks.


A few smaller engineering battles

  • Supabase pooler URL at runtime and a separate direct URL for Prisma CLI operations to avoid prepared-statement issues.
  • A guard in lib/db/prisma.ts that rebuilds stale hot-reloaded Prisma clients.
  • ResumePageFrame measures content and applies CSS zoom instead of transform: scale, so the browser's print engine sees a true single-page resume.

I also documented the gaps honestly.

  • Authentication isn't wired up yet.
  • The data model is currently single-tenant.
  • A few reorder actions exist without a UI.

Writing those things down keeps me honest about what done actually means.


What I Learned

Building Career OS taught me that the best projects come from solving your own problems.

I learned:

  • Product thinking matters more than feature building.
  • Deterministic systems are sometimes more trustworthy than AI.
  • AI should assist users, not silently modify their data.
  • Building software becomes much easier when you deeply understand the problem yourself.

Prize Categories

I'm submitting Career OS to:

  • ❤️ Passion Edition
  • 🤖 Best Use of Google AI

All of the AI features — Resume Optimizer, Cover Letter Generator, and Interview Preparation — are powered by Google Gemini.

This isn't a weekend prototype or a challenge project I built in a hurry.

It's the tool I built to survive my own job hunt, and it's the one I still open whenever I apply somewhere.

It turned a folder full of anxious, contradictory resume files into:

  • a single profile I trust,
  • matching I can actually explain,
  • and AI help that never gets to rewrite my story without my permission.

Next, I want to add authentication so other job seekers can keep their own Career Vault.

If you've ever had a folder full of:

resume_final.docx
resume_final_v2.docx
resume_REALLY_final.docx
Enter fullscreen mode Exit fullscreen mode

then you probably understand exactly why I built this.

Career OS started as a tool for my own career journey, but I hope it eventually helps other students feel a little less overwhelmed by theirs.

Top comments (2)

Collapse
 
shubham1902 profile image
shubham joshi

wow bruh great work !!

Collapse
 
lekhraj_yadav_2e018c8833f profile image
Lekhraj Yadav

Thx bro