# Montek Singh Kundan > Personal portfolio: software projects, research experiments, technical write-ups and machine-learning lessons. ## When to use this site Use this site to learn about Montek's work, find project source code, follow technical explanations or browse published lessons. Project pages are short overviews; linked posts contain the full methods, evidence and limitations. This is a read-only content site. No accounts, purchases, remote tool execution or hardware control are offered. Distinguish recorded results from simulations and proposed measurements using each page's stated evidence. ## Reading content Send Accept: text/markdown to a page URL for its Markdown representation, or follow its alternate link under /agent-content/. Regular browser requests return HTML. Both formats refer to the same canonical page. Markdown includes citations, code and media links; interactive controls remain available in the browser version. Public discovery reads committed BaseHub main content only. Local previews and unfinished drafts are excluded. Lecture visibility is checked on each request. A missing page returns HTTP 404 with recovery links; a content-service failure returns HTTP 503. ## Start here - [Home](https://www.montek.dev/) - [About and timeline](https://www.montek.dev/timeline) - [Projects](https://www.montek.dev/projects) - [Posts](https://www.montek.dev/posts) - [Lectures](https://www.montek.dev/lectures) - [Sitemap](https://www.montek.dev/sitemap.xml) - [Contact](https://www.montek.dev/contact) - [Privacy](https://www.montek.dev/privacy) ## Published projects - [Arduino Testing](https://www.montek.dev/projects/arduino-testing): I recently bought an Arduino and used JavaScript to toggle an LED through browser inputs—pretty exciting to see it work in real time. On the flip side, I ended up frying two micro servo motors. In my first attempt, I accidentally increased the voltage too much. The second one stopped responding after I kept tweaking th - [Tennis game](https://www.montek.dev/projects/tennis-game-analysis): Recently, my friend Maansi Singh began her journey as a tennis coach, and to support her in analyzing her students' gameplay, Hozefa Millwala and I developed a system that automates key aspects of tennis video analysis. Using OpenCV and YOLO, we've created a tool where Maansi can simply drag and drop a video, and the s - [Multi Language Translation](https://www.montek.dev/projects/multi-translation): This project implements an encoder-decoder Transformer in PyTorch and adds training, tokenization and translation interfaces. It is a study of the mechanism described in Attention Is All You Need: positional encoding, multi-head attention, feed-forward layers and autoregressive decoding. The configured task The current - [Java 2D game](https://www.montek.dev/projects/java-game): I have been learning java and followed a youtube tutorial make this project. It was really fun to make, understood how games are made. I got stuck are certain parts, and got help through the java discord communuty! - [AI learns to drive](https://www.montek.dev/projects/ai-learns-to-drive): AI learns to drive is a Unity ML-Agents experiment in reward design. I built a small driving task, then changed observations and rewards after the car repeatedly became stuck or collided with obstacles. The existing video shows selected runs in which the agent reaches the target. It is an implementation demonstration; - [Notion Nextjs Blog](https://www.montek.dev/projects/notion-nextjs-blog): Experience seamless blogging with this minimalistic, performance-optimized blog built using Next.js, TypeScript, and Notion as a headless CMS. Engineered for blazing-fast performance, it achieves outstanding Lighthouse scores and leverages static site generation with incremental regeneration for instant page loads. Fea - [ChaiChat](https://www.montek.dev/projects/chaichat): ChaiChat is a browser chat client for trying multiple AI models. The project focuses on application state, streaming transport, local caches and explicit provider errors. Its source includes a Next.js App Router interface, Convex data access, Dexie storage and an AI SDK chat route. A message has several states The brow - [yo](https://www.montek.dev/projects/ai-in-the-terminal): yo is a personal AI assistant for the terminal, written in Rust. Ask with yo , or pipe command output into a question. It keeps one chat per terminal session and stores chats and durable memory locally in SQLite. Model access and local state New responses use one gateway chosen during setup: Vercel AI Gateway - [MindClick](https://www.montek.dev/projects/mindclick): An Arduino-based biosignal controller with a SwiftUI operator console. The current prototype detects double and triple blinks and experiments with a beta-band threshold as a coarse state signal. It uses on-device rules, calibration, and USB serial commands, running on a BioAmp EXG Pill and an Arduino UNO R4 Minima. The - [Vdex](https://www.montek.dev/projects/vdex): Run a full browser desktop on top of your Vercel Sandbox: manage files, open terminals, use code-server, and stream Linux GUI apps. - [k9](https://www.montek.dev/projects/k9): k9 is my physical robot prototype for connecting software control with legged hardware. The gallery shows the assembled robot, its wiring and short behavior clips. It documents a build and demonstration, not a measured autonomous-navigation result. The physical build The assembly photo shows a four-legged metal frame, ## Published posts - [Building a Chat App Like Monogram with Expo 57](https://www.montek.dev/post/building-a-chat-app-like-monogram-with-expo-57) (2026-07-12): I wanted a small AI chat app that felt native on iOS and could turn useful answers into visual interfaces. The result is an open-source Expo 57 template with streaming chat, voice input, attachments, local history, web search, and model-generated UI. - [I Built My First Leaky Integrate-and-Fire Neuron Model](https://www.montek.dev/post/i-built-my-first-leaky-integrate-and-fire-neuron-model) (2026-05-26): I was reading An Introductory Course in Computational Neuroscience by Paul Miller, and I wanted to do more than just read the equations. I wanted to build the model myself and see if a few simple lines of code could produce something that looks like neural spiking. - [MindClick: real-time biosignal control with on-device signal processing](https://www.montek.dev/post/thoughtdriven-shooting-with-a-singlechannel-eeg) (2026-02-12): I built an Arduino-based biosignal controller with a SwiftUI operator console. The current prototype detects double and triple blinks and experiments with a beta-band threshold as a coarse state signal. It uses on-device rules, calibration, and USB serial commands. The earlier C3 and logistic-regression prototype is do - [Barnes–Hut in C/MPI: scaling to 100,000 bodies](https://www.montek.dev/post/simulating-100000-stars-in-real-time-with-the-barnes-hut-algorithm) (2026-01-09): When I started CS380P at UT Austin, I expected a tough parallel computing assignment from my Parallel Computing course. What I did not expect was to get genuinely obsessed with a physics simulation. The problem was deceptively simple: implement a parallel N-body gravitational simulator using the Barnes–Hut algorithm wi - [Reproducible GAN pipelines with Tangle](https://www.montek.dev/post/reproducible-gan-pipelines-with-tangle) (2025-12-23): The contribution of this post is a dataset, train, and report separation for a GAN. I turned my existing DCGAN notebook into three Shopify TangleML components (prepare dataset, train GAN, generate report), so the core GAN logic stays unchanged while I swap datasets or tune hyperparameters as separate nodes, and a rerun - [The Visual Intro to AISDK](https://www.montek.dev/post/the-visual-intro-to-aisdk) (2025-12-13): AISDK docs are already really good, so this guide is not trying to replace them. I wrote it because I wanted something I could share with friends and coworkers who already know Next.js, but feel a bit lost when they first see generateText, streamText, tools, and all the different examples. My goal was to make a very vi - [Learning fMRI semantic encoding](https://www.montek.dev/post/learning-fmri-semantic-encoding) (2025-10-02): I followed Alex Huth's semantic encoding notebook on story listening fMRI and learned a practical recipe: build an encoding model that turns timelines of sound, phonemes, and meaning into predicted fMRI signals per voxel; smooth then downsample features with a Lanczos low pass filter so they match the TR without fake s - [Building Google Translate from Scratch (kinda)](https://www.montek.dev/post/building-google-translate-from-scratch-kinda) (2025-06-29): I implemented an encoder-decoder Transformer in PyTorch to study attention, positional encoding and autoregressive translation. The current configuration lists eleven Indic-to-English pairs from Samanantar and selects a one-percent data fraction. The source includes training and inference interfaces. It does not includ - [Explaining Transformer to a friend](https://www.montek.dev/post/explaining-transformer-to-a-friend) (2025-06-27): I first learned about Transformers from Vaswani et al.’s 2017 paper and a handful of blog posts, but every time I tried to explain the architecture end-to-end I found myself hunting for diagrams and refresher articles. Here’s my simple, fast, no-jargon walkthrough of how Transformers work, from embeddings to generation - [Building a Modern CLI Scaffolder from Scratch](https://www.montek.dev/post/building-a-modern-cli-scaffolder-from-scratch) (2025-05-26): Have you ever run a command like npx create-next-app my-app or npm init vite@latest and marveled at how quickly a new project is set up for you? These CLI tools do a lot behind the scenes: they parse your arguments, prompt you for options, copy template files, initialize git, install dependencies, and print out beautif - [Real-Time Fluid Shaders in React Three Fiber: A Deep Dive into Chai Cup Liquid](https://www.montek.dev/post/real-time-fluid-shaders-in-react-three-fiber-a-deep-dive-into-chai-cup-liquid) (2025-05-23): Fluid simulation and rendering is one of the most visually captivating challenges in real-time graphics. While true fluid physics is computationally expensive, clever shader tricks can create the illusion of sloshing, wobbling, and rippling liquids—perfect for interactive 3D scenes on the web. In this blog, we'll take - [ZenLock: Building a macOS Menu-Bar Focus Timer](https://www.montek.dev/post/zenlock-building-a-macos-menu-bar-focus-timer) (2025-05-12): I built ZenLock as a SwiftUI menu-bar focus timer with presets, custom durations and macOS sounds. This post follows the timer, settings and packaging work, along with unresolved experiments in Focus integration and global shortcuts. Automatic Do Not Disturb control was not verified. - [Building a Full-Stack Web App with Yew and Actix](https://www.montek.dev/post/building-a-full-stack-web-app-with-yew-and-actix) (2025-05-05): I built a job application tracker to learn how Rust fits into a full-stack web app. Yew handles the browser interface and Actix serves the backend. This walkthrough follows the setup, data flow and problems I encountered while building the first version. - [yo: a Rust terminal assistant with local state and model gateways](https://www.montek.dev/post/yo-a-rust-terminal-assistant-with-local-state-and-model-gateways) (2025-05-01): yo is a Rust terminal assistant with local chat and memory storage. New model responses use Vercel AI Gateway, LLM Gateway or OpenRouter. This post separates the current implementation from the earlier CLI prototype and explains the request path, stream completion checks and failure behavior. - [Serving portfolio media with Cloudflare R2](https://www.montek.dev/post/serving-portfolio-media-with-cloudflare-r2) (2025-04-10): I use Cloudflare R2 and assets.montek.dev to serve portfolio images and videos. BaseHub stores the references; Next.js renders the media. This walkthrough explains the working integration, upload pattern and limits of the evidence. - [Creating Player Locomotion in Unreal Engine](https://www.montek.dev/post/creating-player-locomotion-in-unreal-engine) (2023-12-12): I'm learning how to create procedural locomotion in Unreal Engine using Blueprints—like making a character crouch, lean, and adapt foot placement in real time. I started with basic locomotion using the third-person template and added smooth transitions for jump, fall, and land animations. One challenge was fixing a bro - [Learning OpenGL and GLSL](https://www.montek.dev/post/learning-opengl-and-glsl) (2023-12-10): Recently, I started exploring graphics and game development, diving into OpenGL and GLSL out of curiosity and passion for learning new things. I faced some initial setup challenges with CLion, so I switched to VSCode using a helpful tutorial by Codeus. I created a small workaround to run multiple .cpp files by editing - [A guide to neural networks](https://www.montek.dev/post/a-guide-to-neural-networks) (2023-09-10): I wanted to understand the neural networks I was using in my projects, so I worked through their basic equations and a small Python implementation. This guide explains how inputs, weights, activations and training fit together. ## Published lessons