The challenge
Most people send the same resume to every posting without knowing how an applicant tracking system will read it, or how well it lines up with the job they want.
I wanted to learn how to build an AI feature end to end, from file upload to structured model output, without standing up a server or paying for API keys.
The approach
The app follows JavaScript Mastery's Resumind tutorial. Its key idea is Puter.js: sign-in, file storage, a key-value store and the Claude call all run in the browser against the user's own Puter account, so there is no backend and no API key in the app. The prompt embeds the Feedback TypeScript interface and asks for bare JSON, so the reply parses straight into the review screen.
My changes were about getting it to run reliably once deployed. I pinned pdfjs-dist to 5.3.93 after the PDF-to-image step started failing on newer releases, and added fallbacks to the Zustand auth store's error path so a failed Puter call can't crash it.
- Job-specific reviewCompany, job title and the full job description go into the prompt, so feedback is about this posting, not resumes in general.
- ATS checkA separate ATS score with what already parses well and what to change.
- Four scored sectionsTone & Style, Content, Structure and Skills, each with a score and expandable explanations.
- Review historyEvery upload is saved to Puter's key-value store and listed on a dashboard with its score.
How a review runs
- 01UploadPDF saved to the user's Puter storage
- 02Renderpdf.js draws page 1 to a PNG preview
- 03AnalyzeClaude 3.7 Sonnet returns JSON feedback
- 04ReviewSaved to KV and opened at /resume/:id



