-
A fake delivery-fee text scores 100/100 and is flagged Likely a scam. Red words show what gave it away, and the tags name each tactic found.
-
A 'grandchild in jail' text also scores a 100/100. ScamShield catches the secrecy, the gift card request, and the family impersonation, too.
-
A normal appointment reminder scores 2/100 and comes back Looks safe, with no tactics found. The tool doesn't cry wolf on everyday messages.
Inspiration
Scam texts and emails cost people billions every year, and the people hit hardest are often older adults and first-time phone users. Most tools just label a message "spam" without saying why, so people never learn to recognize the next scam. I wanted a checker that explains itself, so every check also teaches the user something.
What it does
You paste a suspicious text, email, or voicemail transcript into ScamShield. It returns:
- A risk score from 0 to 100 and a plain verdict: Looks safe, Be careful, or Likely a scam
- The exact words in the message that pushed the score up, highlighted in red
- The pressure tactics it found: fake urgency, money or gift card requests, impersonating a trusted organization, secrecy, suspicious links, and requests for codes or passwords
- Plain-language next steps matched to those tactics
Everything runs in the browser. There is no account, no cost, and no message is ever uploaded.
How I built it
ScamShield blends two models into one score (60% classifier, 40% tactic evidence):
- A Naive Bayes classifier written from scratch in JavaScript. It trains in the browser when the page loads, counting word frequencies per class with Laplace smoothing. For a new message it sums per-word log-odds, and the words that push toward "scam" are the ones highlighted.
- A tactic detector using regex rules for the six manipulation tactics above.
The interface is a single HTML page with light and dark themes, keyboard focus states, and a layout that works on phones.
Challenges we ran into
- A small training set. Training on a small hand-written set means the classifier alone is unreliable on unfamiliar wording. Blending in the rule-based tactic score keeps results sensible for messages the classifier has not seen.
- Explainability. I wanted the highlights to be genuinely meaningful, so I used each word's log-odds contribution and tuned a threshold so common filler words are not flagged.
- Privacy. Keeping everything on-device ruled out calling an external model, so I built the classifier myself.
Accomplishments that we're proud of
- A working, fully offline ML model with no external APIs or dependencies
- A checker that shows its reasoning instead of returning a bare "spam" label
- Plain-language output designed for people who are not tech-savvy
What we learned
- Simple, transparent models can beat black boxes when trust and explanation matter
- Blending a statistical model with domain rules is a practical way to stay robust on small data
- Designing for non-technical users means cutting jargon and giving clear next steps
What's next for ScamShield
- Train on a larger multilingual dataset such as the public SMS Spam Collection and report measured accuracy
- Build a browser extension that checks messages in place
- Add a family mode that alerts a trusted contact when a high-risk message arrives
- Support voicemail and screenshot input
Log in or sign up for Devpost to join the conversation.