I open Coil every evening to scan NSE stocks, narrow them to a shortlist, and see each candidate’s chart, numbers, and trade plan on one screen; the final call stays mine.
Coil is live and in daily use.
A VCP detail drawer holds the chart, financials, peers, quarterly FII / DII / promoter holdings, and the stock’s NSE filings.
Coil’s whole-market query language supports AND / OR / NOT, brackets, arithmetic between metrics, and Indian number suffixes such as Market Cap > 500Cr.
Coil’s NSE industry picker is searchable and narrows screens; its sector-flow view includes a treemap, rotation map, and breadth figures.
Coil places weekly charts above daily charts beside each list, and I can step through results with the arrow keys.
Coil supports daily, weekly, 15-minute, and 1-minute bars, with an EMA ribbon and VCP contractions shaded, measured, and numbered on the chart.
Coil’s nightly job precomputes returns, highs, and averages for its market panels.
Coil’s VCP engine includes a trend template, ATR squeeze, and contractions.
Coil’s query language uses three-valued logic, with 22 presets.
Coil’s trade plan combines pivot entry, stop, and target, shared with research.
Coil’s charts and morning brief provide a weekly/daily split and a morning digest.
Building a tool I trade with made me care about data quality more than any coursework did.
A wrong promoter holding or a stale P/E stops being an abstract error the moment I’m about to place an order on it.
Coil is a personal analysis tool, not investment advice.
My VCP setup is Mark Minervini’s Volatility Contraction Pattern: inside a base, every pullback is smaller than the one before and volume dries up, until price breaks out through the pivot.
Coil finds the swings in the last ~130 sessions, checks that each contraction is smaller than the one before, and that volume in the last one is below the base average.
My scan conditions live in YAML rather than code and run in tiers: technical checks on cached prices for every stock, fundamentals only for the survivors, ownership filings only for what is left.
A typical Coil scan goes 2,301 → 30 → 20 → 7, so only about thirty stocks ever need a network call.
Before I lean on a rule, I replay it over ten years of daily bars using only what was known on each date, with real costs deducted.
My VCP candidate ledger draws contractions as a small glyph and uses a risk rail that places the price between its stop and its pivot.
In Coil’s query language, a missing value is treated as “could not be judged” rather than a fail.
Coil has twenty-two ready-made screens; checked against NSE Market Lens on the same session, one screen matched 192 of its 193 stocks.
My EMA breakout-and-retest strategy is written as one bar-by-bar state machine that both the nightly scan and its backtest run.
Each stock shows its stage (forming, waiting for retest, retesting, entry triggered, in trade) with the entry, stop, 2R target and quantity already worked out.
NSE’s four-level industry tree has 16 macro sectors down to 193 basic industries.
Coil’s VCP charts show each contraction shaded, measured and numbered.
Coil includes position sizing from account size and percent risk, a watchlist that follows a trade from watching to closed, alerts on pivot crosses and stop breaches, a warning when one sector crowds the list, and a morning brief that sums it up.
Coil’s trade rules live in a pure domain layer that touches no database, network or clock; prices, fundamentals and filings are cached in SQLite.
Coil’s vcp/ package holds detection, indicators, fundamentals, the screen language, sector classification and the backtest; a FastAPI layer serves it, and a dependency-free JavaScript frontend renders the views with TradingView’s lightweight-charts vendored locally.
Coil’s frontend is hosted on Vercel and its API on Render’s free plan, kept inside its 512 MB limit.
A nightly GitHub Actions job refreshes prices for every stock, precomputes the market panels, tops up fundamentals and shareholding stalest-first under a time budget, and publishes a snapshot the API reloads hourly.
The rule I built around is that what I check against history has to be literally what the app shows me tonight; detection, trade rules and research are kept as three lanes that share one trade simulator.
My shared execution module is vcp/domain/execution.py, used by the app, the scans and the research.
Replaying the history showed a 20-day EMA trail sold winners during normal pullbacks, so the default holds to the horizon.
A stock with no P/E neither passes nor fails P/E < 15; it is shown as unjudged, so a screen never silently hides a stock I might want.
I reconcile ratios with screener.in, use NSE’s filings for promoter holding (Yahoo’s figure was off by 17 points for one stock), and compare screen results with NSE Market Lens on the same session.
Fundamentals for small caps fill in over a few nights; anything important is checked against the filings.
Intraday bars come from Yahoo on request and cover only the last 7 days (1-minute) or 60 days (15-minute).
My project summary lists ~18,000 lines of Python, 475 passing tests, 22 ready-made screens and 193 basic industries.
Coil gives me a shortlist and saves time finding and measuring setups; I still judge base quality, sector context, earnings and news. It is a personal analysis tool, not investment advice.
I build projects that teach machines to recognize patterns: in songs, in company failures, and across stock charts. I’m a classical musician who plays sitar and tabla, and I’m a final-year CS (AI & ML) student at VIT-AP working toward data analyst and AI/ML engineering roles. My portfolio presents NODUS, Coil, and several other projects as ongoing work; I keep returning to them rather than treating them as finished.
My portfolio frames the work as “Teaching machines to listen.”
My portfolio is at https://hey-shiv.github.io/.
My résumé is at https://hey-shiv.github.io/resume/.
My build notes are at https://hey-shiv.github.io/blogs/all/.
The portfolio’s central analogy is that a machine should learn when to listen, when to respond, and how to recognize a recurring pattern despite different wording. Its music principle is “The hardest thing in music is knowing when not to play.” This connects the project framing to my work on music audio and ai work.
I also present a creative résumé called “Kalpana” as a project-by-project view into how I think, rather than as a conventional résumé.
For Kalpana, I chose to show “the inside of my head instead of a résumé.”
Kalpana contains “everything I’ve built so far, one chapter per project.”
Each chapter opens with a plate drawn by code from that project’s real numbers.
Kalpana is 24 pages long.
I recommend that Kalpana be “best read slowly.”
The displayed page sequence runs from 01 / 24 through 24 / 24. The source does not identify the projects or provide the plates or their underlying numbers.
I was asked for a résumé.
I’m a final-year CS (AI & ML) student at VIT-AP, working toward data analyst and AI/ML engineering roles.
I play sitar and tabla.
I write the model, the pipeline and the evaluation myself, and I keep checking the numbers until I trust them.
I see machine-building as learning musical judgment, including knowing when not to play and waiting while someone thinks before answering.
None of these projects is finished; I keep going back to all of them.
NODUS represents lessons from post-mortems as role-and-relationship patterns in FalkorDB, then checks new plans against those patterns. This lets it recognize a familiar failure shape even when a new plan uses different words.
On a pre-declared synthetic test, NODUS caught all 18 risky plans with no false alarms.
Plain keyword search wrongly flagged all 18 safe look-alikes.
NODUS includes 129 tests.
NODUS stores post-mortem lessons from Cloudflare and CrowdStrike as patterns of roles and relationships in a FalkorDB graph.
Coil is my personal swing-trading tool. Its nightly workflow scans listed NSE stocks for volatility contraction patterns, runs my EMA breakout-and-retest scan, and accepts typed screens. Shortlisted stocks open with charts, financials, ownership information, and a trade plan covering pivot, stop, and position size.
I built Coil because 2,300 NSE charts are too many to read by hand each evening.
Coil’s displayed scan summary lists 2,301 listed stocks, 30 technical, 20 fundamental, and 7 owners.
Coil reports 22 ready screens and 475 tests.
Return 1M > 10 AND Volume > 1L
AgentAlign uses sandboxed terminal tasks and tests to grade each step without human labels. Its training pairs steps leading to a pass with steps the checks proved wrong, and evaluation is on unseen tasks.
On unseen tasks, AgentAlign’s pass rate increased from 7.1% to 11.3%, while runs attempting a forbidden command decreased from 41% to 27%.
AgentAlign’s reported unseen-task pass rates are 7.1% for the base model, 9.5% with SFT, and 11.3% with DPO, with 168 runs each.
My first AgentAlign run found nothing.
AgentAlign reports an improvement of +4.2 pts, with a 95% CI of +1.2 to +7.7.
AgentAlign uses Qwen2.5-Coder-1.5B and one free T4.
My Modern Mini LLM is a decoder-only transformer with RMSNorm, rotary embeddings, grouped-query attention, and SwiGLU, trained on TinyStories with a BPE tokenizer I trained for it. My Neural Network from Scratch project implements layers, softmax, cross-entropy, and backpropagation in NumPy, then trains with SGD, decay, and momentum. Audio Explorer visualizes recordings as waveforms, spectrograms, Mel features, MFCCs, and beat maps.
My Neural Network from Scratch project reaches 95% training accuracy on a three-class spiral.
Python is used across every project here.
- My portfolio lists Python, NumPy, pandas, PyTorch, signal processing, SciPy, Matplotlib, FastAPI, yfinance, pytest, Hugging Face, librosa, Streamlit, DTW, backtesting, reinforcement learning, transformers, backprop, TypeScript, SQL, scikit-learn, and Git.
- I can be reached at shivashant.work@gmail.com. My profiles and work include LinkedIn (https://linkedin.com/in/shivashant), GitHub (https://github.com/hey-shiv), résumé (https://hey-shiv.github.io/resume/), Medium (https://medium.com/@shivashant.personal), and blog (https://hey-shiv.github.io/blogs/all/).
NODUS starts from the problem that companies write down their failures and then repeat them.
Text search finds lessons by what they sound like, and that is how a lessons database ends up unused.
A tariff-table refresh shares almost no words with the CrowdStrike and Cloudflare outages, but it skips the staged procedure others follow, rests on one automated check, and alerts a list nobody watches: one step from repeating them.
A sensor content update shares many of their words, yet follows the canary procedure with human review and a watched on-call, so NODUS says nothing.
NODUS records what the team did about each echo, so every lesson builds a track record.
NODUS lessons draw on public and internal post-mortems, with quotes verified word for word.
NODUS is my live project for learning from company failures recorded in post-mortems. I represent lessons as patterns of roles and relationships in a graph, then check new plans against those patterns. It connects my interests in knowledge graphs and AI agents with ml engineering and creative ai interests.
I frame NODUS as “Learn from mistakes you never made.”
I built NODUS solo for Graph Hacks (FalkorDB × WeMakeDevs), October 2026.
Each NODUS visitor gets their own copy of a made-up company, and the company and plans are synthetic.
NODUS’s three seed lessons come from public post-mortems.
I chose a graph because NODUS needs to match structural patterns of roles and relationships; “Without the graph there is nothing left to match.”
NODUS lessons are data, not AI-authored executable queries: a deterministic compiler turns them into parameterized Cypher, and a person approves each lesson before use.
NODUS uses an anchor-first matcher: a role found once stays the same role.
NODUS invites witnesses by their role in the original episode, never by graph distance.
NODUS fills heads-up messages from the match, never with free text.
NODUS records echo responses as heeded, dismissed with a reason, or escalated.
NODUS’s unfinished melody plays one note per condition, holds back the last note, and never autoplays.
NODUS’s compiler uses whitelisted labels, and every value is a parameter.
NODUS uses a severity rule with the levels full, foresight, strong, and note.
NODUS’s architecture is lesson → query → echo; the site is Next.js on Vercel, with the engine behind a small FastAPI service next to a FalkorDB Cloud database.
The NODUS home page uses original dithered art.
On a test declared before any evaluation data existed, NODUS raised the right lesson for all 18 risky plans with no false alarms.
Keyword search flagged every safe look-alike; the reported result was 18 / 18 look-alikes flagged by keyword search.
The NODUS test suite has 129 passing tests.
NODUS’s evaluation data is synthetic and generated from the same condition definitions the lessons use, so the result shows the queries implement the lessons, not accuracy on real company data.
Structural matching cannot see intent: a trivial change with the risky shape still gets a full echo.
NODUS conditions can be present, absent, attribute, or count conditions.
NODUS shows the past failure and new plan side by side, with every condition and the sentence it came from.
When one condition is missing, NODUS names the remaining step that would complete the repeat, before it happens.
NODUS points out what is not recorded, such as no one watching the alerts or no owner.