nk - digital workshop
> mounting workshop…> calibrating grid…> indexing field notes…> warming up particles…
est. 2024 · pune, in000
NK.
cv ↓

the digital workshop of Neeraj Kulkarni

I build to
understand.

Fullstack engineer at Qualys. Part lab notebook, part playground - all work in progress.

scroll to enter ↓
01 / 09

readme.md

I'm Neeraj - a fullstack engineer at Qualys who got into software the same way I get into everything: by taking it apart to see why it works. The first program I ever wrote failed in an interesting way, and I've been chasing that feeling ever since.

By day I build security platform features - React micro frontends talking to Spring Boot services, with Kafka somewhere in the middle doing the heavy lifting. By night the laptop stays open: LLM agents, retrieval pipelines, and a homelab held together by Helm charts and optimism.

But the keyboard is only half of it. There's a violin that gets played most evenings, a sketchbook full of graphite, and a pair of boots that have been up more Himalayan trails than I can justify. The same curiosity drives all of it - code just happens to be the part that pays.

I keep this site like a lab notebook. Not everything in it is polished - that's the point. The interesting part of engineering is the part where you don't know the answer yet.

$ status --now

  • building: a local-first RAG over my own notes
  • reading: Designing Data-Intensive Applications, again
  • practicing: vibrato. the neighbours are patient
  • planning: the next trek before the last one fades
  • wondering: when an agent should refuse to act

updated more often than my resume

02 / 09

worklog

JUL 2024 - NOW

Fullstack Software Engineer

Qualys

ReactModule FederationSpring BootKafkaRedisLangChain
  • -Building micro frontends with Module Federation across a security platform used by enterprises - independent deploys, one seamless runtime.
  • -Designing Spring Boot services, Kafka pipelines and Redis caching: the unglamorous plumbing that makes dashboards feel instant.
  • -Prototyping LLM-assisted features - retrieval over product knowledge with LangChain, ChromaDB and a healthy distrust of vector similarity.

JAN 2024

Engineering Intern

Qualys

JavaJUnitOracle SQLGit
  • -Shipped my first production code and learned the difference between “works on my machine” and “works”.
  • -Discovered that reading other people's code is a skill, and that the codebase is the real documentation.

2020 - 2024

BE, Engineering

Savitribai Phule Pune University

  • -Where the curiosity got structure. Also where I learned that the best way to understand a concept is to build a bad version of it first.
03 / 09

experiments

fig. 01

2025

recall/

A second brain that actually remembers

Local-first RAG over my markdown notes. Ollama for embeddings and generation, ChromaDB for vectors, FastAPI in between. Citations or it didn't happen.

PythonFastAPIChromaDBOllama

status: v0.3 · in daily use

fig. 02

2026

agent-loop/

How many agents is too many?

A LangGraph playground for multi-agent workflows with human-in-the-loop checkpoints. Mostly an exercise in teaching agents when to stop.

LangGraphLangChainAnthropic API

status: in progress

fig. 03

2024 -

homelab/

A single-node Kubernetes cluster nobody asked for

K8s, Helm, Consul and Vault running on a reclaimed machine in the corner of my room. It hosts my experiments, and my humility.

KubernetesHelmConsulVault

status: forever WIP

fig. 04

2025

fragment/

Micro frontends without tears

A Module Federation starter kit: shared design tokens, independent deploys, one runtime. Born from production scar tissue.

ReactModule FederationTypeScriptJest

status: v1.0

results not guaranteed. learning is.

04 / 09

toolbench

Languages

Frontend

Backend

AI / ML

Infra

// inspector

hover a tool on the bench to inspect it.

05 / 09

field notes

001on kafka

Partitions aren't queues. Consumer groups finally clicked the day I stopped pretending they were.

002on retrieval

Vector similarity is not relevance. Skipping the reranker is how RAG demos die in production.

003on secrets

Vault's dynamic database credentials expire before the standup ends. This still feels like magic.

004on frontends

Every micro frontend boundary is an org-chart decision in disguise. Conway was right.

005on debugging

If you can't reproduce it, you don't have a bug - you have a ghost story.

006on agents

An agent without an exit condition is just an expensive while(true).

007on learning

Reading the docs end-to-end is a superpower disguised as a chore.

008on this site

Built with Next.js 16, GSAP and three.js - mostly to find out how the award-winning sites do it.

009on violin

Vibrato is controlled instability. So is most production infrastructure.

010on trekking

Mountains teach pacing. You don't summit by sprinting the first kilometre.

more notes growing.
gardens take time.

06 / 09

journal

MAY 2026

1 min read

Teaching my notes to talk back

What I learned building a local-first RAG over five years of markdown - and why vector similarity kept lying to me.

MAR 2026

1 min read

What the violin taught me about debugging

Slow it down, isolate the bar, listen before you fix. Practice rooms and production incidents have more in common than they should.

new entries land here whenever something is worth writing down

07 / 09

studio

The part of me that doesn't compile. An engineer is the worst thing to be full-time - so I'm not.

exhibit a - the violin

The oldest project I maintain. No version control, no logs, no rollback - just muscle memory and a bow that tells me immediately when I've shipped a bad note.

Practice taught me more about debugging than any book: slow the passage down, isolate the broken bar, listen before you fix. Then play it at tempo and watch it break differently.

drag to rotate - no model file, just bézier curves and three.js

exhibit b - sketchbook

ridge line, from memory
ridge line, from memorygraphite · 2B
the violin, again
the violin, againgraphite · 4B
old city window
old city windowgraphite · HB

slower than ctrl+z, better for thinking

exhibit c - trail log

Kedarkantha

Garhwal Himalaya

12,500 ft

Summit at sunrise. Understood immediately why people keep going back.

Hampta Pass

Himachal

14,100 ft

Two valleys, two climates, one very wet tent.

Triund

Dharamkot

9,350 ft

The starter trek that started everything.

Monsoon forts

Western Ghats

~4,500 ft

Home turf. No signal, plenty of fog - the fog is a feature.

$ also in rotation: film scores while coding, old laptops reborn as linux servers, and a learning queue that only grows.

08 / 09

arcade

BUG HUNT - squash the bugs before they reach production. 30 seconds. No sprint planning required.

squashed 0escaped 0time 30sbest 0

built in react state and questionable priorities