home {{ parentLabel }} {{ crumbLabel }}
page 1 of many · Gurugram, IST
4 years in, still counting

I build the whole thing —
web, cloud, AI, and lately
Android .

Four years of picking up whatever the problem needed and refusing to hand it off halfway. Apps, APIs, pipelines, 3D interfaces, LLM systems at work, and two Android apps built at night because I apparently can't sit still.

me to every
task :)
Harsh Singh Raghuvanshi
no photographer on payroll,
so the mirror does the shoot 👍
fig. 1 — the whole job
web cloud AI / LLM android me

Stuff I'm building right now

↓ scribbled on weeknights
SnapSpend weekly overview
wip · android
Expense tracker

Because every other one wants my bank login and a subscription to tell me I spend too much on coffee.

read the messy story →
Arrows level board
wip · game
Arrows

Tap an arrow, it slides off the board — if nothing's in its way. A puzzle game I built because the one I played had more ads than levels.

read the messy story →
iOS whenever Apple stops charging $99/yr for the privilege of being trusted →

Case studies

all the jobs →
01 Graph RAG for clinical corpora
Neo4j traversal + hybrid search over PDFs nobody meant to be parsed.
Neo4j · LangChain open →
02 An agent that makes phone calls
Outbound data verification on GCP. Twilio on the wire, one strict rule.
Dialogflow CX · Cloud Run open →
03 Robot arms, simulated in a browser
Three.js kinematics inside an Angular app for Orangewood Labs.
Three.js · Angular open →

Where I've worked

the long version →
May 2025 → now
Deloitte USI
SDE II

Own a Graph RAG platform end to end — Neo4j traversal, hybrid retrieval, the whole ingestion pipeline. Also shipped an outbound-call agent solo under a GCP-only mandate.

Neo4j LangChain 2 awards
Apr 2023 → Apr 2025
Kilobyte Technologies
Full Stack Developer

Owned deploys on EC2 with GitLab pipelines (~40% faster), tuned Nginx and load balancing for 99.9% uptime, reworked the database for 30% faster queries at 2× the concurrency.

Node.js Angular EC2 · Nginx
Jul 2022 → Apr 2023
Skugal Technologies
SDE I

3D robot simulation for Orangewood Labs, OAuth + Stripe payment flows, a Kinesis→Redshift Lambda pipeline at 100k+ concurrent users, and a configurable analytics dashboard.

Three.js Lambda Stripe
Jan 2022 → Jul 2022
Perceived Design
Full Stack Intern

Two MEAN-stack SPAs, 15+ responsive screens plus the APIs behind them, a from-scratch 3D environment with joystick controls, and real-time collaboration over Socket.io.

MongoDB Socket.io

Toolbox

TypeScript Node.js Angular Android AWS GCP Three.js React MongoDB PostgreSQL Neo4j · RAG Swift (blocked: $99)
filled in = I'd defend it in a code review

Rules I scribbled inside the cover

Own it end to end

Schema, API, UI, deploy, the 2am alert. Fewer handoffs, fewer places for the truth to go missing.

Boring where it counts

Tests, pipelines, uptime. Save the novelty for the part users can actually see.

Learn by shipping

Three.js, RAG, now Android — each one started as a thing I hadn't done, on a deadline.

Work — the long version

Four years, four companies, one habit: taking the piece nobody else wanted to own. Notes below, roughly in reverse.

May 2025 → present
Deloitte USI
SDE II · Gurugram
2 awards
  • Own a Graph RAG platform end to end — architecture, code review, mentoring. Neo4j traversal plus hybrid vector/keyword search, live in production.
  • Built the ingestion pipeline: Docling for structured PDF parsing, OpenAI embeddings, LangChain orchestration. Chunking strategy and graph schema were mine to get wrong.
  • Shipped an outbound-call verification agent solo under a GCP-only mandate — Dialogflow CX, Vertex AI ADK, Cloud Run, Twilio.
Apr 2023 → Apr 2025
Kilobyte Technologies
Full Stack Developer
  • Owned deploys for Node and Angular apps on EC2 with GitLab pipelines — cut deployment time roughly 40% and stopped the 2am surprises.
  • Tuned Nginx and load balancing to hold 99.9% uptime through traffic spikes; reworked database architecture for ~30% faster queries at 2× concurrency.
  • Wrote Jest suites for the Node services and mentored juniors until code review stopped being a bottleneck.
Jul 2022 → Apr 2023
Skugal Technologies
SDE I
  • Built a 3D robot-simulation UI in Three.js + Angular for Orangewood Labs — real arm movements mirrored in the browser, used in client demos.
  • Shipped auth and money: OAuth 2.0 + JWT, Stripe payments, automated invoicing on Angular and Firebase.
  • Lambda functions moving Kinesis video-stream events into Redshift for near-real-time analytics at 100k+ concurrent users.
  • A reactive analytics dashboard with user-configurable charts and a custom injectable tracking script.
Jan 2022 → Jul 2022
Perceived Design
Full Stack Intern
  • Two MEAN-stack SPAs, 15+ responsive screens and the APIs behind them.
  • A 3D environment from scratch with joystick controls — the start of the Three.js habit.
  • Real-time multi-user collaboration over Socket.io.

School & other paperwork

2018 → 2022B.Tech, Computer Science — Lovely Professional University, Punjab · CGPA 7.56/10 awardsApplause Award (ramping up fast and shipping anyway) · Outstanding Performance (depth on business-critical work) based inGurugram, Haryana · IST (UTC+5:30)
android · side project · still cooking

Arrows

One rule: tap an arrow and it slides off the board — but only if nothing blocks its path. Clear all of them and you win. I built it because the version I was playing had more ad breaks than puzzles.

role
Everything
platform
Android
budget
₹0
Arrows level 01
8 arrows left, 0 ads shown

Why I started

I was hooked on a little arrow puzzle game until it started showing me an ad between every single level. Two seconds of thinking, thirty seconds of a man shouting about mobile legends. I closed it and thought: this is a solvable board and a few rules. I can just build this.

So it's not a physics engine or a 60fps showpiece — it's an algorithm. Grid, arrow directions, path checks, solvability. The fun is entirely in the rules, which suits me fine.

The whole brief: same game, zero ads, works on a plane, never asks me to rate it.

Challenges

01
Deciding when an arrow is allowed to leave

Every arrow has a length and a direction, and it only slides out if its whole path to the edge is empty. Sounds like one if-statement. It was a week of edge cases involving arrows that overlap the path of the one you just tapped.

02
The bent ones ruined everything

L-shaped arrows turn a corner, so "path" becomes two segments and the corner cell belongs to both. My first version let them slide straight through walls, which players enjoyed more than they should have.

03
Random boards are usually unsolvable

Scatter arrows on a grid and you mostly get deadlocks. So I wrote a solver first and only ship a board if it can be cleared — and I rank difficulty by how many moves the solver is forced into, not by arrow count. Six arrows can be nastier than twenty.

04
Big boards on a small phone

Later levels don't fit on screen, so there's zoom, pan and a FIT button — and once you can zoom out, a thin arrow becomes a 9px tap target. Hit areas are now much fatter than the arrows you actually see, plus three hearts so a fat-finger tap costs you something but not the level.

05
The solver can't tell me what's fun

It happily certifies boards that are solvable and joyless. My friends' review was "it's nice," which is worth nothing, so I started watching them play in silence instead — that's how I learned people always try the bent arrows first and expect them to turn the other way.

Screens, taped in

straight off the phone
Arrows home screen
the streak does the motivating
Arrows level board
tap one, it leaves. if it can.

What it taught me

The rules are the product

No art, no engine, no shaders. A solver and a good board generator carry the entire game.

Spite is a valid roadmap

"I can build this without the ads" got further than any of my tidier project ideas ever have.

android · side project · in development

Expense tracker

Every expense app I tried wanted my bank login, a subscription, and my attention. I wanted a text field and a number. So: offline-first, no account, entry in under three seconds.

SnapSpend entry screen
three taps, done

Why I started

I tracked my spending for exactly eleven days before every app I tried got in the way — onboarding flows, categories I didn't ask for, a paywall on the graph. The friction wasn't the money, it was the app.

Also, I'd never shipped anything mobile. Building the thing I'd personally use every day seemed like the fastest way to find out whether I'd stick with it. I did.

Challenges

01
The web habits didn't transfer

No server to be the source of truth. Local storage, migrations, and the app being killed mid-write are now my problem. Humbling.

02
I designed for me, then everyone, then me again

Added budgets, tags, recurring bills, currency conversion. Deleted three of the four. The good version is the small one.

03
Charts are easy, honesty is hard

Rendering the monthly breakdown took a weekend. Looking at the monthly breakdown took considerably longer.

Screens, taped in

SnapSpend · v2
SnapSpend splash
one number a day
SnapSpend log list
the receipts
SnapSpend calendar
21 of 26 under limit
SnapSpend weekly overview
Friday, over limit. rude.

Where it's going

Next

Optional encrypted export, a home-screen widget, and a settings screen with exactly four switches.

Not doing

Accounts, bank sync, an AI assistant that tells me to cook at home.

Deloitte USI · 2025 → now · in production

Graph RAG for clinical corpora

An LLM retrieval platform where the answers have to be right. Neo4j graph traversal on top of hybrid vector + keyword search, over documents that were never designed to be parsed by anyone.

vector keyword graph
fig. — retrieval path, simplified for the internet

The problem

Plain vector search is great at "roughly about this" and terrible at clinical terminology, where two near-identical strings mean different things and one wrong retrieval is worse than no answer. Meanwhile the source material is PDFs: tables, footnotes, headers that lie.

What I built

01
Ingestion that respects structure

Docling parses the PDFs into something with hierarchy; chunking follows the document, not a character count. Most of the quality lives here, which nobody wants to hear.

02
A graph schema you can argue with

Entities and relationships in Neo4j, so retrieval can walk from a term to the things actually connected to it instead of hoping the embedding noticed.

03
Hybrid retrieval, then the model

Vector for semantics, keyword for exact terminology, graph for context. LangChain orchestrates; the LLM gets the last word and very little room to invent one.

04
Ownership, which is a technical feature

Architecture calls, code reviews, and explaining chunking strategy for the fortieth time. The system stays coherent because someone is annoying about it.

Outcome

Live in production

Used on real clinical queries, not a benchmark. Two internal awards came out of this work.

What I'd change

Build the evaluation harness first. We built it second and spent a month arguing from vibes.

Deloitte USI · 2025 · shipped solo

An agent that makes phone calls

A virtual agent that dials people, verifies their data, and hangs up without anyone filing a complaint. Designed and delivered end to end under a hard constraint: GCP only, no exceptions, no favourite tools.

The constraint

"Build it on GCP" is a sentence with consequences. Dialogflow CX for the conversation, Vertex AI Agent Builder (ADK) for the agent logic, Cloud Run for everything that needed to be code, Twilio for the actual telephone. No escaping to a familiar stack when something got awkward.

Honestly? Good for me. Constraints are the fastest way to actually learn a platform instead of skimming it.

What was hard

01
People don't answer in JSON

"Yeah, no, that's the old one" is a complete sentence to a human and a crisis for a state machine. Most of the design work was the messy middle.

02
Latency you can hear

On a phone call, a second of silence sounds broken. Every round trip had to be budgeted like it was expensive, because it was.

03
Failing politely

When the agent doesn't understand twice, it stops guessing and hands off. An agent that bluffs on the phone is a support ticket with a voice.

Stack

Dialogflow CX Vertex AI ADK Cloud Run Twilio Node.js
Skugal · Orangewood Labs · 2022–23

Robot arms, simulated in a browser

A Three.js interface inside an Angular app that renders a robot arm and simulates its movements — so a sales engineer could demo the hardware without shipping the hardware.

Robot arm simulation
no robots were harmed

Why it existed

Robot arms are heavy, expensive, and reluctant to fit in a suitcase. A browser twin meant onboarding a client could start on a call instead of a delivery date. I had not written a line of Three.js before this project, which felt relevant at the time and doesn't now.

The actual thing

six joints, one browser tab
Orangewood robot arm simulation UI
drag a slider, the arm moves. record it, save it, play it back.

Challenges

01
2022. No ChatGPT. Just Stack Overflow and hope.

There was nothing to ask. I read the Three.js docs, half a robotics PDF, and about four hundred forum threads from 2016, then wrote the joint chain myself. Took weeks. Would take a weekend now — but I'd know less.

02
Six sliders, one arm, no illegal poses

Base, shoulder, elbow, three wrists — each one moves everything above it. Chain the transforms wrong and the arm folds through its own base, which reads less like a demo and more like a warning.

03
Angular and a render loop are not natural allies

Change detection wants to run; the renderer wants to be left alone. Keeping the scene outside Angular's zone was the fix and also the lesson.

04
Accuracy is a demo feature

A simulation that moves almost like the real arm is worse than none — clients notice, and then they stop trusting the rest of the demo.

05
Everything else in the same year

Same role, same twelve months: OAuth + JWT auth, Stripe payments and invoicing, a Kinesis→Redshift Lambda pipeline, and a configurable analytics dashboard. Generalist training wheels came off here.

A generalist, on purpose

I started in 2022 writing screens for an internship and somehow ended up owning a graph database in a medical domain. In between: 3D robot simulations, payment flows, deploy pipelines, a Lambda that hauls video events into a warehouse, and an analytics dashboard people could reconfigure themselves.

None of that was planned. Each one was "we need someone to figure this out" and nobody else raised a hand fast enough. That's more or less my whole career strategy, and I'm at peace with it.

These days: applied LLM work at Deloitte USI during the week, Android at night, because apparently rest is for people with fewer half-finished repos.

Harsh Singh Raghuvanshi
same photo as page 1

Things I didn't know how to do

20223D in a browser. Learned Three.js because a client wanted a robot arm and buying one for the office wasn't an option.
2023Infrastructure. Nobody owned the deploys, so I did. Nginx, load balancing, and a healthy fear of Friday releases.
2025LLM systems. Discovered that "just add RAG" is four months of chunking decisions in a trench coat.
2026Android. Currently finding out that mobile users are unforgiving and my old phone is a great test device.

Opinions I hold

  • ·A demo that only works on your machine is a screenshot.
  • ·Most "AI problems" are retrieval problems wearing a hat.
  • ·If the deploy is scary, do it more often, not less.

Off the clock

Building the two Android apps, breaking them, rebuilding them. Occasionally reading a paper and pretending I'll implement it. Based in Gurugram; from Lucknow, which I will bring up unprompted.

no form.
forms are
for cowards

Say hi.
Seriously, say hi.

I check my inbox far more often than is healthy. There is a non-zero chance I reply before you've closed the tab.

the one that actually works
harshsinghhsr23@gmail.com
↑ tap it. it opens your mail app. that's the whole trick.
GitHub
commit messages get less polite after 11pm
LinkedIn
where I pretend to enjoy the word "synergy"
Phone
bold of you. text first like a normal person

How fast I reply, honestly

longer bar = faster reply
You call me directly what option do I have left?
You text me whenever I look up
You email me same day
Yes please
  • A gnarly thing that needs one stubborn person
  • Your search keeps returning confident nonsense
  • You beat level 12 of Arrows and want to brag
  • Genuinely good samosa recommendations, Gurugram
Hard pass
  • "Quick 15-min sync" that is neither quick nor 15
  • "Pre-revenue but post-vision" equity only
  • "Hi dear, kindly revert" at 4:41am
  • Buying me an iOS dev account (okay fine, allowed)

And if you don't say hi

The moment you close this tab without emailing me, a webhook fires. It hits a Lambda. The Lambda provisions one (1) small curse in your name. Cold start, so you get a few seconds' head start.

Nothing dramatic. Every recruiter you message from then on opens it, reads it all the way through, thinks huh, genuinely strong profile — and leaves you on seen. No reply. No rejection. Just the two blue ticks and a long, quiet life.

It's idempotent, though. Close the tab a hundred times, you still only get the one curse. I'm petty, not unprofessional.
you close the tab webhook fires λ provisions curse left on seen ✓✓
fig. 2 — the retention pipeline
Gurugram, IST · UTC+5:30 · awake more than advised
worst case, I say no. best case, we build something. →
harshsinghhsr23@gmail.com
github linkedin say hi