{"version":"https://jsonfeed.org/version/1.1","title":"Kanishk Sachdev - Blog","home_page_url":"https://www.kanishksachdev.com","feed_url":"https://www.kanishksachdev.com/feed?format=json","description":"Articles and interactive experiments about software engineering, physics simulations, and building things","language":"en-US","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"items":[{"id":"https://www.kanishksachdev.com/blog/wiki-explorer","url":"https://www.kanishksachdev.com/blog/wiki-explorer","title":"Wiki Explorer: an Interactive Map of Wikipedia","content_text":"Explore the entire English Wikipedia link graph in your browser: 7.2 million articles, 707 million links. Expand link networks node by node, trace six degrees between any two topics, play the Wikipedia race game, render the whole map of Wikipedia in WebGL, and script the graph yourself.","date_published":"2026-08-23T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","wikipedia","graph-visualization","network-analysis","webgl","canvas","rust","d3-force"],"image":"https://www.kanishksachdev.com/wiki-explorer/og.png"},{"id":"https://www.kanishksachdev.com/blog/graph-of-life","url":"https://www.kanishksachdev.com/blog/graph-of-life","title":"The Graph of Life","content_text":"My real GitHub contribution graph, dropped into Conway's Game of Life and left to evolve.","date_published":"2026-08-19T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","cellular-automata","conway","github","canvas","javascript"]},{"id":"https://www.kanishksachdev.com/blog/billion-checkboxes","url":"https://www.kanishksachdev.com/blog/billion-checkboxes","title":"One Billion Checkboxes","content_text":"A shared grid of one billion checkboxes you check in real time with everyone online. A bigger, multiplayer take on One Million Checkboxes.","date_published":"2026-06-20T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","realtime","websockets","canvas","redis","multiplayer"]},{"id":"https://www.kanishksachdev.com/blog/robot-arm","url":"https://www.kanishksachdev.com/blog/robot-arm","title":"A Robot Arm That Follows Your Cursor","content_text":"I put an interactive industrial robot arm on my homepage. Here is the short version of why, and the parts that turned out to be more interesting than I expected.","date_published":"2026-06-15T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","three.js","webgl","robotics","inverse-kinematics","collada"],"image":"https://www.kanishksachdev.com/robot-arm/cover.png"},{"id":"https://www.kanishksachdev.com/blog/homelab","url":"https://www.kanishksachdev.com/blog/homelab","title":"Homelab: Current Architecture","content_text":"The living reference for my homelab: six hosts, ~100 containers, SSO on everything, DNS as code, borg backups, and the honest cost table at ~$64/mo.","date_published":"2026-05-22T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","homelab","docker","infrastructure","self-hosted","tailscale","authentik"]},{"id":"https://www.kanishksachdev.com/blog/homelab-architecture","url":"https://www.kanishksachdev.com/blog/homelab-architecture","title":"My Multi-Server Homelab: The Full Architecture","content_text":"The full service map of my homelab: six hosts, ~100 containers, every stack and the wiring between them. The deep-dive companion to the overview post.","date_published":"2026-04-06T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","homelab","docker","infrastructure","self-hosted","tailscale"]},{"id":"https://www.kanishksachdev.com/blog/distributed-cron","url":"https://www.kanishksachdev.com/blog/distributed-cron","title":"The Cron Job That Ran Three Times: Building Distributed Locks on Cloud Run","content_text":"When we deployed our HackPSU NestJS app to Cloud Run, every instance started firing the same cron jobs simultaneously. Hackers got triple cancellation emails and our sender reputation tanked. Here's how we built a distributed locking system with Firebase RTDB to fix it.","date_published":"2026-04-01T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","nestjs","distributed-systems","firebase","cloud-run","hackpsu"]},{"id":"https://www.kanishksachdev.com/blog/queueing","url":"https://www.kanishksachdev.com/blog/queueing","title":"Waiting in Line","content_text":"Overwhelm one server and watch how it copes: FIFO, LIFO, priority queues, and early dropping, built up one idea at a time with live charts.","date_published":"2025-11-25T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","algorithms","queueing","distributed-systems","visualization","canvas"]},{"id":"https://www.kanishksachdev.com/blog/load-balancing","url":"https://www.kanishksachdev.com/blog/load-balancing","title":"Load Balancing, Visualized","content_text":"An interactive, build-up tour of load balancing: watch Round Robin, Weighted Round Robin, and Least Connections route traffic across unequal servers, with charts generated live from the simulation.","date_published":"2025-11-24T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","algorithms","visualization","distributed-systems","canvas","networking"]},{"id":"https://www.kanishksachdev.com/blog/tambola","url":"https://www.kanishksachdev.com/blog/tambola","title":"Tambola / Housie Game","content_text":"Interactive Tambola game with automatic ticket generation, number calling, and support for multiple players.","date_published":"2025-11-22T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","game","interactive","javascript","react"]},{"id":"https://www.kanishksachdev.com/blog/fluid-simulation","url":"https://www.kanishksachdev.com/blog/fluid-simulation","title":"Real-Time Fluid in the Browser","content_text":"An interactive real-time fluid simulation built on Jos Stam's stable-fluids method: drag to paint dye, choose ink/water/smoke/fire presets, and tweak the raw Navier-Stokes solver knobs.","date_published":"2025-11-06T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","physics","simulation","fluid-dynamics","javascript","canvas"]},{"id":"https://www.kanishksachdev.com/blog/wikipedia-network-graph","url":"https://www.kanishksachdev.com/blog/wikipedia-network-graph","title":"Weekend Project: Turning Wikipedia Into a Giant Network Graph","content_text":"What started as curiosity about Wikipedia rabbit holes turned into parsing 6.8 million articles and building a Neo4j graph database. Here's how I mapped the structure of human knowledge in a weekend.","date_published":"2025-08-10T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","graph-algorithms","data-visualization","python","networkx"],"image":"https://www.kanishksachdev.com/wikipedia-network-graph/philosophy.png"},{"id":"https://www.kanishksachdev.com/blog/hackpsu-webauthn","url":"https://www.kanishksachdev.com/blog/hackpsu-webauthn","title":"Adding Passkey Authentication to HackPSU: When Passwords Just Aren't Cutting It","content_text":"How we implemented WebAuthn passkey authentication for HackPSU using Next.js and Firebase, creating a seamless biometric login experience that actually works in production.","date_published":"2025-08-03T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","webauthn","authentication","next.js","firebase","hackpsu"],"image":"https://www.kanishksachdev.com/projects/api.png"},{"id":"https://www.kanishksachdev.com/blog/cloth-simulator","url":"https://www.kanishksachdev.com/blog/cloth-simulator","title":"Cloth Simulation with physics based tearing","content_text":"","date_published":"2025-08-01T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","physics","simulation","cloth","javascript"]},{"id":"https://www.kanishksachdev.com/blog/hackpsu-easter-eggs","url":"https://www.kanishksachdev.com/blog/hackpsu-easter-eggs","title":"Hidden in Plain Sight: Easter Eggs in the HackPSU Website","content_text":"A deep dive into the interactive easter eggs we secretly embedded throughout the HackPSU Fall 2025 website – from memory games to fish that chase your cursor.","date_published":"2025-07-27T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","javascript","interactive","frontend","hackpsu","easter-eggs"],"image":"https://www.kanishksachdev.com/hackpsu-easter-eggs/Memory%20Match.png"},{"id":"https://www.kanishksachdev.com/blog/spinning-donut","url":"https://www.kanishksachdev.com/blog/spinning-donut","title":"Spinning ASCII Donut","content_text":"A JavaScript implementation of the famous spinning donut algorithm with 3D rotation, lighting, and Z-buffering.","date_published":"2025-07-23T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","3d","ascii","javascript","graphics"]},{"id":"https://www.kanishksachdev.com/blog/tiny-compute-engine","url":"https://www.kanishksachdev.com/blog/tiny-compute-engine","title":"How We Turned a $5 Compute Engine Into a Swiss Army Knife","content_text":"Picture this: you need a static IP for API whitelisting, but Vercel charges 'Picture this: you need a static IP for API whitelisting, but Vercel charges $20/month and Cloud Run setups are overkill. So we grabbed the cheapest GCP Compute Engine instance and crammed 6 different services into it.'0/month and Cloud Run setups are overkill. So we grabbed the cheapest GCP Compute Engine instance and crammed 6 different services into it. Here's how we built our own mini data center.","date_published":"2025-07-20T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","gcp","infrastructure","cost-optimization","devops"]},{"id":"https://www.kanishksachdev.com/blog/job-script","url":"https://www.kanishksachdev.com/blog/job-script","title":"The Job Search Spreadsheet That Drove Me to Automation","content_text":"Picture this: spending 2+ hours daily copy-pasting job listings into a Google Sheet, only to realize half of them are in Toronto (where I can't work) or for the wrong graduation year. Here's how I built a Python script that does the boring stuff so I can focus on actually landing interviews.","date_published":"2025-07-13T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","automation","python","web-scraping","job-search"]},{"id":"https://www.kanishksachdev.com/blog/n-body-gravity","url":"https://www.kanishksachdev.com/blog/n-body-gravity","title":"The N-Body Problem","content_text":"An interactive Newtonian gravity playground: binary stars, planetary systems, chaotic three-body dances, and asteroid belts, integrated with energy-stable velocity Verlet. Drag and fling bodies into new orbits.","date_published":"2025-07-08T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","physics","simulation","javascript","canvas"]},{"id":"https://www.kanishksachdev.com/blog/hackpsu-inventory","url":"https://www.kanishksachdev.com/blog/hackpsu-inventory","title":"Building a Real‑Time Inventory Management System for HackPSU","content_text":"How we designed and built a comprehensive inventory tracking system for HackPSU using Next.js, React Query, and NestJS to manage thousands of items across multiple event locations.","date_published":"2025-07-06T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","next.js","react-query","nestjs","real-time","hackpsu"],"image":"https://www.kanishksachdev.com/projects/inventory.png"},{"id":"https://www.kanishksachdev.com/blog/rust-maps-renderer","url":"https://www.kanishksachdev.com/blog/rust-maps-renderer","title":"Weekend Project: Building a High-Performance Maps Renderer in Rust","content_text":"What started as a 'let me try rendering OpenStreetMap data' turned into a full-blown parallel map rendering engine. Here's how I built a system that processes millions of geographic features and renders beautiful maps with airports (because I love planes).","date_published":"2025-06-29T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","rust","maps","performance","openstreetmap","graphics"],"image":"https://www.kanishksachdev.com/maps/nyc.png"},{"id":"https://www.kanishksachdev.com/blog/conway-game-of-life","url":"https://www.kanishksachdev.com/blog/conway-game-of-life","title":"Conway's Game of Life with a Toroidal Grid","content_text":"","date_published":"2025-06-28T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","cellular-automata","game-of-life","javascript","algorithm"]},{"id":"https://www.kanishksachdev.com/blog/quantity-transaction-optimzation","url":"https://www.kanishksachdev.com/blog/quantity-transaction-optimzation","title":"Denormalizing Inventory Quantity for Sub-Second Reads","content_text":"A deep dive into moving expensive SUM queries off the read path in Django by denormalizing inventory quantities and syncing via signals.","date_published":"2025-06-22T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","django","database","performance","optimization","thon"],"image":"https://www.kanishksachdev.com/quantity-transaction-optimization/timing.png"},{"id":"https://www.kanishksachdev.com/blog/ble-checkin","url":"https://www.kanishksachdev.com/blog/ble-checkin","title":"Building a BLE‑Powered Check‑In System with ESP32","content_text":"How I designed and implemented a Bluetooth Low Energy check‑in platform using ESP32, Web Bluetooth API and our existing web services for seamless workshop attendance.","date_published":"2025-06-15T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","ble","esp32","iot","next.js","firebase","hackpsu"],"image":"https://www.kanishksachdev.com/projects/checkin.png"},{"id":"https://www.kanishksachdev.com/blog/boids-simulation","url":"https://www.kanishksachdev.com/blog/boids-simulation","title":"Flocking, From Three Rules","content_text":"Craig Reynolds' boids, interactive: hundreds of heading-coloured boids flock from three local rules, your cursor scatters or gathers them, and presets swing between tight swarms and streaming rivers.","date_published":"2025-06-12T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","boids","simulation","algorithm","javascript"]},{"id":"https://www.kanishksachdev.com/blog/hackpsu-auth","url":"https://www.kanishksachdev.com/blog/hackpsu-auth","title":"Building a Robust Subdomain-Wide Auth System for HackPSU","content_text":"How we designed and implemented HackPSU's new authentication platform using Next.js, Firebase, and session cookies to secure multiple subdomains with seamless UX.","date_published":"2025-06-08T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","authentication","next.js","firebase","security","hackpsu"],"image":"https://www.kanishksachdev.com/hackpsu-auth/login.png"},{"id":"https://www.kanishksachdev.com/blog/hackpsu-email-delivery","url":"https://www.kanishksachdev.com/blog/hackpsu-email-delivery","title":"Building a Scalable Email Delivery System for HackPSU","content_text":"How I designed and implemented the bulk templated email delivery platform using React, SendGrid, MJML and NestJS for HackPSU organizers.","date_published":"2025-06-01T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","email","automation","templates","hackpsu","scaling"],"image":"https://www.kanishksachdev.com/hackpsu-email-delivery/flow.png"},{"id":"https://www.kanishksachdev.com/blog/untangled","url":"https://www.kanishksachdev.com/blog/untangled","title":"Untangle","content_text":"A planarity puzzle: drag the nodes until no lines cross. The graph is a Delaunay triangulation (always untangleable), with live crossing highlighting and a confetti win.","date_published":"2025-05-31T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","game","algorithm","javascript","interactive"]},{"id":"https://www.kanishksachdev.com/blog/hackpsu-finance","url":"https://www.kanishksachdev.com/blog/hackpsu-finance","title":"Building an Automated Finance System for HackPSU","content_text":"How I built a comprehensive reimbursement management system with automated PDF generation, email workflows, and real-time analytics for HackPSU using Next.js, NestJS, and some creative PDF manipulation.","date_published":"2025-05-25T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["blog","next.js","nestjs","pdf","automation","finance","hackpsu"],"image":"https://www.kanishksachdev.com/projects/finance.png"},{"id":"https://www.kanishksachdev.com/blog/wave-interference","url":"https://www.kanishksachdev.com/blog/wave-interference","title":"Waves, Adding Up","content_text":"An interactive wave interference playground: drag point sources around, add up to six, and watch superposition build constructive and destructive fringes in real time.","date_published":"2025-05-14T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","physics","waves","visualization","javascript"]},{"id":"https://www.kanishksachdev.com/blog/sand-simulator","url":"https://www.kanishksachdev.com/blog/sand-simulator","title":"Simple Sand Simulation","content_text":"","date_published":"2025-05-07T00:00:00.000Z","authors":[{"name":"Kanishk Sachdev","url":"https://www.kanishksachdev.com"}],"tags":["project","physics","simulation","javascript","cellular-automata"]}]}