Sahi — Loan Reject KYUN?

200 million Indians have no credit history. When banks reject them, they're told nothing. Sahi changes that. Most loan apps give you a score — Sahi tells you WHY you'll be rejected, and exactly how to fix it, before you ever apply.

Inspiration

In India, over 200 million first-time borrowers (students, gig workers, small shop owners) have no credit history — a "thin file." When they apply for a loan, most get rejected with zero explanation. Worse: every rejection is recorded on their bureau report, making the next loan even harder.

What it does

Sahi is an explainable loan-readiness checker that runs entirely in your browser — no signup, no PAN, no server-side personal data:

  • 🏦 Bank-grade underwriting: FOIR/DTI with income-slab policy caps, 2-step max-loan eligibility (allowed-EMI present value + income multiplier), risk-based rate bands
  • 📊 Bureau-style score (CIBIL 300–900 / FICO 300–850) with real bureau factor weights (payment history 35%, utilization 30%, history 15%, mix 10%, inquiries 10%)
  • 🔍 Reason codes — the core innovation: top weak factors with exact contributions (informed by XGBoost + SHAP trained on German Credit, holdout AUC 0.814)
  • 🎮 What-If Simulator (no market app has this): tap "6 months punctual EMIs" → score NA/NH → 797, approval 25% → 71%, max loan ₹74K → ₹1.45L — live
  • 🌍 Multi-region: India (CIBIL/FOIR/DPDP), US (FICO/43% QM DTI), EU (GDPR) — currency, caps, bands switch dynamically
  • 📄 Accessible PDF readiness report · 🔐 Zero-knowledge sync (AES-256-GCM ciphertext only)

How we built it

Modular ES6 (8 modules) with a Python bundler → resilient single-file artifact. ML: XGBoost + SHAP (UCI German Credit, 1,000 applications) tuned the scorecard's reason weights. Compile-time types via @ts-check + JSDoc — tsc strict, 0 errors. Crypto: PBKDF2-SHA256 (120k iters) + AES-256-GCM; FastAPI+PostgreSQL backend stores only ciphertext indexed by token hash. WCAG 2.1 AA: focus-trapped dialog, roving-tabindex tabs, aria-live, reduced-motion. 50-assertion test suite incl. 500-case fuzz — all green.

Challenges we ran into

  1. Making SHAP's one-hot contributions human-readable (aggregated back to 20 original attributes)
  2. Strict-mode TypeScript on DOM-heavy code without losing runtime simplicity
  3. WCAG-compliant focus traps (Esc always releases — no keyboard trap)
  4. NA/NH edge case: users with no history can't improve a score that doesn't exist — so "punctual payments" simulation also creates history, like real life

Accomplishments we're proud of

50/50 tests green · bank formulas verified against published lender methodology · a what-if simulator that CIBIL, Paisabazaar, OneScore don't offer · zero-PII architecture: breach the server, steal nothing.

What we learned

Explainability IS the product. A score without a reason is anxiety; a score with a reason and a fix is empowerment.

What's next for Sahi

Retrain on India-specific data (Home Credit dataset) · LLM-powered explanations in Hindi + regional languages (integration slot built) · lender partnerships for pre-qualification pilots.

MADE BY [ SAMARTH MISHRA ]

Built With

Share this project:

Updates

Submission history