adarsh@bhardwaj:~$
adarsh@bhardwaj — ~/portfolio — zsh

$ uptime

…

$ whoami

Adarsh Bhardwaj

Fullstack + AI engineer. I build agent systems for the two places a wrong answer costs you money and health.

$ cat ./about.txt

I'm building Paisa, an AI CFO and financial operating system, and I'm building NutriScan AI, an AI health agent with a clinical safety layer under it. Before that, at MCPfy.ai — I designed their website, and built the MCP developer tooling behind it. At BodhX, I designed and created product launch videos and motion design while working on the AI platform. I'm also building Zylo, an e-commerce platform. The pattern in the agent work is the same throughout: the model explains, tested code decides the number.

$ ls ./links

email github↗ linkedin↗ x↗ resume.pdf↗

# the thing moving behind this window is not a wallpaper — it is the architecture Paisa and NutriScan both have, running live. a question enters at the top, a supervisor routes it to whichever specialist owns it, and the work drops into the engine below, where the lines are straight because that layer is deterministic and the model gets no vote. move the pointer, or scroll.

$ git log --graph --author=adarsh

Experience

adarsh@bhardwaj — git log --graph

AI Engineer @ Bodhx.ai

September 2026 — Present

Building Bodhx.ai's AI platform, working across agent workflows and product integrations. I also designed and created the product launch film and motion design that introduced BodhX.

ai agents · typescript · node.js · integrations

AI Engineer @ MCPfy.ai

Internship · Aug 2026

Designed the company's website — the visual design of the marketing site and the front-end that ships it. Alongside that, MCP-based developer tooling: built and integrated the APIs that agent workflows ran on, chased down reliability bugs, and tested the integrations other people's agents depended on.

web design · next.js · tailwind · typescript · mcp · rest apis · git

Open source contributor

ongoing

Features, bug fixes, documentation and performance work across AI/ML and developer tooling — mostly Python, JavaScript and agent frameworks.

github · hugging face · langchain

$ git log --graph --author=adarsh --founding

Founding

adarsh@bhardwaj — building from zero

Founder & AI Engineer @ Paisa

July 2026 — present

Building the product and the company. Agent architecture, secure bank integrations, the financial modules, the backend and the deploy pipeline — and presenting the whole thing to mentors and investors.

typescript · node · anthropic api · postgres · vitest · vercel

Founder & AI Engineer @ Yetsyai

2026 — present

Building Yetsyai, an AI video creation studio for turning prompts and reference images into cinematic clips. Owning the product interface, video-provider integration, render queue, persistent history and deployment. The studio is live, with public video generation being configured for the next release.

typescript · next.js · react · fal.ai · kling · prisma · postgres · vercel

Founder & AI Engineer @ NutriScan AI

2026

Built the AI health agent end to end: the specialist roster and the supervisor that routes between them, and the clinical safety layer underneath — deterministic triage, structured clinical state, fail-closed escalation. Food-image and nutrition analysis is one of the signals it reasons over, not the product.

typescript · next.js · react · anthropic api · tailwind · vitest

Founder @ Zylo

2026 — present

Founded Zylo — an e-commerce platform, built as a real storefront rather than a demo of one. The catalogue is 194 products in Postgres behind Drizzle, with search, faceted filters, product pages, and a cart that survives a refresh. Built end to end: the schema and its migrations, the server/client boundary, the API routes the browser talks to, and the deploy.

The decisions worth defending are the unglamorous ones. Reviews are their own table rather than JSON hanging off a product, because a customer-written review has to point back at the customer. The catalogue module is marked server-only, so the build breaks the moment a client component reaches for the database — which is when you want to hear about it, not in production. All 194 product pages still prerender at build time, now from the database. And search filtering stays in the browser on purpose: at this size the price slider should not wait on a network round trip. Next: accounts, a server-side cart, and checkout with real orders behind it.

typescript · next.js · react · postgres · drizzle · framer motion · tailwind · vercel

$ ls ./work --sort=impact

Nine systems, one rule.

~/yetsyai live studio

Yetsyai

AI video creation studio · 2026 — present

A creative workspace for turning scene ideas and reference images into cinematic video. The first version includes prompt suggestions, aspect-ratio and duration controls, reference-image input, and a server-side generation flow backed by fal.ai's Kling API. Render jobs have saved history, queue-status tracking and MP4 downloads, with duplicate-request protection so a retry does not submit the same scene twice. The studio is deployed; public video generation is being configured.

built withtypescript · next.js · react · fal.ai · kling · prisma · postgres · tailwind · vercel

~/bodhx-launch-film motion design

BodhX — launch film

Product storytelling, design and video creation · 2026

I designed and created this launch film to introduce BodhX and show how its AI platform helps businesses bring customer conversations into one place. I shaped the visual direction, product-story sequence and motion design, then brought the film together with voiceover, footage and music.

BodhX — product launch film · Designed and created by Adarsh Bhardwaj
~/nutritiscan-ai live

NutriScan AI

AI health agent with a clinical safety layer · 2026

An AI health agent that reasons over symptoms, history and diet. Specialist agents sit behind a supervisor that routes each question to whichever one owns it, and each specialist sees only the slice of the record it needs. Underneath the chat is the part that matters: deterministic triage that runs before the model reasons, fails closed on error, and can end the turn outright. A model may raise suspicion; nothing it says can lower a rule-derived verdict. The website opens straight into that team: a supervisor, and Doctor, Nutrition, Fitness, Lab and Coach agents, with every turn showing which of them is working.

The website — nutritiscan.com, from the landing into the agent chat: the supervisor routes the question, the specialist answers live.
The app — end to end, 80 seconds, uncut, filmed off the screen.

built withtypescript · next.js · react · react native · anthropic api · gemini api · supabase · tailwind · vitest

~/paisa-core live

Paisa

AI CFO and AI-native ERP · July 2026 — present

A double-entry accounting engine with an AI CFO on top, and a hard rule between them: the model never computes a number. Balances are projections over an append-only journal, and the assistant’s only job is to call the right tool and explain what came back. A verifier then checks every figure in the answer against the tool outputs from that turn — anything untraceable is rejected and rewritten, or not sent at all. On top of the ledger sit ASC 606 revenue recognition, a close that runs executable checks rather than tickable boxes, multi-entity consolidation, Indian GST and filing deadlines, and a Stripe connector that refuses non-INR charges rather than converting them at a rate nobody supplied. 237 tests.

built withtypescript · node · anthropic api · postgres · vitest · vercel

~/agent-framework 2026

agent-framework

Agents that cannot invent a fact — extracted from Paisa

The grounding machinery from Paisa, generalised into a library: a tool registry that keeps each function beside the schema the model reads, an orchestrator that routes every call through itself so each invocation is recorded, and a verifier that rejects any answer stating a figure no tool returned. Writing it standalone paid for itself immediately — the first test found that the original searched tool output as one string, so ₹26 counted as grounded by a balance of ₹32,42,600. A wrong number verified as correct. The fix went back into Paisa. 22 tests.

built withtypescript · anthropic api · vitest

~/rag-financial-assistant 2026

cited-retrieval

Retrieval you can cite, and that answers the same way twice

Retrieval for corpora where being wrong is expensive and being unreproducible is unacceptable — tax provisions, filings, contract terms. Every passage carries its source and the date it was last verified, because a correct answer drawn from a stale document is still wrong. Field-weighted scoring with BM25 breaking ties. Deliberately not embeddings: for a curated corpus of hundreds of passages, the same question returning the same passages — inspectable when a result looks wrong, pinnable in CI — is worth more than the recall. Embeddings earn their cost when keyword overlap stops working; below that they buy variance. 12 tests.

built withtypescript · bm25 · vitest · zero dependencies

~/mcpfy-inspector live

MCPfy Inspector

MCP server debugging, shipped during the MCPfy.ai internship · 2026

A tool for developers building on the Model Context Protocol: connect to a running MCP server, see the tools it actually exposes, call them, and read what comes back. Most MCP bugs are not in the model — they are a schema that does not match the handler, or a tool that silently returns nothing. This makes that visible instead of leaving it to be inferred from an agent behaving oddly.

built withtypescript · next.js · model context protocol · vercel

~/zylo live

Zylo

E-commerce platform, built for the parts that are actually hard · 2026

Catalog, search, product pages and a cart, over 194 products in Postgres. The interesting decisions are the boring-sounding ones. Reviews are their own table rather than JSON on the product, because a review written by a customer has to point at the customer. The catalog module is marked server-only, which is not documentation — it failed the build the moment a client component reached for the database, which is exactly when you want to find out. Product pages still prerender all 194 at build time, now from the database rather than a bundled file. And search filters deliberately stay in the browser: at this size the price slider should not wait on a round trip, and the query has already narrowed the set. That last one is a bet on scale, and the code is shaped so losing it is a local change.

built withtypescript · next.js · react · postgres · drizzle · framer motion · tailwind · vercel

~/talktin 2026

Talktin

An AI voice studio, and what a 60-second limit forces you to design · 2026

Text to speech, dubbing, transcription and agents that talk, on free-tier models. The constraint did the interesting work. Long-form narration started as one request that generated every block and joined them — which cannot survive a 60-second function limit, because twenty blocks is minutes of model time and the run dies with nothing to show. Each block is its own request now and the audio is joined in the browser, which fixed the timeout and something better besides: a failure on block fifteen keeps the fourteen that worked, and generating again retries only what is missing. The joining code walks the RIFF chunks rather than assuming audio starts at byte 44, because a file carrying a LIST chunk is still a valid WAV and slicing blindly splices metadata into the sound. Elsewhere the same instinct: dubbing streams each stage as it begins, having previously guessed on a timer; and every model call separates a 429 from a 400, because one means wait and the other means this request will fail identically forever. 30 tests. The audio path is written and reviewed but has not been run — it is waiting on an API key.

built withtypescript · next.js · react · gemini · tailwind · vercel

~/tiko 2026

Tiko

A buddy next to your cursor that looks, talks and points — measured, not assumed · 2026

Hold a shortcut on a Mac, ask out loud, and it looks at the screen, answers by voice and flies over to point at the button you need. A rebuild of Clicky on a stack that costs nothing to run — Gemini’s free tier, speech recognition on the Mac, the system voices — which moves the hard part to where a free model is weakest: saying exactly where something is. So pointing is measured rather than assumed. A benchmark draws six Mac screens in code, records the rectangle of every button, and asks twenty-nine Hinglish questions through the app’s own path. Its first run found the parser silently dropping [POINT:185,119,filter button] — a comma where the prompt asked for a colon — which accounted for every answer it scored as “no point”, in the benchmark and in the app. The next found the model measuring on the cursor close-up instead of the screen; labelling that image with the part of the screen it shows lifted the first guess from 55% to 81%. Now, when the model names a label, the Mac reads the screen itself and snaps to that text — 27 of 27 on target — and only icons and switches get a second request: 48 of 58 with 1.53 requests a question instead of 2. 93 checks. A typed question has gone through the running app to an answer; nobody has spoken to it yet.

built withswift · swiftui · appkit · screencapturekit · speech · avfoundation · gemini

case study — how it works, and what the benchmark showed

Why build it again

Clicky, by Farza Majeed, showed the interaction: an assistant that shares your screen and points instead of describing. Its own issue tracker listed what it didn’t do — it couldn’t be interrupted once it started talking, ran on credits users couldn’t replace with their own key, stumbled outside English, broke on a second monitor, and dropped points whose coordinates came back slightly negative. Tiko started from that list, with one constraint of its own: nothing paid.

What happens when you ask

hold
A listen-only keyboard tap notices the shortcut in any app. A third key cancels, so ⌃⌥→ still switches Spaces instead of starting a recording.
listen
The microphone feeds Apple’s on-device recogniser in Indian English, picked for Hinglish, and the words appear beside the cursor as they’re recognised.
look
On release every screen is captured with Tiko’s own windows left out, plus a full-detail close-up around the cursor — in parallel with finishing the transcript.
ask
Gemini gets the question, the last ten exchanges and the images. Model names come from the key itself, fastest first, and a rate-limited model falls through to the next. A stronger flash or pro model can be chosen in Settings, with the fast ones behind it. The key itself sits in the Mac’s keychain, never in a file.
point
The reply ends in a tag on a 0–1000 grid, mapped through display points into the global coordinate space every screen shares. If the element is labelled, Apple’s text recognition finds that label on a full-detail capture; otherwise a 400-point crop around the guess is checked again. Then the buddy flies there on a Bézier arc.
speak
The system voice reads the reply. Esc stops the speech, the request and the pointing at once.
guide
Tasks that take several clicks come back one step at a time, each worked out from a fresh screenshot — the next menu item isn’t on screen until the last menu opens.

Measuring the pointing

Six screens drawn at Retina resolution with macOS’s own font sizes — System Settings, a text editor’s toolbar, a login page, Finder with a menu open, a save dialog and a spreadsheet — and twenty-nine questions phrased the way people say them, each asked twice. A hit is a point on the element or within six points of its edge. Each run scores the single guess on the full screenshot and the guess after the close-up check; from run 4, also Tiko’s path of reading the label first.

run 1
29 of 58 single guess · 43 of 58 after the check. Every “no point” was the comma bug.
run 2
Parser fixed: 32 · 49. The check turned seventeen misses into hits and broke none.
run 3
Close-up labelled: 47 · 48. The first guess caught up; System Settings rose from 5 to 7 of 10 while the spreadsheet fell from 10 to 6 of 12, where questions about totals and charts now point at the formula bar or the data.
run 4
Label read on screen first: single guess 46 · check on every question 45 · Tiko 48, at 1.53 requests a question. The label was found 27 times and hit all 27; System Settings reached 10 of 10. The spreadsheet stayed at 3 of 12 — there the model names the wrong element, which no pointing step can repair.

The single guess is Clicky’s method — one guess on the whole screenshot — run with the same Gemini model and Tiko’s prompt, not Clicky itself, which uses Claude. The screens are tidier than a real desktop, so the numbers compare methods; they don’t promise accuracy on your Mac.

Not yet verified

Pointing and the Gemini client have been run against the live API, the flight path and the settings checked offline, speech rendered into a buffer rather than the speakers, and a typed question sent through the running app to an answer beside the cursor — but nobody has yet held the shortcut and spoken to it, and it hasn’t met a second display. Every build is signed with the same certificate, so macOS should keep its permissions across updates; that hasn’t been confirmed yet. The release is built for Intel too, but has only run on Apple silicon, and the switch that opens Tiko at login hasn’t been turned on yet. New releases are offered in the panel; installing one is still a download and a drag. Without a paid Developer ID, the first launch still needs one extra click.

Built with less

6,753 lines of Swift in five targets — the app, a core with no interface that runs from the command line, the benchmark, the screens it draws, and 105 checks — built with the Command Line Tools alone, no Xcode, over sixteen pull requests.

0tests behind Paisa
0tests behind the extracted libraries
0systems shipped
0numbers invented by a model

$ cat ./stack.toml

Stack

~/stack.toml
languages
Python, TypeScript, JavaScript, Java, C++, SQL
ai & llm
LangChain, OpenAI API, Anthropic, MCP, prompt design, tool calling, structured output
agents & rag
Multi-agent orchestration, retrieval pipelines, vector search, embeddings, intent routing, text-to-SQL, grounded generation
ml
PyTorch, TensorFlow, scikit-learn, NumPy, Pandas, Streamlit
backend
FastAPI, Django, Node.js, Express, REST, GraphQL, WebSockets
frontend
React, Next.js, React Native, Expo
data
PostgreSQL, MongoDB, Redis, DynamoDB, vector databases
infra
AWS, GCP, Lambda, Docker, Kubernetes, GitHub Actions, Jenkins, CI/CD
practice
Git, testing, monitoring, code review, Agile, Jira

$ cat ./background.txt

Background

~/background.txt
education
B.Tech — Lovely Professional University, Aug 2025 – April 2026. Dropped out.
Bachelor of Arts, English Honours — IGNOU, distance learning, 2024–2027.
exams
Appeared in JEE Advanced.
study
Coursework in solutions architecture, AI/ML and agentic AI.
talks
Presented Paisa to mentors, investors and peers.
elsewhere
Contributing on GitHub, Hugging Face and to LangChain-adjacent agent tooling.

$ ./contact --open-to=roles,contract

Open to AI engineering roles and contract work.

mail

Email is the fastest way to reach me. Happy to talk about agents or retrieval even when it isn't a pitch.

adarshbhardwaj9182@gmail.com

github↗ linkedin↗ x↗ resume.pdf↗