💡 Inspiration

Fraud detection today is mostly reactive — rules fire after the damage is done. We wanted to build something that thinks like a fraud investigator: one that follows the money, spots patterns across accounts, and makes judgment calls autonomously. When we discovered Jac's Object Spatial Programming model, it clicked — walkers traversing a graph are investigators walking a case file.


🔨 How We Built It

FraudGraph is built around four Jac walkers that traverse a live transaction graph, each with a specialized role:

Walker Role
FraudDetectionWalker ML-scores every transaction using Isolation Forest
AnomalyPatternWalker Detects velocity spikes, geo anomalies, merchant risk
EscalationWalker Uses by llm() to recommend block / freeze / verify
SynthesisWalker Uses by llm() to write an executive fraud report

The backend is Python FastAPI with SQLAlchemy + SQLite, exposing walker endpoints that the React + Tailwind frontend calls in real time. The walkers genuinely traverse account → transaction nodes, collecting evidence before making decisions — this is not a UI wrapper around a single API call.


🚧 Challenges We Faced

  • Jaclang versioning — the by llm() syntax and walker APIs evolved rapidly; getting a stable version compatible with Python 3.10 on Windows took significant debugging.
  • Graph ↔ REST bridge — wiring Jac walker state back into FastAPI responses cleanly required building a custom jac_runner.py bridge layer.
  • Realistic fraud simulation — generating seed data that actually exercises all four walkers meaningfully (velocity attacks, cross-border anomalies, merchant clusters) took careful design.

📚 What We Learned

  • Object Spatial Programming is a genuinely different way to think about agentic AI — agents live in the graph rather than being called externally.
  • by llm() makes LLM-powered decisions feel like first-class language features, not bolted-on API calls.
  • Building a graceful simulation fallback was the right call — it kept the demo reliable regardless of environment issues.

🚀 What's Next

  • Swap SQLite for a native graph database (Neo4j or Memgraph)
  • Add streaming walker logs via WebSockets for real-time UI updates
  • Extend EscalationWalker with multi-step human-in-the-loop review flows

Built With

Share this project:

Updates