About and methodology
How TrustIntern scores an offer
For students in India checking an internship offer. Placement-season messages, UPI fees, WhatsApp recruiters, and Aadhaar or OTP requests come first. Job offers can be checked with the same rules.
Heuristic indicator score, not a probability of fraud.
Who it is for
The live site is a free beta for students. Paid tiers for colleges and placement cells are planned. It is not a promise that every check is free for everyone.
How it was built
TrustIntern was built for DEV's Hacktoberfest Open-Source AI Challenge Week 2 in 5.5 hours and is open source under the MIT license. A teammate built the front end. The write-up is on DEV. The code is on GitHub under the MIT license.
How it works
- Fixed checkers look at the email domain, domain age (RDAP), website and message text.
- Gemma 4 plans which research agents to launch: company, recruiter, complaints, domain, document, follow-up. Only allowlisted agent types run; at most 8 agents and depth 2.
- Gemma 4 vision reads the offer letter (PDF or screenshot) and flags inconsistencies.
- Deterministic scoring (backend/app/scoring.py) adds up fixed indicator points: upfront fee 25, domain mismatch 20, sensitive data 20, young domain 15, offer conflict 15, unrelated domain 10, urgency 10, personal email 5. The total is capped at 100 and never reduced. Gemma never assigns points.
- Progress streams to the React desk over SSE; Gemma then writes a plain-language summary of the evidence.
On the hosted site, Gemma falls back to the Gemini API. A local install can run Gemma through Ollama, and if no model is reachable a heuristic planner finishes the investigation. The score never depends on the model. Gemma plans, reads, and summarizes, but never scores.
Recompute the score
The score runs from 0 to 100. Every point is tied to a piece of evidence. Anyone can recompute it by hand from backend/CONTRACT.md. Only those fixed weights create points. Gemma never assigns points, and the score does not call any company a scammer.
| Indicator | Points |
|---|---|
| Upfront fee | 25 |
| Email domain mismatch | 20 |
| Sensitive data request | 20 |
| Newly registered domain | 15 |
| Offer letter conflict | 15 |
| Company not in domain | 10 |
| Urgency or guarantee | 10 |
| Personal email provider | 5 |
Fictional composites
The built-in examples are fictional composites, not real companies or real recruiters. With live lookups off, the suspicious composite scores 90. That locked number is the arithmetic, which the tests check.