diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index 3cf6d9d..90df23d 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/index.html b/index.html new file mode 100644 index 0000000..0d25504 --- /dev/null +++ b/index.html @@ -0,0 +1,322 @@ + + + + + + Nitish Agarwal — Engineering, Open Source, AI Systems + + + + + + + + + + + + +
+
+ +
+

Principal Engineer · Open Source · AI Systems

+

Nitish Agarwal

+

+ Shipping production AI systems and merged contributions across the stack — while leading engineering teams that scale. +

+ +
+
+ +
+
+

Leadership

+

Leading teams at GoDaddy

+

+ Principal Engineer focused on AI transformation for Care and Commerce — building systems merchants and guides rely on every day. +

+ +
+
+

Commerce & Care AI

+

+ 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. +

+
+
+

Scaled the India hub

+

+ Grew GoDaddy’s India engineering organization from a small core to 120+ engineers — hiring, org design, and delivery cadence that keeps platform work shipping. +

+
+
+

Production AI, not demos

+

+ Leads Care Engineering’s CRM and tooling transformation for guides and customers — agent architecture, MCP, evaluation, and the operational discipline that survives production. +

+
+
+
+
+ +
+
+

Merged contributions

+

Open source that landed

+

+ Recent merged pull requests into projects other people run in production — CI, observability, LLM gateways, Kubernetes, and IoT platforms. +

+ + + +
+

Selected merges

+ +
+
+
+ +
+ +
+ +
+ +
+
+ + + + + + diff --git a/script.js b/script.js new file mode 100644 index 0000000..524f16b --- /dev/null +++ b/script.js @@ -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")); + } +})(); diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..73010fc --- /dev/null +++ b/styles.css @@ -0,0 +1,772 @@ +:root { + --ink: #13241f; + --ink-soft: #3a524a; + --muted: #6b8178; + --paper: #f2f5f3; + --paper-2: #e6ece9; + --line: rgba(19, 36, 31, 0.12); + --accent: #0f6e5c; + --accent-deep: #0a463b; + --accent-glow: rgba(15, 110, 92, 0.18); + --hero-deep: #0f2f28; + --hero-mid: #1a4a3f; + --hero-fog: #d7e4de; + --display: "Bricolage Grotesque", Georgia, serif; + --body: "Source Sans 3", "Segoe UI", sans-serif; + --radius: 0; + --ease: cubic-bezier(0.22, 1, 0.36, 1); + --header-h: 4.25rem; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + margin: 0; + font-family: var(--body); + font-size: 1.0625rem; + line-height: 1.65; + color: var(--ink); + background: + radial-gradient(1200px 600px at 10% -10%, rgba(15, 110, 92, 0.08), transparent 55%), + radial-gradient(900px 500px at 100% 20%, rgba(26, 74, 63, 0.06), transparent 50%), + linear-gradient(180deg, #f7f9f8 0%, var(--paper) 40%, #eef3f0 100%); + min-height: 100vh; +} + +img { + max-width: 100%; + display: block; +} + +a { + color: inherit; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.skip-link { + position: absolute; + left: 1rem; + top: -4rem; + z-index: 100; + background: var(--ink); + color: var(--paper); + padding: 0.75rem 1rem; + text-decoration: none; +} + +.skip-link:focus { + top: 1rem; +} + +/* Header */ +.site-header { + position: sticky; + top: 0; + z-index: 50; + backdrop-filter: blur(14px); + background: rgba(242, 245, 243, 0.82); + border-bottom: 1px solid transparent; + transition: border-color 0.3s var(--ease), background 0.3s var(--ease); +} + +.site-header.is-scrolled { + border-bottom-color: var(--line); + background: rgba(242, 245, 243, 0.94); +} + +.header-inner { + max-width: 1120px; + margin: 0 auto; + padding: 1rem 1.5rem; + min-height: var(--header-h); + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; +} + +.brand { + font-family: var(--display); + font-weight: 700; + font-size: 1.15rem; + letter-spacing: -0.02em; + text-decoration: none; +} + +.nav { + display: flex; + gap: 1.75rem; +} + +.nav a, +.mobile-nav a { + text-decoration: none; + color: var(--ink-soft); + font-weight: 500; + font-size: 0.95rem; + transition: color 0.2s ease; +} + +.nav a:hover, +.mobile-nav a:hover { + color: var(--accent-deep); +} + +.nav-toggle { + display: none; + width: 2.5rem; + height: 2.5rem; + border: 1px solid var(--line); + background: transparent; + cursor: pointer; + padding: 0; + align-items: center; + justify-content: center; + flex-direction: column; + gap: 0.35rem; +} + +.nav-toggle span:not(.sr-only) { + display: block; + width: 1.1rem; + height: 1.5px; + background: var(--ink); +} + +.mobile-nav { + display: none; + flex-direction: column; + gap: 0.25rem; + padding: 0 1.5rem 1.25rem; +} + +.mobile-nav a { + padding: 0.65rem 0; + border-top: 1px solid var(--line); +} + +/* Hero — one composition, brand-first, full-bleed atmosphere */ +.hero { + position: relative; + min-height: calc(100svh - var(--header-h)); + display: grid; + place-items: end stretch; + overflow: hidden; + color: #edf4f1; + background: linear-gradient(155deg, var(--hero-deep) 0%, var(--hero-mid) 48%, #24584c 100%); +} + +.hero-atmosphere { + position: absolute; + inset: 0; + pointer-events: none; +} + +.hero-mesh { + position: absolute; + inset: -20%; + background: + radial-gradient(circle at 18% 30%, rgba(167, 230, 205, 0.22), transparent 28%), + radial-gradient(circle at 78% 20%, rgba(255, 255, 255, 0.1), transparent 24%), + radial-gradient(circle at 70% 75%, rgba(10, 70, 59, 0.55), transparent 35%), + repeating-linear-gradient( + -18deg, + transparent 0 18px, + rgba(237, 244, 241, 0.035) 18px 19px + ); + animation: mesh-drift 18s var(--ease) infinite alternate; +} + +.hero-orbit { + position: absolute; + width: min(70vw, 640px); + aspect-ratio: 1; + right: -8%; + top: 8%; + border: 1px solid rgba(237, 244, 241, 0.14); + border-radius: 50%; + animation: orbit-spin 42s linear infinite; +} + +.hero-orbit::before, +.hero-orbit::after { + content: ""; + position: absolute; + border-radius: 50%; + border: 1px solid rgba(237, 244, 241, 0.1); +} + +.hero-orbit::before { + inset: 12%; +} + +.hero-orbit::after { + inset: 28%; + background: radial-gradient(circle at 30% 30%, rgba(167, 230, 205, 0.2), transparent 55%); +} + +.hero-grain { + position: absolute; + inset: 0; + opacity: 0.28; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E"); + mix-blend-mode: soft-light; +} + +.hero-content { + position: relative; + z-index: 1; + max-width: 1120px; + width: 100%; + margin: 0 auto; + padding: clamp(4rem, 12vh, 7rem) 1.5rem clamp(3.5rem, 9vh, 5.5rem); +} + +.hero-kicker { + margin: 0 0 1rem; + font-size: 0.92rem; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + color: rgba(237, 244, 241, 0.72); + opacity: 0; + transform: translateY(18px); + animation: rise 0.9s var(--ease) 0.1s forwards; +} + +.hero-name { + margin: 0; + font-family: var(--display); + font-weight: 800; + font-size: clamp(3.2rem, 11vw, 6.75rem); + line-height: 0.92; + letter-spacing: -0.045em; + max-width: 12ch; + opacity: 0; + transform: translateY(24px); + animation: rise 1s var(--ease) 0.2s forwards; +} + +.hero-lede { + margin: 1.5rem 0 0; + max-width: 34rem; + font-size: clamp(1.1rem, 2.2vw, 1.35rem); + line-height: 1.55; + color: rgba(237, 244, 241, 0.88); + opacity: 0; + transform: translateY(20px); + animation: rise 1s var(--ease) 0.35s forwards; +} + +.hero-actions { + display: flex; + flex-wrap: wrap; + gap: 0.85rem; + margin-top: 2rem; + opacity: 0; + transform: translateY(16px); + animation: rise 1s var(--ease) 0.5s forwards; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 3rem; + padding: 0.7rem 1.25rem; + text-decoration: none; + font-weight: 600; + font-size: 0.98rem; + border: 1px solid transparent; + transition: transform 0.25s var(--ease), background 0.25s ease, color 0.25s ease, border-color 0.25s ease; +} + +.btn:hover { + transform: translateY(-2px); +} + +.btn-primary { + background: #edf4f1; + color: var(--hero-deep); +} + +.btn-primary:hover { + background: #fff; +} + +.btn-ghost { + border-color: rgba(237, 244, 241, 0.35); + color: #edf4f1; +} + +.btn-ghost:hover { + border-color: rgba(237, 244, 241, 0.7); + background: rgba(237, 244, 241, 0.08); +} + +/* Sections */ +.section { + padding: clamp(4.5rem, 10vw, 7rem) 0; +} + +.section-shell { + max-width: 1120px; + margin: 0 auto; + padding: 0 1.5rem; +} + +.section-eyebrow { + margin: 0 0 0.75rem; + font-size: 0.82rem; + font-weight: 650; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--accent); +} + +.section-title { + margin: 0; + font-family: var(--display); + font-weight: 750; + font-size: clamp(2rem, 4.5vw, 3.15rem); + line-height: 1.05; + letter-spacing: -0.03em; + max-width: 16ch; +} + +.section-lede { + margin: 1rem 0 0; + max-width: 40rem; + color: var(--ink-soft); + font-size: 1.125rem; +} + +.section-more { + margin: 2rem 0 0; +} + +.section-more a { + color: var(--accent-deep); + font-weight: 600; + text-decoration: none; + border-bottom: 1px solid rgba(10, 70, 59, 0.3); +} + +.section-more a:hover { + border-bottom-color: var(--accent-deep); +} + +/* GoDaddy */ +.section-godaddy { + border-top: 1px solid var(--line); +} + +.leadership-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2rem 2.5rem; + margin-top: 3rem; + padding-top: 2rem; + border-top: 1px solid var(--line); +} + +.lead-block h3 { + margin: 0 0 0.75rem; + font-family: var(--display); + font-size: 1.35rem; + letter-spacing: -0.02em; +} + +.lead-block p { + margin: 0; + color: var(--ink-soft); +} + +/* Open source */ +.section-oss { + background: + linear-gradient(180deg, rgba(15, 110, 92, 0.04), transparent 18%), + linear-gradient(180deg, #e9efec, #f2f5f3 40%); +} + +.oss-featured { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1px; + margin-top: 3rem; + background: var(--line); + border: 1px solid var(--line); +} + +.oss-project { + display: flex; + flex-direction: column; + gap: 0.65rem; + padding: 1.5rem 1.35rem 1.35rem; + background: rgba(247, 249, 248, 0.92); + text-decoration: none; + transition: background 0.25s ease, transform 0.25s var(--ease); +} + +.oss-project:hover { + background: #fff; + transform: translateY(-2px); + position: relative; + z-index: 1; + box-shadow: 0 18px 40px rgba(19, 36, 31, 0.08); +} + +.oss-meta { + display: flex; + justify-content: space-between; + gap: 0.75rem; + font-size: 0.78rem; + font-weight: 650; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--muted); +} + +.oss-org { + color: var(--accent); +} + +.oss-project h3 { + margin: 0; + font-family: var(--display); + font-size: 1.35rem; + letter-spacing: -0.02em; +} + +.oss-project p { + margin: 0; + color: var(--ink-soft); + font-size: 0.98rem; + flex: 1; +} + +.oss-link { + margin-top: 0.5rem; + font-size: 0.9rem; + font-weight: 600; + color: var(--accent-deep); +} + +.oss-timeline { + margin-top: 3.5rem; +} + +.timeline-title { + margin: 0 0 1.25rem; + font-family: var(--display); + font-size: 1.25rem; + letter-spacing: -0.02em; +} + +.timeline-list { + list-style: none; + margin: 0; + padding: 0; + border-top: 1px solid var(--line); +} + +.timeline-list li { + display: grid; + grid-template-columns: 6.5rem 1fr auto; + gap: 1rem 1.5rem; + align-items: baseline; + padding: 1rem 0; + border-bottom: 1px solid var(--line); +} + +.timeline-list time { + font-size: 0.88rem; + font-weight: 600; + color: var(--muted); +} + +.timeline-list a { + text-decoration: none; + font-weight: 600; + color: var(--ink); +} + +.timeline-list a:hover { + color: var(--accent-deep); +} + +.timeline-list span { + font-size: 0.88rem; + color: var(--muted); + text-align: right; +} + +/* Projects */ +.project-list { + margin-top: 2.5rem; + border-top: 1px solid var(--line); +} + +.project-row { + display: grid; + grid-template-columns: 1fr auto; + gap: 1.5rem; + align-items: baseline; + padding: 1.35rem 0; + border-bottom: 1px solid var(--line); + text-decoration: none; + transition: padding-left 0.25s var(--ease); +} + +.project-row:hover { + padding-left: 0.5rem; +} + +.project-row h3 { + margin: 0 0 0.35rem; + font-family: var(--display); + font-size: 1.35rem; + letter-spacing: -0.02em; +} + +.project-row p { + margin: 0; + color: var(--ink-soft); + max-width: 46rem; +} + +.project-row .lang { + font-size: 0.82rem; + font-weight: 650; + letter-spacing: 0.05em; + text-transform: uppercase; + color: var(--muted); +} + +/* Writing */ +.section-writing { + border-top: 1px solid var(--line); + background: linear-gradient(180deg, transparent, rgba(15, 110, 92, 0.05)); +} + +.article-list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.75rem 2rem; + margin-top: 2.75rem; +} + +.article { + display: block; + padding-top: 1.25rem; + border-top: 1px solid var(--line); + text-decoration: none; + transition: transform 0.25s var(--ease); +} + +.article:hover { + transform: translateY(-3px); +} + +.article time { + display: block; + margin-bottom: 0.55rem; + font-size: 0.85rem; + font-weight: 600; + color: var(--muted); +} + +.article h3 { + margin: 0 0 0.55rem; + font-family: var(--display); + font-size: 1.35rem; + line-height: 1.2; + letter-spacing: -0.02em; +} + +.article p { + margin: 0; + color: var(--ink-soft); +} + +/* Footer */ +.site-footer { + border-top: 1px solid var(--line); + padding: 2rem 0 2.5rem; + background: #e8eeeb; +} + +.footer-inner { + max-width: 1120px; + margin: 0 auto; + padding: 0 1.5rem; + display: flex; + justify-content: space-between; + align-items: center; + gap: 1rem; +} + +.footer-brand { + margin: 0; + font-family: var(--display); + font-weight: 700; + letter-spacing: -0.02em; +} + +.footer-links { + display: flex; + gap: 1.5rem; +} + +.footer-links a { + text-decoration: none; + font-weight: 600; + color: var(--ink-soft); +} + +.footer-links a:hover { + color: var(--accent-deep); +} + +/* Reveal on scroll */ +.reveal { + opacity: 0; + transform: translateY(22px); + transition: opacity 0.8s var(--ease), transform 0.8s var(--ease); +} + +.reveal.is-visible { + opacity: 1; + transform: none; +} + +@keyframes rise { + to { + opacity: 1; + transform: none; + } +} + +@keyframes mesh-drift { + from { + transform: translate3d(0, 0, 0) scale(1); + } + to { + transform: translate3d(2%, -1.5%, 0) scale(1.04); + } +} + +@keyframes orbit-spin { + to { + transform: rotate(360deg); + } +} + +@media (max-width: 960px) { + .leadership-grid, + .oss-featured, + .article-list { + grid-template-columns: 1fr 1fr; + } + + .timeline-list li { + grid-template-columns: 5.5rem 1fr; + } + + .timeline-list span { + grid-column: 2; + text-align: left; + } +} + +@media (max-width: 720px) { + .nav { + display: none; + } + + .nav-toggle { + display: inline-flex; + } + + .mobile-nav.is-open { + display: flex; + } + + .hero { + min-height: calc(100svh - 4.5rem); + place-items: center stretch; + } + + .hero-content { + padding-top: 5rem; + } + + .leadership-grid, + .oss-featured, + .article-list { + grid-template-columns: 1fr; + } + + .oss-featured { + gap: 0; + border: none; + background: transparent; + } + + .oss-project { + border: 1px solid var(--line); + margin-bottom: 0.75rem; + } + + .timeline-list li { + grid-template-columns: 1fr; + gap: 0.35rem; + } + + .project-row { + grid-template-columns: 1fr; + gap: 0.5rem; + } + + .footer-inner { + flex-direction: column; + align-items: flex-start; + } +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + .hero-mesh, + .hero-orbit, + .hero-kicker, + .hero-name, + .hero-lede, + .hero-actions, + .reveal { + animation: none !important; + transition: none !important; + opacity: 1 !important; + transform: none !important; + } +}