← Naman GuptaLive status
About this site

The site is the proof.

A static portfolio is a CV with better typography. This one is a small distributed system — a Next.js front-end, a Spring Boot back-end I wrote and operate, a chat endpoint trained on my work history, and a /status page that polls the live process. The point of building it this way is the point: this is what shipping looks like for me.

The stack
Front-end
Next.js 16 (App Router · React Server Components) + Tailwind CSS v4. Static-by-default, with a few client islands (the chat, the CP ratings, the command palette). MDX for case studies and writing.
Back-end
Spring Boot service in Java 21. Hosts the chat endpoint, the live CP ratings cache, and the /status counters. Same stack I write production code in at Vegapay.
Chat
POST /api/v1/chat. A small RAG pipeline: a fine-tuned context built from my work history + projects, queried per request, answered via an LLM with strict scope to keep it grounded.
Live ratings
A scheduled poller hits LeetCode & Codeforces, normalizes the payloads, caches them, and exposes /api/v1/cp-stats. The numbers in §III are refreshed from this cache on every page load.
Hosting
Front-end on the edge. Back-end on a single small VM behind a CDN. No vendor lock-in by design — if I had to move it in a weekend, I could.
Architecture
┌────────────────┐ │ Browser │ └────────┬───────┘ │ HTTPS ▼ ┌────────────────┐ │ Next.js (RSC) │ static-by-default │ /, /work/*, │ client islands: │ /resume, ... │ · Chat, AskMe └───┬────────┬───┘ · CP ratings │ │ · CmdK palette /api/v1/* │ │ reads ▼ ▼ ┌─────────────────┐ │ Spring Boot │ single Java 21 process │ /chat │ │ /cp-stats │ │ /status │ └────────┬────────┘ │ ┌────────┴────────┐ ▼ ▼ ┌──────────┐ ┌──────────────┐ │ In-mem │ │ Scheduled │ │ cache │ │ pollers │ → LeetCode, Codeforces └──────────┘ └──────────────┘
Same shape as the Vegapay reporting pipeline. Same instincts.
What's live, not faked
Why build it this way

I could have used a portfolio template. The reason I didn't is the same reason I write the case studies with "what I'd revisit" sections — the most useful thing I can show a hiring manager is how I make decisions, not what decisions I made. A real system in the open is a better signal than a list of frameworks.

If you ask the chat "how was this site built?" — it answers from this page. The system is its own documentation.

Performance budget
LCP target
< 1.0s
CLS target
0
First-paint JS
< 20 KB
Routes prerendered
100%

The homepage ships zero JavaScript above the fold. The client islands (Chat, AskMe, CmdK, ScrollProgress) are lazily mounted and run only when actually used.

Open source · forthcoming

The front-end and the Spring Boot back-end are being prepared for public release. If you're curious about a specific decision in the meantime, the chat will answer — or email me and I'll walk you through it.

← Back to the siteSee it run · /status