{"slug": "my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that", "title": "My Parents Kept Asking \"Is This SMS a Scam?\" So I Built Her an Offline AI That Explains Every Message", "summary": "A developer built Offline SMS Buddy, a local app that uses an open-weight model served through Ollama to explain confusing bank SMS messages and flag potential scams in plain language. The tool runs entirely offline on the user's laptop, keeping sensitive messages such as OTPs and account details off cloud APIs, and combines model output with regex-based warnings for links, KYC requests, and account-block threats.", "body_md": "*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*\n\nEvery few days my phone buzzes with a screenshot from **my mom**. It's always an SMS, and it's always followed by the same question: *\"What does this mean? Should I do something?\"*\n\nSometimes it's harmless: a subscription renewal, an EMI reminder, a recharge confirmation. Sometimes it's a scam: *\"Your KYC has expired, your account will be blocked today, click this link.\"* To her, they look exactly the same. Bank messages are full of short forms like *A/c XX1234*, *NEFT*, *Avl Bal*, and *debited*, and scammers copy that style on purpose.\n\nI'm not always free to answer right away. And the worst time for her to be confused is when a **scammer is creating urgency**.\n\nSo I built **Offline SMS Buddy**: a small app on her laptop where she pastes any confusing SMS and presses one big button. It answers three questions in plain language:\n\nFor example:\n\n**SMS:** Your account will be debited ₹499 on 5 October for your recurring subscription.\n\n**Offline SMS Buddy:** ₹499 will be automatically taken from your account on 5 October for a subscription. You don't need to do anything if you know about this subscription. If you don't recognise it, call your bank using the number on your card.\n\nAnd when a message looks like a scam, the app shows a clear red warning: don't click the link, don't share any OTP, and call the bank directly.\n\nThe most important part: **her SMS never leaves her computer.** No cloud, no account, and it even works with the **Wi-Fi turned off**.\n\n**The stack is entirely open source and runs locally:**\n\n`localhost:11434`.\nI didn't want to parse a paragraph and guess where \"what to do\" starts. Ollama lets you pass a JSON schema, so I define the answer shape with Pydantic and the model must fill in exactly those three fields:\n\n```\nclass SmsExplanation(BaseModel):\n    meaning: str\n    what_to_do: str\n    be_careful: str\n\nresponse = client.chat(\n    model=MODEL,\n    messages=[{\"role\": \"user\", \"content\": PROMPT.format(sms=sms)}],\n    format=SmsExplanation.model_json_schema(),\n    options={\"temperature\": 0.2},\n)\n```\n\nEach field goes straight into its own section on the page. The low temperature (0.2) keeps the model close to what the SMS actually says instead of getting creative.\n\nThe prompt tells the model to use short sentences and avoid banking jargon. It also sets some strict rules: don't invent information that isn't in the SMS, and never suggest sharing an OTP. If a message asks her to click a link, update KYC, or threatens to block her account, the model must tell her to verify with the official bank or company first.\n\nSmall models are good, but they aren't perfect, and with scams a single miss matters. So the app also runs a plain regex check. If an SMS contains a link, a shortened URL, \"KYC\" or \"blocked\", the red warning appears **no matter what the model says**. If it mentions an OTP, there's always a \"never share this code\" reminder. The AI explains, and the simple code makes sure the most important warning is never skipped.\n\nFor this project, open-source AI isn't just a nice extra. **Without it, the idea doesn't work.**\n\n**1. Her SMS messages are some of the most private data she has.**\n\nThey contain bank balances, partial account numbers, OTPs, loan EMIs, and delivery addresses. Sending all of that to a cloud API I don't control (with its own logging, retention and terms of service) would create a new privacy risk inside a tool meant to protect her. With an open-weight model running through Ollama, the message goes from the text box to `localhost` and back. That's the whole journey.\n\n**2. It works without internet.**\n\nOnce the model is downloaded, the app works fully offline. I tested it with the Wi-Fi switched off. That matters for a tool she should be able to trust at any moment, not only when the connection is good.\n\n**3. It costs nothing to run.**\n\nThere are no API keys, no per-request billing, and no subscription that runs out. She can paste a hundred messages a day and it costs ₹0. A closed API would mean I'd have to manage billing for my mom's laptop forever.\n\n**4. I can swap or tune the model freely.**\n\nThe model name is a single constant in `llm.py`. If a better small open model comes out next month, I run `ollama pull` and change one line. With a closed API, the provider decides when the model changes, and that can change the app's behaviour without warning.\n\n**5. Nobody can take it away.**\n\nIf an API gets deprecated, a price changes, or an account gets locked, the app keeps working. The model file sits on her disk.", "url": "https://wpnews.pro/news/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that", "canonical_source": "https://dev.to/abhisekroy169/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that-explains-every-5067", "published_at": "2026-10-03 04:24:00+00:00", "updated_at": "2026-10-03 04:37:45.534362+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "ai-safety", "generative-ai"], "entities": ["Ollama", "Offline SMS Buddy", "Pydantic"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that", "markdown": "https://wpnews.pro/news/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that.md", "text": "https://wpnews.pro/news/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that.txt", "jsonld": "https://wpnews.pro/news/my-parents-kept-asking-is-this-sms-a-scam-so-i-built-her-an-offline-ai-that.jsonld"}}