VERDICT : Decision Lab

Tagline: Every number has a receipt.

Inspiration - The Kirana Story That Started It All:

We met Ramesh Patel, a kirana owner in Rajkot. Bank brochure said: "Take 12L @ 14.5%, EMI Rs 33,094, payback 3.2 years, open second shop at 150ft Ring Road, earn 3.3L/month."

His real khata said: Sales avg Rs 2,36,666/month (not 3.3L), expenses 2.15L, rent old 24k new 28k, staff 13k old vs 19-21k Rajkot, competition 2 shops in 100m, footfall 800-1000 only evening, token 20k.

His gut said YES. His bills said NO. There was no tool to prove which one survives reality. Same with Balasar Primary School solar — vendor said 7.52 years payback, reality with dust loss + actual rate + maintenance = 33.04 years.

That gap between brochure and reality inspired VERDICT. We wanted to build a lab where every decision has to show its receipts.

What it does:

VERDICT is universal. Same page, customized according to file.

You upload 5 raw files — HDFC Business Loan Offer PDF (Rack 10.75% to 22.50%, Processing up to 2% = Rs 24k, Foreclosure 4%/3%/2%, Return Rs 450, Mode Rs 500, Rebooking Rs 1000, IRR 9.50%/21.03%/16.73% Avg, APR 9.53%/26.32%/17.30% Avg, Tenure 12-48M), Sales Register 2026 XLSX avg 2,36,666 total 28.4L, Khata CSV 2.15L, Rent Draft PDF 28k deposit 1.8L, Bank Statement.

It extracts every claim with [claim:ID p.X] clickable — no unbacked claims. 12 assumptions verified with citations, page numbers. Missing metric? Tavily auto-researches live web benchmarks. It calculates in reproducible Python, not LLM guess: EMI = P*r*(1+r)^n/((1+r)^n-1) = 33,094. Profit = Sales*Margin - (Rent+Staff+EMI) - Processing/12 = 2,36,666*12% - (28k+19k+33,094) -2k = -52,494 loss/month. Gold badge: "Calculated in Python, reproducible" #B8860B bg #F3E8C0. What Would Change My Mind: Binary search pinpoints exact safety boundary — Flips to NO if rate <0.043 (now 0.14) margin 68.9%. Confidence Timeline: Robustness 0-100, not probability. X: Decision Story, Y: Net Profit+Confidence, 300px height, line 3px gold #B8860B, area #FEF3C7, drop red #DC2626, rise green #059669. 8→59→51 flip. Sensitivity Heatmap (400 Scenarios): 20x20 cells 24px, X: Sales 1.5L-3.5L Y: Margin 8%-18%, YES green #059669 NO red #DC2626 threshold gold dashed marker border 3px #FFD700 at 2.36L/12% in red zone. 400 deterministic Python runs. What-If Branches: Base current shop, Low 2.3L realistic, Medium 2.8L, Brochure 3.3L. Compare table Old vs New. Past Decisions: Auto-loads from localStorage on browser open — Decision starts as easy as opening browser. Sidebar EXP-2026-001 clickable, auto-save debounce 500ms. Shareable Verifiable Audit: Hit Share Audit → tamper-proof SHA256 e5a28f1b2501... QR 200x200 gold #B8860B, Verified by Verdict badge, hash verified audit matches original, embed HTML. Every number has a receipt.

Result: Brochure YES 3.2y → Reality NO infinite payback. Solar 7.52y → 33.04y. Same engine.

How we built it:

Free LLMs only — llama-3.1-8b:free, Ollama for extraction (no OpenAI). Python for math (never LLM), Web Worker new Worker(...) + requestAnimationFrame + debounce 150ms + React.memo for 60fps sliders. File validation magic-bytes, not just extension — allows PDF MD XLSX CSV DOCX TXT JSON JPG PNG WEBP, blocks .exe .bat .sh .dll .com .msi .js .vbs .app .jar with red toast #DC2626. localStorage verdict_past_experiments. Playwright MCP from mcp.json tested with real HDFC 2026 human data — 5 tests: Experiment Mode Toggle, Branches+Heatmap, Past Auto-load, Calculation Accuracy EMI 33,094 real formula no hardcode, File Compat — all PASS with screenshots tests/screenshots/. Design unchanged: gold #B8860B, bg #F3E8C0 #FEF3C7, red #DC2626, green #059669, rounded 12px, timeline 300px, heatmap 24px cells.

Challenges we ran into:

Sliders laggy — full page re-render on each drag. Fixed with Worker + rAF. Past data not loading on browser open — localStorage key mismatch. Fixed. File validation only checked extension — .exe renamed to .pdf passed. Fixed with magic-bytes. LLM hallucinating calculations — forced to call run_scenario(Python) — never calculates itself. Anti-faking prompt. Proving 95/100 is robustness not probability — built discrete event timeline, not LLM confidence.

Accomplishments we're proud of:

Every number has a receipt [claim:ID p.X] — judges can click. Past Decisions auto-load — "Decision starts as easy as opening browser" actually works. 400-scenario heatmap renders exact deterministic boundaries where YES flips to NO — computed entirely in Python. Shareable audit SHA256 verifiable — anyone can inspect Python execution model independently. Tested with real human data, not synthetic — HDFC offer Aug 2026 real numbers, not mock.

What we learned:

Gut feelings don't fail because people are dumb — they fail because brochures hide rent, staff, competition, footfall. Proof needs receipts, not persuasion. The best pitch deck is a reproducible calculation.

What's next for VERDICT :

We started with kirana loan and solar. The engine is universal. Next:

Experiment Mode (7 features live): Toggle [Decision Mode | Experiment Mode], Hypothesis input, Control vs Variable Registry (Constants Blue HDFC real, Control Gray old shop 2,36,666, Experimental Yellow new shop 28k editable), Experiment Calculator Profit formula, Hypothesis Gap Expected 3.3L vs Real 2.36L gap 28%, A/B Branches 4, Past Auto-load, File Compat. For Publishers: Export Fact-Check Box embeddable HTML with QR gold — every article can prove its numbers. For Students: Any science experiment — upload readings CSV, hypothesis, get p-value and reproducibility badge. Same page, customized according to file — universal.


Built With

  • cryptography
  • fastapi
  • fernent-encryption
  • google-gemini
  • groq
  • html2canvas
  • nvidia-nim
  • ollama
  • openai-compatible
  • openpyxl
  • openrouter
  • pwa
  • pymupdf
  • python
  • qrcode
  • react
  • recharts
  • reportlab
  • sqlite
  • tailwindcss
  • tavily
  • typescript
  • vite
  • web-speech-api
  • zustand
Share this project:

Updates

Submission history