A full-stack application that detects Spam / Smishing / Offensive content using Machine Learning. The system includes:
- π§ ML Model (Python)
- β‘ Python API (Flask / FastAPI)
- π Node.js Backend
- π» React Web App
- π± React Native Mobile App (Android & iOS)
User Input (Web / Mobile)
β
React / React Native UI
β
Node.js Backend (API Gateway)
β
Python ML API (Model Inference)
β
Prediction (Spam / Ham / Offensive)
-
CSV format:
text/messagelabel(spam / ham / offensive)
- Logistic Regression
- Naive Bayes
- Linear SVM (Best Accuracy)
-
Accuracy: ~97β98%
-
Metrics:
- Precision
- Recall
- F1-score
- Confusion Matrix
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
import pickle
# Load dataset
X = df['text']
y = df['label']
# Vectorization
vectorizer = TfidfVectorizer()
X_vec = vectorizer.fit_transform(X)
# Model
model = LinearSVC()
model.fit(X_vec, y)
# Save
pickle.dump(model, open("model.pkl", "wb"))
pickle.dump(vectorizer, open("vectorizer.pkl", "wb"))pip install flask scikit-learnfrom flask import Flask, request, jsonify
import pickle
app = Flask(__name__)
model = pickle.load(open("model.pkl", "rb"))
vectorizer = pickle.load(open("vectorizer.pkl", "rb"))
@app.route('/predict', methods=['POST'])
def predict():
data = request.json['text']
vec = vectorizer.transform([data])
prediction = model.predict(vec)[0]
return jsonify({"result": prediction})
if __name__ == "__main__":
app.run(port=5000)npm install express axios corsconst express = require("express");
const axios = require("axios");
const cors = require("cors");
const app = express();
app.use(cors());
app.use(express.json());
app.post("/predict", async (req, res) => {
try {
const response = await axios.post("http://localhost:5000/predict", {
text: req.body.text,
});
res.json(response.data);
} catch (err) {
res.status(500).send("Error");
}
});
app.listen(3000, () => console.log("Node server running"));npm create vite@latest
npm install axiosimport { useState } from "react";
import axios from "axios";
function App() {
const [text, setText] = useState("");
const [result, setResult] = useState("");
const handlePredict = async () => {
const res = await axios.post("http://localhost:3000/predict", { text });
setResult(res.data.result);
};
return (
<div>
<h1>Spam Detection</h1>
<input onChange={(e) => setText(e.target.value)} />
<button onClick={handlePredict}>Check</button>
<p>{result}</p>
</div>
);
}
export default App;npx create-expo-app
npm install axiosimport { useState } from "react";
import { View, Text, TextInput, Button } from "react-native";
import axios from "axios";
export default function App() {
const [text, setText] = useState("");
const [result, setResult] = useState("");
const predict = async () => {
const res = await axios.post("http://YOUR_IP:3000/predict", { text });
setResult(res.data.result);
};
return (
<View>
<Text>Spam Detection</Text>
<TextInput onChangeText={setText} />
<Button title="Check" onPress={predict} />
<Text>{result}</Text>
</View>
);
}- β Spam / Smishing Detection
- β Offensive Content Classification
- β Real-time Prediction API
- β Cross-platform (Web + Mobile)
- β Scalable Architecture
- Python (ML + API)
- Scikit-learn
- Flask
- Node.js
- Express
- React
- React Native
- Axios
- Use Deep Learning (LSTM / BERT / CLIP)
- Multilingual Support
- More accuracy and advanced model
- Include Email predicton perfectly and add mobile numbers also to track
Aditya Sharma
Feel free to fork, improve and contribute to this project!