Inspiration

My friend Angelica was scammed, and it didn't start with a suspicious link. It started with a simple online purchase. Her story is far from rare. In October 2026 the FTC estimated that fraud cost Americans over 60 up to $119.5 billion in 2025 once unreported losses are counted, 47% more than the year before. Most of that money goes to the slow scams: romance, investment, and the new online "friend" who needs help. They're built over weeks, and no single message looks like fraud.

Every protection today judges one message at a time. A spam filter or a bank's fraud model sees only the last step — and a normal wire. I wanted something that remembers the whole relationship.

What it does

ElderShield is AI scam defense for older adults. It runs on her computer and does four things:

  • Listens: with her opt-in, it transcribes calls on her own computer (FaceTime, WhatsApp, Zoom, phone).
  • Watches: it knows who she's talking to and whether remote-control software like AnyDesk is running.
  • Decides: it combines the current call with up to 90 days of her history and scores every payment with fixed-code rules, so nothing a scammer says can talk it out of a decision.
  • Acts: when the risk is high, it pauses the wire. The alert appears in a private window that screen-sharing can't capture, while the shared screen shows only "Verifying…". It never tells her she's being scammed; it tells her she doesn't have to decide on this call.

She stays in control. She chooses which loved ones are told by handing each one a single-use code. She also decides what they hear: paused payments only, or warnings too. She can remove anyone at any time, and their access ends immediately. Nobody can add themselves, and her loved ones never see her calls or her bank.

How we built it

  • SpacetimeDB is the shared memory and live sync. One TypeScript module holds the call journal, payments, Jev's verdicts and her loved ones: 11 tables, 19 reducers and 3 per-person views.
    • Reducers are the only way to write, and only her app's identity is allowed to call them.
    • Her daughter's page subscribes to views that the database filters per person, so there's no API server in between.
    • Permissions live in the data layer, so removing someone revokes their access within the same transaction.
  • Jev (TypeSafe, via OpenRouter) is the judge. For every finished sentence it answers ten yes/no questions, such as "asks for money?" or "asks for secrecy?", each with a calibrated probability.
    • Every 2 seconds during a call, it also re-reads the caller's whole history: the counts and warning signs, never the words.
    • It takes 300–500 ms and costs about $0.00002 per sentence, and it returns numbers, never text.
  • The macOS app is our agent.
    • A Swift system-audio tap feeds Apple's on-device speech recognizer.
    • A Python sensor watches calls and remote-control apps.
    • A FastAPI daemon scores each payment.
    • A Swift alert window is excluded from screen capture.
  • The family page is React on the SpacetimeDB client SDK.
  • Claude Code was my pair programmer all weekend. It helped with the SQLite → SpacetimeDB migration, the Swift listener fixes and the end-to-end test suite.

Challenges we ran into

  • Real calls weren't reaching the judge. Apple's on-device recognizer returned text without punctuation, so Jev never received a finished sentence from a live call. I fixed it by turning punctuation on, judging the final tail of each chunk, cutting chunks at pauses instead of a fixed timer, and queuing alerts.
  • Migrating the database mid-hackathon. I moved from SQLite to SpacetimeDB on the second day so her loved ones could share the same live state, and so the database itself enforced who sees what.
  • Hiding the alert from the scammer. Scammers often ask victims to share their screen. Getting the alert into a window that capture can't see, with a believable stall on the shared screen, took real work.
  • Balancing misses and false alarms. A missed scam costs her savings; a false alarm costs 15 minutes. Alerts fire when the risk score crosses a threshold, not on a single reading, and phrase rules act as a floor under Jev.
  • Privacy and consent. Recording a call needs everyone's consent in California and about a dozen other states. ElderShield stores no audio and no transcript, only a warning-sign label and one flagged sentence with the numbers stripped. Listening is opt-in.

Accomplishments that we're proud of

  • It works end to end. In the demo, the scammer is on a FaceTime call and she sends $8,500. The wire is paused, her daughter's phone lights up within about 0.2 seconds, and "Sarah is calling you" appears on her screen.
  • Jev catches what phrase rules miss. On garbled speech-to-text lines it flagged 11 of 11, against 6 for phrase rules alone. For example, "I'm a bit short until my pension clears, could you help me out" contains no keyword, and Jev still marked it as a money request.
  • It holds up when things break. I killed and restarted SpacetimeDB under a connected browser, and it was back in 0.3 seconds with the page reconnecting on its own.
  • The design puts her first. No generated text ever reaches a frightened person, and she, not her family, decides who is in the alert loop.

What we learned

  • The unit of judgment is the relationship, not the message. Memory matters more than any single classifier.
  • Intervene at the money, not at the words. Words get a quiet nudge; a payment gets a pause.
  • Models should supply numbers, and fixed code should decide. That keeps the system fast, cheap and impossible to talk around.
  • Authorization belongs in the database. Per-person views made "her loved ones see only what she allows" true by construction.
  • Dignity is a design requirement. The usual family dashboard watches grandma; this one is hers.

What's next for ElderShield

  • One scam timeline across channels: calls, texts, email and bank alerts. An email prototype already exists.
  • An evidence pack she can hand to her bank or the police.
  • Wherever she talks: Windows, iPhone and Android.
  • A local LLM, so calls are judged without leaving her computer.
  • Multiple agents with one job each (listen, judge, guard, notify), coordinating through SpacetimeDB.
  • Claude as context manager: each week, Claude condenses her journal into a short case history that Jev can weigh in one request.
  • Building with users: a survey is running now, followed by in-person sessions with older adults and their families, then consented pilots.

Built With

Share this project:

Updates

Submission history