Inspiration

What it does

How we built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for InternShield

Inspiration

Fake recruiter messages are everywhere when you're a student looking for internships: texted "research assistant" offers, "personal assistant" jobs that ask you to move money, interviews moved to WhatsApp or Telegram. At the same time I was tailoring my resume and preparing for interviews in a pile of separate tabs. I wanted one place that helps with the whole loop: is this real, does my resume fit it, and am I ready to interview.

What it does

  • Check: paste a message or upload a screenshot. An AI step pulls out facts, each with an exact quote from the message. Fixed rules then score those facts, so the AI never decides the score. The report shows what was found, what couldn't be checked, and how each sign adds to the score. Quick questions and added details recalculate it, and the change is shown. It never calls a message "safe."
  • Tailor: upload your original PDF or DOCX, or paste text, and add a job posting or just a company and role. It suggests a small number of line edits, checks them against your original experience, and lets you accept or reject each one with a live preview before you download. It never invents experience.
  • Practice: pick rounds, topics and difficulty for a multi-question session (recruiter, behavioral, coding, SQL, discussion). Coding and SQL answers run in browser workers against tests; AI follow-ups and feedback have local fallbacks.
  • Tracker and Profile: applications across Saved, Applied, Interviewing and Interviewed, connected to Tailor and Practice. All data stays in browser storage.

How we built it

I started from an empty folder with the Devpost Learn Skill Pack, which interviewed me and produced scope.md, prd.md and spec.md before any code. The app is Next.js 16, React 19, TypeScript and Tailwind 4, with Motion and lucide icons. Groq models handle extraction, rewrites and interview feedback; Tavily, Wikidata, RDAP and DNS-over-HTTPS handle company and domain lookups. All keys stay on the server. I built it with Claude Code and Codex as coding agents, with Vitest unit tests, a labeled scoring eval and Playwright browser QA.

Challenges we ran into

  • Keeping the AI out of the verdict: it extracts quoted facts and fixed rules score them, which made the scoring testable and explainable.
  • Real messages are harder than made-up ones. Testing with real public scam reports and real recruiter emails showed that legitimate recruiter emails were being rejected as "not a job message," and that some campus scams scored too low. I loosened the job-message gate and added general rules, and a few campus scams still under-score.
  • Editing a resume without breaking its layout or making it sound like AI.
  • Staying within free-tier limits, using rate limits, daily caps and fallbacks.

Accomplishments that we're proud of

  • An evidence-first report where every flag points to a quote.
  • The scoring eval passes 88/88 labeled made-up messages with 0 false positives on legit ones, and 25/27 on a held-out set written without seeing the rules. These are fixture results, not real-world accuracy.
  • One connected flow from checking a message to tailoring and practicing.

What we learned

Planning first with the Skill Pack kept a large AI-built project coherent. Tests on made-up data aren't enough, and real scenarios found bugs mocks never showed. Deterministic rules with AI only for reading is easier to trust and debug.

What's next

  • Better recall on campus and personal-assistant scams.
  • Shared rate limits for a public deploy.
  • Clearer first-run guidance.
  • More interview question coverage.

Known limits: Check is rule-based plus one AI reading step and can under-score some campus scams. Edited PDFs are not redacted documents. Practice's company ranking is a proxy from historical public question lists.

Built With

Share this project:

Updates

Submission history