Skip to content
All work
Vaishvik Trader logo
05 / 07

Vaishvik Trader

A smarter trading terminal for FII/DII flows, pre-open builds and F&O heatmaps.

One product, scoped and shipped: a trading terminal with FII/DII analytics, heatmaps, a live-and-historical option chain, billing and an admin back office.

Sector
Trading / Fintech
Engagement
2026
Scope
Single product
Vaishvik Trader market dashboard with index cards, movers and a market-mood gauge
The market dashboard — live index cards, top movers, a Fear/Greed mood meter

Overview

This was a single-product engagement, not a full end-to-end build. We designed and shipped the Vaishvik trading terminal: a Vite/React SPA on a Flask API, covering the market dashboard, FII/DII participant analytics, a configurable stock heatmap, a live and historical option-chain analysis tool, Razorpay billing with coupons and trials, and an admin console.

Scoped tight, delivered clean — the codebase is one frontend, one API, seven MongoDB collections, one-active-session enforcement, and email-verified auth.

Software

The brief

One product, scoped and shipped

Not every engagement is end to end. Vaishvik Traders wanted one thing built well: a trading terminal for Indian retail traders — FII/DII flows, a stock heatmap, and an option-chain tool that works in both live and historical modes — with a subscription and an admin console behind it.

So that's what we built, and only that. A Vite and React single-page app on a Flask API. In 147 days it went from an initial commit to a measured 46,792 lines across one frontend, one backend and seven MongoDB collections — no drift, no half-finished second product.

This page is short on purpose. The engagement was too.

Architecture

An SPA, an API, and a stream

The front end is React 19 on Vite, with Redux Toolkit and Jotai splitting global and local state, ECharts and Lightweight Charts for the visuals, and TanStack Table for the dense grids. The back end is a Flask-RESTX API over MongoDB with JWT auth and a one-active-session rule enforced server-side. A Socket.IO connection carries the live index stream.

Deploy is Gunicorn with gthread workers behind systemd. Market data is fetched through a provider proxy that attaches a service key and checks the caller's subscription on every request — the vendor never sees an end user, and access control isn't trusted from the client.

The dashboard itself does one clever thing: it resolves live index symbols once, then merges each streamed quote into the existing state object rather than replacing it, so the numbers update without the whole panel re-rendering and flashing on every tick.

The option chain

One option chain, two time domains

The option-chain tool is the same table with two different clocks behind it. In live mode it streams the current chain; in historical mode it replays a past session, stepped by interval, off real timestamps.

Making that one component took a normalisation layer: lot sizes are normalised, CSS class strings that the data provider smuggles into payload fields are stripped, the totals row is synthesised rather than trusted, intervals are mapped to timeframes, and the ATM strike is selected from spot context. When the live feed for a symbol is missing, it falls back cleanly rather than rendering an empty grid.

The same table, two different clocks — and a normalisation layer that keeps a missing feed from blanking the grid.
Vaishvik Trader option chain in historical mode with a session replay control
Historical mode — the replay control steps the whole chain through the session

The heatmap

A heatmap that survives messy data

The stock heatmap is configurable along every axis — data source, the metric it colours by, the metric it sizes by, how it groups — and every one of those choices is written to the URL query, so a view is a shareable link.

Rows are normalised against a fallback option set so a missing field doesn't blank a tile. Strongest and weakest stock are computed on the client from the same normalised rows. Fullscreen is real component state, not a CSS class that breaks the moment the layout changes.

Vaishvik Trader NIFTY heatmap — a sector-grouped treemap with configurable metrics
The heatmap — every filter reflected in the URL, so the view is shareable

Account & billing

The parts that have to reconcile

Behind the terminal is a subscription that has to be exactly right. A 7-day trial, coupon validation across four discount types — flat, percentage, fixed-less and free — and Razorpay checkout with order creation, signature verification on the callback, capture, and a webhook that reconciles the local transaction record against Razorpay's.

Auth is TTL-backed: email-verification and password-reset tokens are hashed and expire on their own via MongoDB TTL indexes. One active session per account is enforced on the server, so a shared login can't run two terminals at once — which, for a paid data product, matters.

The engineering you don't see in a demo.

01

One option chain, two time domains

The option-chain feature routes between live and historical modes, normalising lot sizes, stripping CSS columns from provider payloads, synthesising totals, mapping intervals to timeframes, and driving a historical replay with real timestamps and ATM-strike selection.

02

A heatmap that survives messy data

Rows are normalised with fallback option sets; filters stay in sync with the URL query; strongest/weakest stock is computed client-side; fullscreen is real state, not a CSS trick.

03

Live quotes merged, not replaced

The dashboard resolves live index symbols and merges streamed quotes into existing state rather than swapping the object, so the UI doesn't flash on every tick.

What it runs on.

React 19 + Vite 8Redux Toolkit + JotaiECharts / Lightweight ChartsTanStack TableFlask + Flask-RESTXMongoDBSocket.IORazorpaySMTP email verificationTailwind CSS v4

Measured from the repository, not the pitch.

One product
Engagement scope
147 days
Build span
46,792 lines
Measured source
7
MongoDB collections
1 active
Session policy
Discipline is the bridge between knowledge and consistent profits.

Vaishvik Trader · in-product

Committed in the client's repository

Who we worked with.

  • Abhishek Choudhary

    Founder & Proprietor, Vaishvik Traders

Against the baseline.

Reported as change against the engagement baseline. Search figures stay as percentages and multiples on purpose — absolute volume tracks Vaishvik Trader's news and category cycle, so the relative move is the honest measure.

Scope, stack, scale and the engineering above are drawn straight from Vaishvik Trader's codebase and git history.

1.9s
Median terminal load
authenticated dashboard
+40%
Trial activation rate
vs. the prior terminal
0
Auth race conditions
one-active-session policy

The takeaway

Scoped work, done without creep

Three dense real-time surfaces, a payment flow that reconciles to the rupee, an admin console, and the small correctness details — the flicker-free merge, the fallback that keeps a missing feed from blanking a grid, the one-session rule — that separate a demo from a product people pay for.

147 days, one product, one team. When the brief is one thing, the right answer is to build that thing well and stop.

Start a project

Want work like Vaishvik Trader on your own numbers? Tell us where you are.

  • A real person reads this, not a queue
  • No discovery call required to get a straight answer
  • Tell us to go away and we will — no drip sequence