Resume OS
Transform your static resume into a living document
Table of Contents
A resume is a powerful way for a candidate and a recruiter to communicate. A strong resume is a crisp narrative of impact. It quickly signals your skills, outcomes, and trajectory, so a recruiter can decide in seconds. It standardizes evaluation across candidates, highlights quantified results, and aligns your story to a role’s requirements. It’s a forcing function: writing one clarifies your strengths, gaps, and positioning, so you can target the right roles and tell a consistent story.
Yet those strengths—speed, uniformity, and compression—are also constraints. A bullet point can’t show the decisions, trade‑offs, and learning behind the metric. That’s why we do multiple evaluations—To truly evaluate fit, we need interactive resumes: artifacts that let readers open the story inside each bullet, explore context, and engage with the work itself.
Problem: Why I Built Resume OS

Great resumes get attention, but great storytelling wins trust. Recruiters don’t just read; they probe. The strongest candidates invite probing. They unpack the how behind the what, connect choices to outcomes, and tailor explanations to the role at hand.
Traditional resumes compress complexity into bullets; that’s good for speed, bad for nuance. If your bullet says 'Grew activation by 32%,' the real signal is inside the choices: Which segments, which friction points, which experiments, what trade‑offs. The story matters. Today, telling it requires back-and-forth: screening calls, follow-ups, and multiple rounds. The process costs time for everyone and often penalizes candidates who are excellent but less practiced at performing in compressed, high-stakes interviews.
Resume OS is my answer: Turn every bullet into an expandable story and let an AI interview agent handle the first wave of questions—in your voice, with your facts. Faster verification. Richer context. Less friction.
Solution: Features I Implemented
Resume OS is built as a layered artifact:
- Clickable bullet point: Each line expands into a well-structured narrative with the right level of detail for a recruiter or hiring manager.
- Context on hover: Metrics, constraints, stakeholders, timelines, and links to artifacts—dashboards, PRDs, code, and mocks—are available without cluttering the top-level view.
- Interactive Q&A: Recruiters can ask interview and behavioral questions and follow up any time, and they get precise answers grounded in your stories, not generic claims.
- JD awareness (work in progress): The AI interview agent tailors answers to the job description, emphasizing the most relevant skills and outcomes. It speaks in your authentic voice but adapts its focus to the role.
How I Built It



Most of the code was vibe-coded or built with no-code tools.
Codex + Zed
I use Codex instead of Claude Code. Here's why:
- I subscribe to the ChatGPT Pro plan and don’t want another subscription. A recent update enables sync between cloud tasks—executed from the Codex web app—and the Codex CLI.
- For tasks like this, capabilities are similar, and Codex feels more controllable.
- I tried Claude Code for tasks Codex failed, but Claude Code overcomplicated the project and created duplicate files, which I don’t like.
Most of the code was vibe-coded, but small tweaks, like CSS variable changes, are easier to do myself. There are times I want to accept some changes but decline others. That’s why I use Codex on top of the Zed editor. Zed recently announced ACP (Agent Client Protocol), which enables communication between IDEs and AI agents and lets me easily monitor and control an agent’s behavior.
I connect it to multiple MCPs, including Notion, Supabase, Context7, Vercel, and GitHub. With Notion and Supabase MCPs, you can pull content from Notion without copying and pasting, and Codex can set up the database on its own.
Other Tools I Used
- OpenAI ChatKit + Agent Builder: I used tools OpenAI announced at DevDay. Most tasks could be solved with a custom GPT, but I wanted to try them.
- Notion: AI can answer on your behalf, but it can’t know what you don’t provide. I wrote the stories behind each bullet.
- Github(repo): Because an AI agent can modify code unexpectedly, it’s important to commit often and manage branches when you vibe-code.
- Supabase: I used it for the waitlist database.
- Vercel: By connecting it to GitHub, you can manage deployments and publish a working web page.
- Squarespace: I bought the domain. (resume-os.com)
What I Learned
The project is ongoing, and here are a few lessons from the process:
- You can build the tools you want: I built CrossFit Analyzer in a day and this interactive resume in a week. All the tools above, except Codex and the domain, were free.
- The more you can code, the more efficient you get: Working with an AI coding agent requires less discussion than working with a human developer. Even with a computer science background and product experience, I need to write prompts that are more low level and more detailed than typical developer conversations. The clearer you are about what you want and how the agent should behave, the better the results.
- Product sense matters: You need to design the user experience. As building gets easier, standards rise. People expect meticulous, curated experiences. I designed onboarding with a hover cue that invites clicking a bullet, added a highlight animation to connect the left and right panels, and timed the waitlist pop‑up to appear 10 seconds after landing to avoid distraction before onboarding. Those details matter, and they define better products. Implementation is easier, but you still need to know which details to build—that’s product sense.
Waitlist!
I’ve shown this to multiple friends, and they asked if they could make their own, so I’m making it editable and customizable for everyone. Join the waitlist on the site and enter your email!
MJ Kang Newsletter
Join the newsletter to receive the latest updates in your inbox.
