// the short version
Intern → full time in 6 months at Provakil. I own the search layer, the messaging infra, and the LLM pipelines on a legal tech platform used by 15K+ people daily.
↑↓ navigate · ↵ select · esc close
AVAILABLE FOR HIRE · REMOTE / ON-SITE / RELOCATION
I'm Raja Sodani. I build search that answers in milliseconds, queues that never lose a message, and LLM pipelines that erase weeks of manual work. All in production, for enterprise legal teams at ICICI Bank, Bajaj Finserv, and Emcure Pharma.
Intern → full time in 6 months at Provakil. I own the search layer, the messaging infra, and the LLM pipelines on a legal tech platform used by 15K+ people daily.
<1s
across 500K+ legal documents, down from minutes
0.01%
upload error rate, down from ~1%, a 100× improvement
100K+
WhatsApp notifications a month, with DLQs and idempotent retries
2wk→6h
client onboarding via hybrid Elasticsearch + LLM matching over 3Cr+ cases
B.Tech CSE, LNMIIT Jaipur
2021 - 2025
Don't take the resume's word for it. These widgets simulate the systems I run in production: break the queue, out-spam my rate limiter, race the search index, and feed garbage to the LLM pipeline.
Messages flow from the API through the exchange to consumers. Kill a consumer and watch retries route to the dead letter queue, then watch it heal and drain. Nothing gets lost.
Every API I ship is rate limited. You get a bucket of 10 tokens, refilling 2 per second. Spam the button as fast as you can. Once you run dry it's 429s, and the backend never feels a thing. Try to beat the bucket.
One query, two engines racing over 500,000 documents: a naive full scan vs the inverted index I actually run. Typos welcome, try bnak.
Pick a document (including a garbled OCR scan) and run it through the extraction pipeline. When the model returns invalid data, schema validation catches it and retries with feedback. That loop is how my production template engine survives 40+ client formats.
// structured output appears here. Hit “Run pipeline”
Every card is a real production system. Click one for the story: the problem, what I built, and what changed.
Provakil Technologies · Pune
Own the search, messaging, and LLM infrastructure on an enterprise legal platform used by 15K+ people daily.
Elasticsearch search service across 500K+ legal documents, for 15K+ daily users
problemLawyers were waiting minutes per query across a growing corpus of case files, long enough that many kept side spreadsheets instead of trusting the platform.
builtA dedicated Elasticsearch service with custom analyzers, filtered queries, and relevance tuning for legal citations and case metadata.
impactSub-second results across 500K+ documents for 15K+ daily users. Search went from the platform's biggest complaint to its selling point.
Hybrid Elasticsearch + LLM onboarding pipeline over a 3Cr+ case dataset
problemEvery new enterprise client meant 2 weeks of an ops team manually matching records against a 3Cr+ (30M+) case dataset. Onboarding was the bottleneck on revenue.
builtA hybrid pipeline: Elasticsearch does fast candidate matching at scale, then an LLM resolves the ambiguous cases a human used to eyeball.
impactOnboarding dropped to ~6 hours, a ~95% reduction. Go-live in a day instead of a month.
LLM template engine parsing 40+ client document formats with zero per-client code
problemEvery client formats legal documents differently. Supporting a new client's templates took an engineer a week of hand-written parsing rules.
builtAn LLM powered template engine that reads a client's documents and derives the structure itself, no per-client parsing code.
impact40+ client formats supported; new client setup collapsed from a week to 1 day.
Claude based agent that reviews every PR and closes small debug tickets on its own
problemSenior engineers were losing hours to routine PR review and a steady drip of small debug tickets.
builtA Claude based agentic workflow that reviews every PR automatically and picks up small, well-scoped tickets end to end: reproduce, fix, open a PR.
impactRoutine review happens on every PR without waiting for a human. Senior time goes to the hard problems.
Manual reporting eliminated via a real time analytics dashboard for 7K+ users
problemClient-facing teams compiled usage and case reports by hand, every reporting cycle, for thousands of users.
builtA React.js real time analytics dashboard fed by live platform data.
impact7K+ users self-serve their numbers; manual reporting overhead down ~90%.
Production incidents handled as first responder · mentoring 2 interns
problemWhen production breaks on a platform lawyers rely on for court deadlines, minutes matter and someone has to own it end to end.
builtA first responder habit: triage, communicate, fix, write the postmortem. Plus onboarding docs and mentoring so the next person is faster.
impact20+ incidents resolved, and 2 interns growing into engineers who can take the pager.
Provakil Technologies · Pune
Promoted to full time in 6 months.
WhatsApp notification microservice: RabbitMQ DLQs, retries, idempotency
problemCourt hearing alerts cannot be lost. A missed notification can mean a missed hearing, and the old flow had no retry story and no failure visibility.
builtA RabbitMQ backed microservice with dead letter queues, exponential retries, and idempotency keys so retried sends never duplicate.
impact100K+ (1L+) messages a month with full failure visibility, owned end to end as an intern.
Upload error rate, by unifying MinIO + AWS S3 behind one storage service
problemSome clients run on-prem (MinIO), some in cloud (S3). Two storage code paths meant inconsistent behavior and ~1% upload errors on legal documents.
builtOne storage abstraction with a single API and uniform retry and validation logic, backend chosen per deployment.
impactUpload error rate cut ~100×, to under 0.01%, on documents that legally cannot go missing.
Docker deployments for enterprise clients who keep legal data in-house
problemBanks and pharma clients will not let legal data leave their own infrastructure, so cloud-only deployment was a dealbreaker.
builtPer-client isolated Docker deployments, configured and debugged remotely and on site.
impactEnterprise deals stayed on the table that cloud-only competitors could not serve.
Celebal Technologies · Jaipur
Reusable React components with Context API and useReducer, adopted across teams
problemFive interconnected modules were each rebuilding the same UI state logic in slightly different ways.
builtReusable React components with shared Context API and useReducer patterns.
impactAdopted across 5+ modules. My first taste of writing code other teams depend on.
Things I build after hours, mostly tools I wished existed at work.
snap a receipt → logged, categorized, budgeted
Full stack AI finance app. 15+ REST APIs with rate limiting and pagination holding <200ms p98; Gemini OCR reads receipts and categorizes spend; Inngest crons ship monthly reports and budget alerts.
x-ray vision for RabbitMQ
CLI + dashboard for RabbitMQ observability: watches dead letter queues, diffs message payloads, and replays failures one keypress at a time. Born from running 100K+ msgs/month in production.
LLM calls that fail gracefully
A tiny TypeScript library for production LLM workflows: provider fallbacks (Claude → GPT → Gemini), schema-validated outputs, retries with backoff, and per-call cost tracking.
case law as a network
Citation graph explorer for Indian case law: ingests judgments, extracts citation edges, and ranks precedent influence. Graph queries served from precomputed adjacency lists in Redis at sub-100ms.
market API dies → prices keep flowing
Stock tracker built for upstream failure: Upstox API with Yahoo Finance fallback and last-known-price caching. MongoDB time series schema with indexed range queries cut view responses ~25%.
currently open to new roles
Search that got 100× faster. Onboarding that got 95% shorter. Error rates cut 100×. If your team has problems like these, I'd love to hear about them.