Inspiration

The idea came from watching friends and classmates struggle through the job hunt. One friend spent two weeks carefully tailoring his resume for a dream role, hit submit, and got a rejection email the next day — no feedback, no explanation, no clue what went wrong. Another friend paid $300 for a career coach just to be told "add more keywords."

I realized the job market is broken for the average applicant. Free tools exist but they're scattered — one for ATS scoring, another for resume templates, a third for salary research, a fourth for interview prep. Nobody connects all the dots. You're expected to piece everything together yourself while competing against hundreds of applicants per role.

I wanted to build what we wished existed: one place where you upload your resume once, and everything else — analysis, improvement suggestions, a new resume, interview practice, career guidance, salary insights, skill roadmaps — just works. No hopping between tabs. No paying per feature. Just a single upload that activates a full career platform.

That gap between what job seekers need and what's available is what drove us. TalentPilot is our attempt to close it.

What it does

You upload your resume — PDF, DOCX, or even a photo. That's it. From there, TalentPilot gives you ten tools all connected to that one file.

It scores your resume against ATS systems and tells you exactly what to fix. It can build you a brand new resume in one of four templates with a wizard that walks you through every section. You can chat with it to refine your existing resume instead of staring at a blank page. It runs mock interviews with role-specific questions and tells you how your answers sound. It reviews your resume across nine dimensions with detailed feedback. It suggests career paths you might not have considered. It shows you which tech skills pay what in which country. It generates step-by-step career roadmaps for any skill you type in. It recommends jobs that match your profile. And it pulls in tech news so you know what's trending.

Everything comes from that single upload. No jumping between five different websites. No paying for separate tools. Just one upload, one platform.

How we built it

Python backend with FastAPI handling everything. No frontend framework — just vanilla JavaScript and Tailwind via CDN in a single HTML file. Every AI response is validated against Pydantic models before it reaches the user.

The AI runs on Groq. We pass JSON schemas directly to the API so the model returns structured data every time — no parsing, no guesswork. Resume images are generated server-side with Pillow using custom fonts and four different layouts.

Supabase stores uploaded files. Session history lives in memory as JSON arrays per session ID, so conversations survive page refreshes. The whole thing ships as a Docker container

Challenges we ran into

Resume rendering almost broke us. Pillow doesn't auto-wrap text — you have to calculate character widths, measure line lengths, and manually break paragraphs. Every template had different layouts (single column, two column, centered, boxed) and each needed its own positioning math. One wrong margin and text would spill off the page or overlap the next section. We rebuilt the spacing logic at least three times per template.

The single-file frontend became a beast. 4000+ lines of JavaScript in one HTML file with no imports, no components, no build step. Every new feature meant finding the right spot in a massive file and hoping nothing broke elsewhere. State management was manual — one global object per view, all functions sharing the same scope. Debugging was just console.log and scrolling.

OCR was surprisingly unreliable. Some PDFs came back as images, some as text, some as scanned documents with mixed layers. We built two separate extraction pipelines and still got garbage output for certain files. The fallback was telling users to try a different format.

Accomplishments that we're proud of

Ten different tools working off one resume upload. Not ten separate features duct-taped together — ten tools that all read from the same data and feel like one product.

The resume builder actually works. Four templates, seven-step wizard, dynamic add/remove for every section, tag inputs for skills, and it generates a real PNG you can download. No paid API, just Pillow and some carefully positioned coordinates.

The dashboard pulls country-level salary data for 8 countries across 3 skill areas. That data comes entirely from an AI model — no database, no API, no pre-built dataset. Just structured prompts and validated JSON.

What we learned

Pydantic validation will save you, but only if you design for failure. We started with strict min_length=2 and required fields everywhere. Every AI response that bent the rules crashed the endpoint. We spent more time relaxing schemas than building features.

Font paths matter more than you'd think. One missing app/agents/font/ prefix turned a polished template into unreadable garbage. We stared at the rendering function for an hour before noticing the difference.

A single HTML file works until it doesn't. 4000+ lines of vanilla JS is manageable when you're the only developer and you wrote every line. But finding the right function when something breaks means scrolling for minutes or relying on Ctrl+F. Next time we'd split into files early, even without a build step.

AI is fast but not instant. Groq's inference is milliseconds, but cold starts on serverless plus font loading plus image generation meant the first request could take 15 seconds. Users don't wait 15 seconds.

The simplest UX wins every time. The file input was a small button that looked clean but nobody clicked it. Making the entire dropzone clickable with opacity-0 and absolute inset-0 tripled uploads. Same code, one CSS change.

What's next for TalentPilot

Authentication and persistent accounts are the biggest missing piece. Right now everything lives in memory — refresh the server and all session history disappears. We want Google/GitHub login with databases so users come back to their saved resumes, past interviews, and analysis history.

Real job board integration is next. Currently jobs are AI-generated recommendations. Hooking into LinkedIn or Indeed APIs would surface live listings with accurate salary data and application links.

Cover letters. If we already have the resume and the job description, generating a tailored cover letter is a natural extension — one click, done.

ATS simulator would let users paste a job description and see exactly how their resume scores against it before applying. That's the feedback loop everyone's missing.

Mobile. The frontend works on phones but a proper React Native wrapper would make resume management on the go feel native.

Multi-language support for non-English resumes and interviews. And PDF/DOCX export alongside PNG.

Built With

  • css3
  • fastapi
  • groq
  • gunicorn
  • html5
  • javascript-(vanilla-es6+)
  • pdfminer.six
  • pillow
  • pydantic
  • python-3.11+
  • python-docx
  • supabase
  • tailwind-css
  • uvicorn
Share this project:

Updates