Skip to content
Nishant Raghav
Nishant Raghav

I build software thatnotices.

Software developer in New Delhi. I've taught a model to flag insiders in log files, a chat app to catch distorted thinking, and a case system to turn background checks into finished reports.

About

Same problem, different clothes.

I'm a developer in New Delhi, and building things is how I spend my time. I've gone from Nand2Tetris logic gates to machine learning pipelines to a full-stack platform with encrypted data, and I like the distance between those things.

The projects I keep returning to share a shape: a stream of messy signals and one person who needs to know what matters. An insider in a log file. Distress in a chat message. Bad air over a city. A candidate waiting on a background check.

I keep the logic pure and the interface thin. Lume's detection runs without a single API call. TSSPL_SaaS won't build its report templates if one value from the sample survives. And I leave the misses in: one of my models caught two of three planted insiders, and the chart on this page still shows the third.

Exploring right now

  • LLMs
  • Embeddings
  • Vector databases
  • C++

Selected work

Five things that notice.

Started
Feb 2026
Status
Source only

Lume

A wellness companion that reads between the lines.

distortionDetector.js

Runs in your browser

I always ruin everything and everyone knows it.

  • All-or-nothing thinkingweight 4

    Is it really always, or just this time? Can you think of even one exception?

  • Mental filterweight 3

    What else happened in that situation that you might not be giving weight to?

A pattern matcher, not support. In India, iCall counsellors are on 9152987821.

The problem

A chatbot answers the words you typed, and it answers them seconds later. Someone in distress often means more than they wrote and needs a response right away.

How it's built

Each message runs through local middleware first. sentimentGuard grades severity, distortionDetector scores patterns by weight, and the results shape the system prompt for Llama 3.3 on Groq. About 1,800 lines across six hand-written modules, with Supabase row-level security around mood logs and chat history.

What it does

  • Support appears instantly when distress patterns show up, before the model replies
  • Ten CBT distortions detected, each with a reframing question
  • Emotional memory that recalls what helped last time
  • Three personalities: Calm Therapist, Strict Coach, Logical Analyst
  • Mood logs, insights, breathing exercises and crisis helplines
  • Android build through Capacitor

Read the code

React, Vite, Supabase, Groq, ElevenLabs, Capacitor

Started
Jan 2026
Status
Source only

ThreatWatch

Finding the insider in a week of ordinary logs.

anomaly_scores.csv, twenty simulated users

Detector
Isolation forest: 2 of 3 planted insiders flagged. Red bars are the planted users, and the lowest ranks 12 of 20. Bar height is relative to each detector's own scale.Ranking: 1. user20 (planted), 2. user13 (planted), 3. user18, 4. user12, 5. user5, 6. user6, 7. user8, 8. user15, 9. user16, 10. user3, 11. user9, 12. user7 (planted), 13. user4, 14. user10, 15. user19, 16. user17, 17. user2, 18. user14, 19. user1, 20. user11.

The problem

An insider has valid credentials, so nothing they do trips a firewall. The only trace is behaviour that drifts from normal: a few more files, a USB stick, a login after midnight.

How it's built

A Python pipeline: simulate logs, engineer features, merge, train, explain. scikit-learn does the scoring, NetworkX builds the user and device graph, and SHAP opens up the isolation forest. The chart here is the pipeline's own output on twenty simulated users, misses included.

The React and Supabase dashboard was added by Saksham.

What it does

  • Simulated login, file, USB and email logs with planted red-team users
  • Features from behaviour, email NLP and graph centrality
  • Isolation forest, one-class SVM and an autoencoder scored side by side
  • SHAP and LIME explanations for why a user was flagged
  • Streamlit dashboard with an interactive at-risk graph
  • Later React dashboard with Supabase Realtime alerts and CERT scenarios

Read the code

Python, scikit-learn, SHAP, NetworkX, Streamlit, React, Supabase

Started
Oct 2026
Status
Live, login required

TSSPL_SaaS

From a case form to a finished background check report, in the firm's own format.

TSSPL_SaaS cases page with summary tiles for drafts, ready and red cases, above a table of demo candidates with colour and status badges.

What it does

  • Case entry with autosave, Save & add next and Aadhaar duplicate detection
  • Word reports generated per candidate, with per-site report formats
  • Bulk ZIPs with live progress, plus Excel exports in the team's tracker layout
  • Admin, operator and viewer roles, with an audit log of every change

case_to_report, made-up data

1. Case form

Candidate
Demo Candidate
Client
Example Corp
Aadhaar
XXXX XXXX 0000
Reference
0001-DEMO-01.11.2026

2. Checks

  • IdentityPositive-Green
  • AddressPositive-Green
  • EducationPositive-Green
  • EmploymentDiscrepancy-Red
  • CourtPositive-Green

3. Report

Background verification report

Colour: Red

Word file, ready to send

A made-up case is entered, five checks are run and one comes back Discrepancy-Red, so the finished Word report is marked Red.

The problem

A background verification firm delivers one long Word report per candidate, in a strict house format, built from whichever checks apply. Doing that by hand is slow and easy to get wrong, and the inputs include Aadhaar numbers that need real protection.

How it's built

FastAPI holds all the business logic, and table access is revoked for the browser's Supabase key, so every read goes through the API. Aadhaar numbers are encrypted with AES-256-GCM and matched through an HMAC. Reports are composed from Word block templates generated from a real sample, the template build fails if any of that sample's candidate data survives, and fidelity tests compare the output with the sample page by page.

This is a private client system, so the live site stops at its login page and the source isn't public. The screenshot is the real interface running on made-up data.

Open the live site

FastAPI, Python, React, TypeScript, Supabase, PostgreSQL, Playwright, Vercel

Started
Jun 2026
Status
Live

Arabico

A cafe in Janakpuri, from the first scroll to the last sip.

Arabico home page: the headline over a full-bleed photograph of roasted coffee beans.

What it does

  • Six pages: home, about, menu, gallery, reviews and contact
  • Menu with category filters and live search across 22 items
  • Masonry gallery with a keyboard-navigable lightbox
  • Full-screen mobile menu and animated route changes

The problem

A cafe sells a feeling, and a listing page can't carry one. The site had to feel warm and unhurried, and still get someone to the menu and the map quickly.

How it's built

Design tokens live in one place through Tailwind's @theme, and motion variants in one module, so every animation shares a curve and a rhythm. Reduced motion is handled in CSS from the start.

Open the live site Read the code

React 19, TypeScript, Tailwind CSS, Framer Motion, Lenis

Started
Apr 2026
Status
Deployed, feed down

AirPulse

What the air is doing, and what that means for you today.

AirPulse home page with a city search field and cards for New Delhi, Beijing, London and New York.

What it does

  • Debounced city search across the OpenWeatherMap geocoder
  • Animated SVG gauge, pollutant cards and health guidance
  • Trend charts, saved cities and a configurable auto-refresh
  • Sidebar that becomes icons, then a bottom nav, as the screen narrows

The problem

Air quality numbers are easy to find and hard to act on, especially in a city like Delhi. A raw index tells you very little about whether to go for a run.

How it's built

Redux Toolkit slices and async thunks hold state, Axios interceptors handle auth and errors, and routes load lazily. Every section sits behind its own error boundary, with loading, empty and error states designed in.

City readings are down until the deployed API key is replaced.

Open the live site Read the code

React, Redux Toolkit, Recharts, OpenWeatherMap API

Tech stack

Written in ink, sketched in pencil.

Ink means I've built with it. Pencil means I'm exploring it, with no project behind it yet.

Languages
Built with: JavaScript, TypeScript, Python, SQL, HTML, CSS . Exploring: C++
Frontend
Built with: React, Vite, Tailwind CSS, Framer Motion, Redux Toolkit, React Router, Recharts, shadcn/ui . Exploring: Next.js
Backend
Built with: FastAPI, Node.js, Express, Supabase Auth, Supabase Realtime, Streamlit . Exploring: Flask
Databases
Built with: PostgreSQL, Row-level security . Exploring: MongoDB, FAISS, ChromaDB
AI and machine learning
Built with: scikit-learn, pandas, NumPy, SHAP, LIME, NetworkX, Groq API, Prompt design . Exploring: PyTorch, TensorFlow, Hugging Face, LangChain, OpenAI API
Developer tools
Built with: Git, GitHub, Playwright, Capacitor, ESLint, Postman, Jupyter . Exploring: GitHub Actions, MLflow
Infrastructure
Built with: Vercel, Docker . Exploring: Google Cloud

When each one started

How the line got here.

  1. Heart Disease Predictor

    First machine learning project: KNN, decision tree and random forest compared in a notebook.

  2. Insider threat pipeline

    Simulated logs, engineered features and three anomaly detectors.

  3. Lume begins

    A mental wellness companion, followed the same month by a run of React and async JavaScript builds.

  4. AirPulse

    Redux Toolkit, lazy routes and error boundaries around a live air quality API.

  5. Arabico

    TypeScript, Tailwind design tokens and centralised motion on a multi-page cafe site.

  6. Smart Time Table

    A live schedule on a pure engine, tested against every minute of the week.

  7. TSSPL_SaaS

    A full-stack background verification platform for a client: FastAPI, encrypted Aadhaar data and generated Word reports.