Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .nojekyll
Empty file.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,19 @@
# nitishagar.github.io

Personal landing page for [Nitish Agarwal](https://github.com/nitishagar).

Highlights merged open-source contributions, GoDaddy engineering leadership, selected projects, and recent writing on [Medium](https://medium.com/@nitishagar).

## Local preview

Open `index.html` in a browser, or serve the folder:

```bash
python3 -m http.server 8000
```

Then visit `http://localhost:8000`.

## Deploy

GitHub Pages serves from the `master` branch root of this repository.
322 changes: 322 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,322 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Nitish Agarwal — Engineering, Open Source, AI Systems</title>
<meta name="description" content="Nitish Agarwal builds production AI systems, leads engineering teams at GoDaddy, and ships merged contributions across open source." />
<meta name="theme-color" content="#0f2f28" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500;12..96,700;12..96,800&family=Source+Sans+3:ital,wght@0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<a class="skip-link" href="#main">Skip to content</a>

<header class="site-header" data-header>
<div class="header-inner">
<a class="brand" href="#top">Nitish Agarwal</a>
<nav class="nav" aria-label="Primary">
<a href="#godaddy">GoDaddy</a>
<a href="#open-source">Open Source</a>
<a href="#projects">Projects</a>
<a href="#writing">Writing</a>
</nav>
<button class="nav-toggle" type="button" aria-expanded="false" aria-controls="mobile-nav" data-nav-toggle>
<span class="sr-only">Menu</span>
<span></span><span></span>
</button>
</div>
<nav id="mobile-nav" class="mobile-nav" data-mobile-nav hidden>
<a href="#godaddy">GoDaddy</a>
<a href="#open-source">Open Source</a>
<a href="#projects">Projects</a>
<a href="#writing">Writing</a>
</nav>
</header>

<main id="main">
<section id="top" class="hero" aria-label="Introduction">
<div class="hero-atmosphere" aria-hidden="true">
<div class="hero-mesh"></div>
<div class="hero-orbit"></div>
<div class="hero-grain"></div>
</div>
<div class="hero-content">
<p class="hero-kicker">Principal Engineer · Open Source · AI Systems</p>
<h1 class="hero-name">Nitish Agarwal</h1>
<p class="hero-lede">
Shipping production AI systems and merged contributions across the stack — while leading engineering teams that scale.
</p>
<div class="hero-actions">
<a class="btn btn-primary" href="#open-source">See open source</a>
<a class="btn btn-ghost" href="#writing">Read on Medium</a>
</div>
</div>
</section>

<section id="godaddy" class="section section-godaddy">
<div class="section-shell">
<p class="section-eyebrow">Leadership</p>
<h2 class="section-title">Leading teams at GoDaddy</h2>
<p class="section-lede">
Principal Engineer focused on AI transformation for Care and Commerce — building systems merchants and guides rely on every day.
</p>

<div class="leadership-grid">
<article class="lead-block">
<h3>Commerce &amp; Care AI</h3>
<p>
Architected CASA, an LLM-powered commerce assistant spanning POS, mobile, checkout, and catalog — designed for tens of millions of merchants, with multi-agent QA for continuous coverage.
</p>
</article>
<article class="lead-block">
<h3>Scaled the India hub</h3>
<p>
Grew GoDaddy’s India engineering organization from a small core to 120+ engineers — hiring, org design, and delivery cadence that keeps platform work shipping.
</p>
</article>
<article class="lead-block">
<h3>Production AI, not demos</h3>
<p>
Leads Care Engineering’s CRM and tooling transformation for guides and customers — agent architecture, MCP, evaluation, and the operational discipline that survives production.
</p>
</article>
</div>
</div>
</section>

<section id="open-source" class="section section-oss">
<div class="section-shell">
<p class="section-eyebrow">Merged contributions</p>
<h2 class="section-title">Open source that landed</h2>
<p class="section-lede">
Recent merged pull requests into projects other people run in production — CI, observability, LLM gateways, Kubernetes, and IoT platforms.
</p>

<div class="oss-featured">
<a class="oss-project" href="https://github.com/taskcluster/taskcluster/pulls?q=is%3Apr+author%3Anitishagar+is%3Amerged" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">taskcluster</span>
<span class="oss-count">12 merged</span>
</div>
<h3>Taskcluster</h3>
<p>UI GraphQL fixes, gzip API middleware, docs, and reliability patches across Mozilla’s CI-at-scale platform.</p>
<span class="oss-link">View contributions</span>
</a>

<a class="oss-project" href="https://github.com/apache/superset/pulls?q=is%3Apr+author%3Anitishagar+is%3Amerged" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">apache</span>
<span class="oss-count">9 merged</span>
</div>
<h3>Apache Superset</h3>
<p>Chart cross-filter correctness, table sorting, report CSV export, dashboard ownership, and MySQL time-grain fixes.</p>
<span class="oss-link">View contributions</span>
</a>

<a class="oss-project" href="https://github.com/BerriAI/litellm/pulls?q=is%3Apr+author%3Anitishagar+is%3Amerged" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">BerriAI</span>
<span class="oss-count">3 merged</span>
</div>
<h3>LiteLLM</h3>
<p>Proxy spend-flush correctness, premium metadata gating, and session-aggregate cost/duration in request logs.</p>
<span class="oss-link">View contributions</span>
</a>

<a class="oss-project" href="https://github.com/alibaba/open-code-review/pull/507" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">alibaba</span>
<span class="oss-count">merged</span>
</div>
<h3>Open Code Review</h3>
<p>Chunked inline review comments into bounded batches for Alibaba’s hybrid deterministic + LLM code-review action.</p>
<span class="oss-link">View pull request</span>
</a>

<a class="oss-project" href="https://github.com/kubernetes/minikube/pull/23271" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">kubernetes</span>
<span class="oss-count">merged</span>
</div>
<h3>minikube</h3>
<p>Enabled CONFIG_TASK_IO_ACCOUNTING and related kernel options in the x86_64 ISO for better I/O observability.</p>
<span class="oss-link">View pull request</span>
</a>

<a class="oss-project" href="https://github.com/nextdns/nextdns/pulls?q=is%3Apr+author%3Anitishagar+is%3Amerged" target="_blank" rel="noopener noreferrer">
<div class="oss-meta">
<span class="oss-org">nextdns</span>
<span class="oss-count">3 merged</span>
</div>
<h3>NextDNS</h3>
<p>Shell completion, dinit init support, and warnings when client discovery is disabled by loopback-only listen.</p>
<span class="oss-link">View contributions</span>
</a>
</div>

<div class="oss-timeline" aria-label="Selected merged pull requests">
<h3 class="timeline-title">Selected merges</h3>
<ul class="timeline-list">
<li>
<time datetime="2026-07-27">Jul 2026</time>
<a href="https://github.com/alibaba/open-code-review/pull/507" target="_blank" rel="noopener noreferrer">Chunk inline comments into bounded batches</a>
<span>alibaba/open-code-review</span>
</li>
<li>
<time datetime="2026-07-08">Jul 2026</time>
<a href="https://github.com/kubernetes/minikube/pull/23271" target="_blank" rel="noopener noreferrer">Enable task I/O accounting in ISO kernel</a>
<span>kubernetes/minikube</span>
</li>
<li>
<time datetime="2026-06-18">Jun 2026</time>
<a href="https://github.com/BerriAI/litellm/pull/30507" target="_blank" rel="noopener noreferrer">Session-aggregate cost and duration in proxy logs</a>
<span>BerriAI/litellm</span>
</li>
<li>
<time datetime="2026-06-15">Jun 2026</time>
<a href="https://github.com/apache/superset/pull/39775" target="_blank" rel="noopener noreferrer">Numeric sort for metric columns in tables</a>
<span>apache/superset</span>
</li>
<li>
<time datetime="2026-06-09">Jun 2026</time>
<a href="https://github.com/taskcluster/taskcluster/pull/8514" target="_blank" rel="noopener noreferrer">Gzip compression middleware for the API layer</a>
<span>taskcluster/taskcluster</span>
</li>
<li>
<time datetime="2026-01-28">Jan 2026</time>
<a href="https://github.com/temporalio/sdk-java/pull/2749" target="_blank" rel="noopener noreferrer">Fix ActivityOptions merge UnsupportedOperationException</a>
<span>temporalio/sdk-java</span>
</li>
<li>
<time datetime="2022-07-07">2021–2022</time>
<a href="https://github.com/balena-io/balena-sdk/pulls?q=is%3Apr+author%3Anitishagar+is%3Amerged" target="_blank" rel="noopener noreferrer">Named &amp; expiring API / provisioning keys across SDK, API, CLI</a>
<span>balena-io · 20+ merges</span>
</li>
</ul>
</div>
</div>
</section>

<section id="projects" class="section section-projects">
<div class="section-shell">
<p class="section-eyebrow">Repositories</p>
<h2 class="section-title">Things I’ve built</h2>
<p class="section-lede">
Open tools for agent readiness, verifiable AI decisions, MCP authoring, and observability — the same themes as the writing.
</p>

<div class="project-list">
<a class="project-row" href="https://github.com/nitishagar/sober-ai" target="_blank" rel="noopener noreferrer">
<div>
<h3>sober-ai</h3>
<p>Lighthouse reimagined for the AI-first world — audit AI agent readiness the way you audit web performance.</p>
</div>
<span class="lang">JavaScript</span>
</a>
<a class="project-row" href="https://github.com/nitishagar/receipta" target="_blank" rel="noopener noreferrer">
<div>
<h3>receipta</h3>
<p>Tamper-evident receipts for every AI decision — Ed25519-signed, hash-chained, offline-verifiable.</p>
</div>
<span class="lang">TypeScript</span>
</a>
<a class="project-row" href="https://github.com/nitishagar/mcp-author-kit" target="_blank" rel="noopener noreferrer">
<div>
<h3>mcp-author-kit</h3>
<p>Scaffold, grade, test, and debug MCP servers from inside Cursor — because broken tools are usually broken descriptions.</p>
</div>
<span class="lang">JavaScript</span>
</a>
<a class="project-row" href="https://github.com/nitishagar/lexvault" target="_blank" rel="noopener noreferrer">
<div>
<h3>lexvault</h3>
<p>Reversible proprietary-term pseudonymization for LiteLLM — mask codenames outbound, restore them faithfully inbound.</p>
</div>
<span class="lang">Python</span>
</a>
<a class="project-row" href="https://github.com/nitishagar/OTel-query-mcp" target="_blank" rel="noopener noreferrer">
<div>
<h3>OTel-query-mcp</h3>
<p>MCP server for querying observability backends — OpenTelemetry Collector, Grafana, Elastic Cloud, OpenSearch.</p>
</div>
<span class="lang">Python</span>
</a>
<a class="project-row" href="https://github.com/nitishagar/repro-agents" target="_blank" rel="noopener noreferrer">
<div>
<h3>repro-agents</h3>
<p>Agents that rerun your science and show their receipts — reproducibility auditors for scientific Python projects.</p>
</div>
<span class="lang">Python</span>
</a>
</div>

<p class="section-more">
<a href="https://github.com/nitishagar?tab=repositories" target="_blank" rel="noopener noreferrer">Browse all repositories on GitHub →</a>
</p>
</div>
</section>

<section id="writing" class="section section-writing">
<div class="section-shell">
<p class="section-eyebrow">Medium · @nitishagar</p>
<h2 class="section-title">Latest writing</h2>
<p class="section-lede">
Field notes for engineering leaders — what survives production over what demos well.
</p>

<div class="article-list" data-articles>
<a class="article" href="https://nitishagar.medium.com/everyone-is-building-mainframes-again-28dde9829342" target="_blank" rel="noopener noreferrer">
<time datetime="2026-07-24">Jul 24, 2026</time>
<h3>Everyone is building mainframes again</h3>
<p>AMD just shipped a $5 million rack. Nvidia sells factories. The AI industry has re-entered its System/360 era.</p>
</a>
<a class="article" href="https://nitishagar.medium.com/your-agent-has-no-slo-heres-how-to-give-it-one-9fa59a5fb843" target="_blank" rel="noopener noreferrer">
<time datetime="2026-07-21">Jul 21, 2026</time>
<h3>Your Agent Has No SLO. Here’s How to Give It One.</h3>
<p>Traditional monitoring assumes deterministic code. Agents aren’t. A field guide to observing and budgeting LLM agents.</p>
</a>
<a class="article" href="https://nitishagar.medium.com/your-coding-agent-doesnt-need-a-memory-layer-yet-cff3d32dd155" target="_blank" rel="noopener noreferrer">
<time datetime="2026-07-06">Jul 6, 2026</time>
<h3>Your Coding Agent Doesn’t Need a Memory Layer (Yet)</h3>
<p>Agent memory is 2026’s vector database: real pain, serious funding — and a markdown file already doing most of the job.</p>
</a>
<a class="article" href="https://nitishagar.medium.com/the-dns-for-ai-agents-one-year-later-what-ans-v2-gets-right-317715e83c39" target="_blank" rel="noopener noreferrer">
<time datetime="2026-07-02">Jul 2, 2026</time>
<h3>The DNS for AI Agents, One Year Later: What ANS v2 Gets Right</h3>
<p>How the Agent Name Service went back to the drawing board — and why its second act matters to your architecture.</p>
</a>
<a class="article" href="https://nitishagar.medium.com/reproducibility-is-a-labor-problem-agents-are-labor-3320a1b603b6" target="_blank" rel="noopener noreferrer">
<time datetime="2026-06-11">Jun 11, 2026</time>
<h3>Reproducibility Isn’t a Specification Problem. It’s a Verification Problem.</h3>
<p>Scientific Python solved environment specification. Verification still runs on volunteers — three agent patterns for the rest.</p>
</a>
<a class="article" href="https://nitishagar.medium.com/your-mcp-tool-isnt-broken-your-description-is-1af59cb28373" target="_blank" rel="noopener noreferrer">
<time datetime="2026-05-20">May 20, 2026</time>
<h3>Your MCP tool isn’t broken. Your description is.</h3>
<p>The silent-failure problem nobody owns — and the Cursor plugin built to stop guessing.</p>
</a>
</div>

<p class="section-more">
<a href="https://medium.com/@nitishagar" target="_blank" rel="noopener noreferrer">All articles on Medium →</a>
</p>
</div>
</section>
</main>

<footer class="site-footer">
<div class="footer-inner">
<p class="footer-brand">Nitish Agarwal</p>
<div class="footer-links">
<a href="https://github.com/nitishagar" target="_blank" rel="noopener noreferrer">GitHub</a>
<a href="https://medium.com/@nitishagar" target="_blank" rel="noopener noreferrer">Medium</a>
</div>
</div>
</footer>

<script src="script.js" defer></script>
</body>
</html>
53 changes: 53 additions & 0 deletions script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
(() => {
const header = document.querySelector("[data-header]");
const toggle = document.querySelector("[data-nav-toggle]");
const mobileNav = document.querySelector("[data-mobile-nav]");

const onScroll = () => {
if (!header) return;
header.classList.toggle("is-scrolled", window.scrollY > 12);
};

onScroll();
window.addEventListener("scroll", onScroll, { passive: true });

if (toggle && mobileNav) {
toggle.addEventListener("click", () => {
const open = mobileNav.classList.toggle("is-open");
mobileNav.hidden = !open;
toggle.setAttribute("aria-expanded", String(open));
});

mobileNav.querySelectorAll("a").forEach((link) => {
link.addEventListener("click", () => {
mobileNav.classList.remove("is-open");
mobileNav.hidden = true;
toggle.setAttribute("aria-expanded", "false");
});
});
}

const revealTargets = document.querySelectorAll(
".section-title, .section-lede, .lead-block, .oss-project, .timeline-list li, .project-row, .article"
);

revealTargets.forEach((el) => el.classList.add("reveal"));

if ("IntersectionObserver" in window) {
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add("is-visible");
observer.unobserve(entry.target);
}
});
},
{ threshold: 0.12, rootMargin: "0px 0px -8% 0px" }
);

revealTargets.forEach((el) => observer.observe(el));
} else {
revealTargets.forEach((el) => el.classList.add("is-visible"));
}
})();
Loading