Agentic systems
Agents that plan, call tools and finish the job. A model in a loop with MCP tools, retrieval and memory, built so a bad step is caught and retried instead of shipped.
Founding AI Engineer · Miivo
I build AI agents and take them all the way to production: orchestration, retrieval, durable workflows, guardrails and evals. I love building products with taste, where the engineering and the design get the same care.
Four tracks that feed each other. Use the arrows, or wait.
Agents that plan, call tools and finish the job. A model in a loop with MCP tools, retrieval and memory, built so a bad step is caught and retried instead of shipped.
Agents fail halfway through things. I run them as durable workflows: every step checkpointed, retried and resumable, with guardrails and evals in the path.
Start from the customer's process, not the model. Scope it with the people who do the work, prototype in days, then wire the agent into their stack. At Miivo that is AI automation for businesses across the UAE.
I design with Claude Design and Figma, then build with Impeccable in the loop, so the interface is typeset, laid out and audited before it ships. What comes out is production-ready UI on real tokens and components.
Five years, from an internship to founding engineer.
Published technical articles and tutorials on web development. Read the articles.
How I use AI at work: Claude, skills and plugins, as a shell session. Pick a command, or let it run.
Six things I built and shipped. Each one is live, and each sheet opens a case study.
Value investing without the spreadsheet: every stock graded on nine pillars and valued five ways.
Web3 file storage and sharing. Files are pinned to IPFS and shared by link, with no central server holding them.
A platform to learn anything, with lessons generated by Google's PaLM 2.
A coding platform with a GPT-3.5 assistant beside the editor.
A Discord bot that holds a conversation and generates art on request.
Write, compile and run code in the browser, in more than 40 languages.
Prizes from 2021 to 2023, solo and with teams. Tilt a badge to move its light, click to flip it.
Weekend builds · collector's set
End to end, in the order it happens: from a customer's problem to an agent running in production.
Hiring an AI Engineer, a full-stack AI engineer, a founding engineer or a Forward Deployed Engineer? I am open to all four. Email is the fastest way to reach me.
anomchakravorty3008@gmail.comValue investing without the spreadsheet: every stock graded on nine pillars, valued five ways and explained in plain English.
Picking a stock properly means reading filings, building valuation models and comparing years of numbers. Most people skip that work and buy on a hunch. Moneysense does the research and shows its working.
Every company gets a letter grade for profitability, growth, financial health and management quality, so the strong and weak spots show at a glance.
Five valuation methods run side by side: Graham's formula, discounted cash flow, dividend discount, Peter Lynch and multiples. The result is a fair-value range, not one guess.
A model reads the company's numbers and writes up its moat, its risks and where growth could come from.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Grading 70K stocks on demand does not scale, so grades are computed ahead of time by workers and served from a cache. An earnings or price event republishes the ticker, which invalidates its cache entry. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. The code is closed source, so the labels describe each call rather than quote it.
Grades and valuations are computed on the server from the fetched statements, so the browser only ever receives the result.
The report streams to the page as the model writes it.
Sessions live in PostgreSQL through Better Auth.
Ratings and notes go through a server action, so there is no public API to protect.
The plan changes only when the Stripe webhook arrives, never because the browser said the payment worked.
Open-source file storage where every file is AES-256 encrypted and pinned to IPFS, so no single company holds it.
A cloud drive keeps your files on one company's servers. That company can read them, lose them or lock you out. Storz encrypts each file first and spreads it across IPFS, so the only person who can open it is the one holding the key.
Files are encrypted with AES-256 before they leave the server, so what sits on the network is unreadable on its own.
Content is addressed by its hash and held by many peers. There is no single machine to take down.
Flip a file between private and public, and send the link. Sign-in is passwordless.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Today the API encrypts and pins inside the request, on local temp files, and its rate limit (100 requests per 15 minutes per IP) is counted per process. Under load that work moves to a queue, workers retry a failed pin instead of failing the upload, the limit is counted in Redis so every container shares it, and public files are answered from a CDN cache. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. Routes and function names are the real ones from the server code.
Every user has their own key. Plaintext exists only in a temp file that is deleted once the encrypted copy is on IPFS.
A private file uses /api/download/secure/:cid/:auth instead, which checks the token before it touches IPFS.
Search, type filters and sorting run inside one MongoDB aggregation, not in the browser.
Sharing flips one flag. The public download route refuses any CID whose flag is off.
The middleware chain every request passes: a rate limiter, NoSQL-injection sanitising and XSS cleaning, with pino and morgan logging.
Type a topic and get a full course: chapters, quizzes and progress tracking, generated with Google's PaLM.
Learning something new usually starts with an hour of sorting through scattered videos and posts of uneven quality. Lern skips that hour and hands you a structured course on exactly the topic you typed.
One prompt becomes an outline, then chapters short enough to finish in a sitting.
Each chapter ends with questions generated from its own content.
Completion and quiz scores are tracked per course, so you can see where you stopped.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Today one request writes the syllabus and then every chapter in turn, with no retry, so a single slow model call fails the whole course. Under load each chapter becomes its own job: one failure retries alone, finished chapters stream to the reader as they land, and a popular topic is generated once and then served from cache. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. Routes and function names are the real ones from the server code.
Two chains: one writes the syllabus, the other writes each chapter from it. Chapters are generated one after another inside the same request.
A generated course is stored once and read from MongoDB after that.
Progress is recorded per chapter, which is what the dashboard reads.
An AI coding workspace that generates, debugs, optimises and explains code in 30+ languages, with credits bought through Solana Pay.
Writing code means hopping between an editor, the docs and a chatbot in another tab. Codz puts the editor, the compiler and the assistant in one window.
Describe what you need, or paste what you have, and get working code back in the language you picked.
The assistant finds the bug, summarises unfamiliar code and answers follow-up questions in chat.
Code compiles in the browser through Judge0. Credits are bought by scanning a Solana Pay code.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Today credits are read and decremented in MongoDB around each OpenAI call, and the browser calls Judge0 directly. Under load the decrement becomes atomic in Redis so two tabs cannot spend the same credit, runs go through a queue to sandboxed runners, and a worker confirms each Solana payment on-chain before the plan changes. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. Routes and function names are the real ones from the server code.
Generate, debug and summarise follow the same path with a different prompt. Each costs one credit and bumps its own usage counter.
Chat carries the open file and the message history, and costs two credits.
Compilation goes from the browser to Judge0 through RapidAPI. The API has no route in this path.
Files are documents embedded in the user record.
The payment signature is stored with the plan change.
A Discord bot that chats and draws. Ask it anything with /ask, and turn a prompt into a picture with /draw.
Communities live in Discord, but the AI tools they want sit in other tabs. Neuron brings chat and image generation into the server where the conversation already is.
A conversation with a language model, right in the channel.
Image generation from a prompt, with the result stored on IPFS and posted back.
Each member has a balance that refills weekly, so one person cannot burn the whole budget. Admins can top it up.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Today the bot defers the reply and then does the whole /draw inside one process. Under load the bot acknowledges and queues the work, and a worker edits the reply when the image is ready. Credits move to Redis so the decrement is atomic across shards. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. Routes and function names are the real ones from the server code.
The reply is deferred first, because Discord drops an interaction that is not acknowledged within three seconds.
Only the person who asked sees their remaining credits; that message is ephemeral.
Commands and events are discovered from their folders at start-up, so adding one is adding a file.
Write, compile and run code in the browser in 46 languages, with your files synced to your account.
Trying a snippet in a new language should not start with installing a compiler. Codeplay is an editor and a run button, and nothing to set up.
Pick a language, write, run. Compilation happens on a Judge0 server.
Themes and editor settings are yours to change.
Sign in without a password and your code follows you across devices.
The system as it runs today, and the shape I would move it to under ten times the load.
As deployed. Rounded box: client. Cylinder: data store. Chamfered box: third party. Squares on the wires are requests in flight.
A plan, not what is deployed. Boxes tagged PLAN are what I would add. Today the browser calls Judge0 directly with a public API key. Under load, runs go through the API and a queue to self-hosted sandboxed runners with hard time and memory caps. Identical code gives identical output, so a hash of source and language is a cache key and repeat runs never reach a compiler. Dashed wires are asynchronous.
Pick an action and follow it through the system, call by call. Solid arrows are calls, dashed arrows are what comes back. Routes and function names are the real ones from the server code.
The browser talks to Judge0 directly. The API never sees a compile request.
Registering twice is safe: the route returns the existing user instead of creating another.
A new file is created once, then every later save patches it by code_id.
The editor theme travels with the files, so a new device looks like the last one.