Fullstack Developer & Classical Vocalist · Bengaluru
psst — try typing your name on the keyboard 🤫

Things I've Built
From enterprise travel tech to personal experiments
LLD Playground Hub
React and Vite visualiser for my Java LLD implementations. Walk through Spotify, KV-Store, and Distributed Message Queue designs with pattern maps, execution flows, and an AI chat grounded in the actual code.
LinkedIn Post Generator
Generates LinkedIn posts from a topic, tone, and length selection. Backed by a Groq LLM via FastAPI, with a focused React UI built for quick drafting and copy-paste output.
Interactive Developer Portfolio
This site. Next.js 15, Three.js, Framer Motion. 3D instrument canvas, live constellation background, AI chat over my LLD code, Spotify collab matcher, and light/dark theming.
Policy Compliance Agent
Internal tool at Serko. Reads corporate travel policies written in plain English and filters live flight results against them. Java and Spring Boot backend, LLM integration for policy parsing.
By The Numbers
A snapshot of my journey as a software engineer
Technical Focus Areas
My Work Experience
The places that shaped how I build software
Software Developer 2
Serko
Building scalable microservices and cloud-native systems for travel & expense management. Designing booking and payment workflows on GCP, driving CI/CD pipelines, observability, and system reliability across cross-functional teams.
Software Developer
Sabre GetThere
Integrated NDC-based airline content alongside traditional ATPCO fares for corporate travelers. Led PCI compliance initiatives and improved fare visibility and amenities across the GetThere booking platform.
Software Developer Intern
Sabre GetThere
Contributed to backend feature development and bug fixes on the GetThere platform. Built strong foundations in Java, microservices, and agile delivery while gaining exposure to enterprise travel tech at scale.
Beyond The Code
The disciplines that keep me sharp — and human
Hindustani Classical Singing
Trained in Khayal — the meditative North Indian classical vocal tradition. Music for me is what debugging is to code: a deeply focused pursuit of something precise and beautiful.
Exploring Strings & Ragas
Self-taught guitarist experimenting at the intersection of Western chord progressions and Indian classical ragas. The same systematic thinking that makes a good engineer makes a disciplined musician.
Want to Collaborate?
Tell me your music taste — I'll match it against my real Spotify listening history.
1,474 hours of Spotify, Khayal training, and guitar experiments. My taste is all over the place — let's see if yours overlaps.
3 quick questions · matched against real Spotify data
“The same discipline that holds a raga together holds a system together — precision, patience, and the courage to improvise.”
LLD Playground
My actual Java LLD implementations. Ask questions, trace execution flows, and dig into design decisions. All backed by real code.
Music Player (Spotify LLD)
Façade + Strategy + Factory + Adapter
Quick questions
package app;
import Core.AudioEngine;
import Strategies.IPlayStrategy;
import device.IAudioOutputDevice;
import enums.OutputDeviceType;
import enums.PlayStrategyType;
import managers.OutputDeviceManager;
import managers.PlaylistManager;
import managers.StrategyManager;
import models.Song;
import models.Playlist;
public class MusicPlayerFacade {
private static MusicPlayerFacade instance = null;
private AudioEngine audioEngine;
private IPlayStrategy currentPlayStrategy;
private IAudioOutputDevice currentOutputDevice;
private StrategyManager strategyManager;
private Playlist currentPlaylist;
private MusicPlayerFacade() {
audioEngine = new AudioEngine();
}
public static MusicPlayerFacade getInstance() {
if (instance == null) {
instance = new MusicPlayerFacade();
}
return instance;
}
public void connectDevice(OutputDeviceType deviceType) {
OutputDeviceManager.getInstance().connect(deviceType);
currentOutputDevice = OutputDeviceManager.getInstance().getCurrentOutputDevice();
}
public void setStrategy(PlayStrategyType strategyType) {
strategyManager = StrategyManager.getInstance();
currentPlayStrategy = strategyManager.getStrategy(strategyType);
}
public void loadPlayList(String playlistName) {
currentPlaylist = PlaylistManager.getInstance().getPlaylist(playlistName);
if (currentPlaylist == null) {
System.out.println("Playlist not found: " + playlistName);
}
currentPlayStrategy.setPlayList(currentPlaylist);
}
public void playPlaylist() {
if (currentPlaylist == null) {
System.out.println("No playlist loaded.");
return;
}
while (currentPlayStrategy.hasNext()) {
Song songToPlay = currentPlayStrategy.next();
playSong(songToPlay);
}
}
public void playSong(Song song) {
if (currentOutputDevice == null) {
System.out.println("No output device connected.");
return;
}
audioEngine.play(currentOutputDevice, song);
}
public void pauseSong(Song song) {
if (audioEngine.getCurrentSongTitle().equals(song.getName())) {
audioEngine.pause();
} else {
System.out.println("The song is not currently playing.");
}
}
}Real Java implementations · OOP · Design Patterns · System Design