All work

MongoDB Student Builder Day 2026

ScamRing

Checks a rental listing against linked scam reports before a student pays.

My part
Team project. We built listing checks, linked reports and alerts.
Context
MongoDB Student Builder Day, Dublin AI Week 2026. Selected from 500+ applicants.
Stack
Next.js, TypeScript, MongoDB Atlas, Vector Search, Change streams
ScamRing rental listing check with a demonstration risk verdict and the signals contributing to it.
Checking a synthetic rental listing. The risk signals are demonstration data.
applicants for the build day
500+
evidence signals behind each score
5
repository tests
49

The problem

Rental scams peak when students look for accommodation before term. Between January and July 2026, An Garda Síochána received over 230 reports of rental and reservation scams, with losses above €400,000.

A listing can look ordinary on its own. The warning signs are in what it shares with other reports.

What we built

A student pastes a listing or a chat message and can add photos. ScamRing links it to other reports through shared phone numbers, emails, payment handles, reused photos and copied text, then returns a LOW, MEDIUM or HIGH score with the evidence behind it.

Scores add up from five signals and cap at 100: below 30 is LOW, 30 to 69 is MEDIUM, and 70 or above is HIGH. When a moderator confirms a scam, everyone who checked a linked listing gets an alert.

Key decisions

  1. Judged by connections

    Problem
    Scammers change the wording but reuse contacts and photos.
    Decision
    Reports are linked through shared identifiers with MongoDB’s $graphLookup, capped at two hops and 60 reports, and photos are matched by perceptual hash.
  2. Alerts that survive a restart

    Problem
    A worker can crash between saving an alert and delivering it.
    Decision
    The worker follows a change stream and saves alerts before it recalculates verdicts. Each alert has a unique key, so a restart or repeated delivery can’t create duplicates.
  3. Contacts stored as hashes

    Problem
    Linking reports shouldn’t mean keeping people’s phone numbers.
    Decision
    Phone numbers and emails are stored as HMAC hashes with masked hints, and contacts are redacted from the saved listing text.
  4. One database is also the search engine and the event bus

    Problem
    A one-day build has no time to run a search cluster and a message queue as well.
    Decision
    MongoDB Atlas does all of it: $graphLookup for the rings, vector search for known scam scripts, a transaction for each moderation decision, change streams for alerts, and a TTL index that expires unconfirmed reports after 30 days.

Limits and next steps

The demo uses synthetic listings and reports. A score describes evidence, not proof that a listing is safe or fraudulent. Moderation uses a shared demo PIN, so authentication and abuse prevention need work before a public release.

Test misleading connections between listings and improve access control before a public release.

Sources