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):

  1. 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.
  2. 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
Share this project:

Updates

Submission history