Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nani — the AI that wants to be scammed

She picks up so your grandmother doesn't have to.

A Gemini Live API agent answers scam calls in a convincing elderly persona, wastes the scammer's time, extracts their entire playbook live, files a cybercrime complaint inside the "golden hour," and compiles a warning the whole family network gets before the scammer dials the next number.

Built for the Google DeepMind Bangalore Hackathon · Problem Statement 1 (Real-Time Multimodal Interaction).


Why this exists

India is mid-epidemic on phone fraud — "digital arrest," fake KYC expiry, electricity-disconnection, fake-parcel customs scams. The people hit hardest are elders who answer every unknown number. Every defense today is passive (block lists, spam labels, posters). nani turns the call around on the scammer.

The three-and-a-half layers

Layer What it does Model
1 · Honeypot Answers as a hesitant, hard-of-hearing elder. Never blocks, always almost-complying. Maximizes the scammer's wasted time. gemini-3.1-flash-live-preview
2 · Extractor Parallel stream builds a live structured dossier: genre, institution, payment rail, UPI IDs, mule numbers, tactics. gemini-3.5-flash (JSON)
3 · Immunizer Compiles a WhatsApp warning card in local languages. Forwarding it = the network's growth loop. gemini-3.1-flash-lite-image
3.5 · Registry + Teeth Dossiers pool into a shared threat-intel corpus (herd immunity). Scammer UPI/number auto-drafts a 1930 / I4C complaint inside the golden hour. gemini-3.5-flash

The two intake flags (UX)

  • Flag 1 — Auto-route (set & forget): unknown numbers route to nani at the carrier layer; known contacts always ring straight through. Identity-based, not intent-based. For the most vulnerable, configured by their adult kids.
  • Flag 2 — WhisperFlow button (the hero UX): the elder answers, gets a bad feeling, taps one floating button, and hands the call to nani. Their tap is the authorization. No carrier setup, cross-platform, human-in-the-loop.

See docs/ARCHITECTURE.md for the full picture and the error-asymmetry reasoning behind the UX.


Repo layout

deepermind/
├── backend/     Node + TS: Live session, extractor, registry, immunizer, complaint, telephony, WS hub
├── app/         Next.js PWA "mobile face": incoming call, WhisperFlow, live dossier, card, complaint
├── shared/      Shared TypeScript types — the Dossier schema and WS event contract
└── docs/        Architecture, build plan, persona prompt, demo script

Quick start

# 1. Backend
cd backend
cp .env.example .env        # add GEMINI_API_KEY (billed key — NB2 Lite / TTS have no free tier)
npm install
npm run dev                 # ws + http on :8080

# 2. App (separate terminal)
cd app
npm install
npm run dev                 # http://localhost:3000  — open on a phone for the real effect

The app runs standalone by default (mock mode): the top-right ▶ scam call button plays a scripted digital-arrest scenario end-to-end with no backend — use it to rehearse and as the backup demo path. Toggle ◍ mock / ◉ live to drive a real call off the backend instead.

What's real vs staged (demo honesty)

  • Real, running live: persona agent, extractor, card generation, the app, live transcript/dossier/counter.
  • Staged: the incoming call is triggered on a designed screen; registry seeded from morning test calls.
  • Draft-only: the 1930 complaint is pre-filled with a "Review & File" button — never auto-submitted.

License

MIT — see LICENSE. Repos must be public per hackathon rules.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages