← All projects
Published personal app · End-to-end ownershipMessageShield AI app icon

MessageShield AI

An OCR-assisted message analysis app with a trained classifier, authenticated history and model monitoring.

Flutter / DartFastAPIPostgreSQLscikit-learnMLflow
Get it on Google PlayiOSComing soonWebsite ↗GitHub ↗
Live MessageShield account creation screen. Analysis and history require authentication.
Live MessageShield account creation screen. Analysis and history require authentication.

The problem

People receive suspicious messages as text and screenshots. I built a workflow that extracts the message, runs classification and risk analysis, and keeps a private analysis history.

What I built

  • Designed and developed the Flutter/Dart frontend, Python/FastAPI backend and PostgreSQL storage end to end.
  • Added camera/gallery OCR with Google ML Kit, message analysis endpoints, risk signals and per-user history.
  • Trained a TF-IDF and Logistic Regression classifier on 800 curated messages; evaluated on a stratified 200-message held-out split.
  • Implemented Firebase/JWT authentication, role-based authorization, ownership checks and sensitive-pattern redaction.
  • Added MLflow experiment/model tracking, inference-version monitoring, PSI category drift checks and backend/Flutter CI.

How it fits together

APPLICATION WORKFLOWMessageShield AI
On Google Play
  1. 01Text or screenshot
  2. 02ML Kit OCR
  3. 03Authenticated FastAPI
  4. 04TF-IDF + classifier
  5. 05Risk analysis + history

An engineering decision

I used an interpretable classical ML baseline and kept preprocessing and inference together. Model version tracking and category drift checks make changes to predictions easier to investigate.

Evaluation & limitations

The classifier achieved 89.5% accuracy (179/200) and 89.2% weighted F1 on the held-out split of a 1,000-message curated dataset. These are classifier evaluation results, not a production scam-detection guarantee. Multilingual and real-world evaluation remain areas for improvement.

Next steps

Expand language and edge-case coverage, strengthen the evaluation dataset, and compare multilingual embedding models against the existing baseline.