Portfolio Build - Evidence-First - Local-First

Real-Time Fraud
Intelligence Platform

Portfolio-grade fraud detection platform with graph analytics, ML training pipelines, and a local-first RAG assistant.

32

Tests (Local Run)

12

Local Services

2

Model Families

3

Primary Stores

Evidence-Based Features

Built for Proof, Not Hype

Every section maps to code in this repo. Heavy services run locally; the hosted demo is intentionally lightweight.

Graph Analytics

Neo4j-backed network analysis with PageRank and community detection to surface suspicious rings.

ML Training + Explainability

XGBoost and GAT training scripts with MLflow logs and SHAP explanations surfaced in the UI.

Streaming + Features

Kafka + Flink CEP for real-time patterns and Spark/Feast for feature engineering (local stack).

RAG Assistant

Local-first investigator copilot with Groq/Ollama options and pgvector-backed retrieval.

Feature Store

Feast feature repo with Redis cache and Postgres + pgvector for retrieval data.

Full-Stack

Next.js 16 + FastAPI + GraphQL with Docker Compose for local runs and free-tier demo targets.

Operational Snapshot

Local Evidence
Kafka producer + consumer flow for transactions
Neo4j graph build and algorithms scripts
FastAPI scoring with Redis cache and metrics
GraphQL fraud queue powering the UI
Local RAG indexing and Q&A endpoints
Prometheus metrics wired to /metrics

Each item maps to code in this repo. Heavy services run locally; hosted demos are intentionally lightweight.

Developer API

Fraud scoring and graph insights on demand.

The demo UI is backed by a FastAPI + GraphQL layer. Use REST for scoring and GraphQL for the fraud queue, explanations, and network data.

  • REST scoring endpoint for transaction risk
  • GraphQL fraud queue for analyst workflows
  • SHAP explanations for model transparency
POST /score
curl -X POST http://localhost:8000/score \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "txn_123",
    "amount": 740.25,
    "merchant": "Retail"
  }'
Response (200 OK)
{
  "fraud_score": 0.87,
  "decision": "review"
}