The site you are on right now: a hand-built, interactive developer portfolio with a living sky, a WebGL cursor, synthesized sound, a real map and a smooth light and dark theme.
A portfolio should show how someone builds, not just say it. This site is my own product: every page, animation, sound and interaction is built by hand with React, with no UI kit and no CSS framework. It holds my story, projects, experience, skills and contact details, and the way it looks, moves and sounds is itself a demonstration of the work I do. It is the main project on this page because you are using it right now.
The challenge
Most developer portfolios look alike. I wanted one that is memorable and personal, yet still fast, accessible and easy to navigate. That meant combining heavy ideas such as WebGL fluid, canvas art, 3D cards, real maps and audio without hurting performance, losing keyboard access or breaking on mobile.
How it works
1
Arrive
A layered SVG sky with drifting clouds, a generative rainbow and a clickable mascot welcomes the visitor.
2
Navigate
A gooey navigation pill, a Ctrl or Cmd + K search and a mobile menu reach every page quickly.
3
Explore
The About page is a grid of interactive cards: a map, a drum pad, a flag, a chai counter and more.
4
Learn
Projects open into in-depth case studies; skills flip like cards to reveal how I use each tool.
5
Trust
Experience, education and certifications sit on a timeline with real logos.
6
Connect
The contact page offers email, links, a downloadable resume and a pre-filled message form.
Signature features
Splash cursor
A WebGL2 fluid simulation with bloom and low, medium and high quality tiers follows the pointer.
Generative rainbow
A canvas of dashes on concentric arcs, steered by the mouse, with a configurator panel.
Gooey navigation
A liquid-style pill with themed palettes for dark and light mode.
Masked headings
Page titles use a GSAP-driven spotlight mask over textured fills.
Tilted cards
Skill cards tilt in 3D with glare and shadow, then flip to reveal a note on the back.
Real map
A MapLibre map on CARTO tiles draws a line from Ahmedabad to the visitor's location.
Synthesized sound
Pops, chimes, whooshes and four drum sounds generated live with the Web Audio API.
Themed everything
A light and dark theme that animates smoothly across every color at once.
What I built
A hash-based router written from scratch in a small map of pages, with the right nav item highlighted even on case-study pages
A design-token system in CSS custom properties, so colors, spacing and type stay consistent across 23 stylesheets
A bento-style About page of interactive cards, including a playable drum pad on the Q, W, E and R keys, a rippling India flag, a visitor map and a chai counter
Layered SVG cloudscape, mascot with confetti on click, and a generative canvas rainbow ported from an interaction I admire
Projects page with showcase cards, plus in-depth case studies with stats, flow diagrams, architecture cards and problem-and-solution blocks
Skills page with category tabs and 3D flip cards, plus a command-style search modal for jumping anywhere
Experience page with a timeline, education logos and certification cards, and a contact page with a resume download
Performance and accessibility
Sounds are generated with oscillators, so there are no audio files to download, and sound can be switched off and the choice is remembered.
The audio context is created only after a user action, which follows browser autoplay rules.
The WebGL cursor is built with low, medium and high quality tiers, so the cost of the simulation can be tuned.
Motion-heavy components check for the reduced-motion preference, and 130+ aria and role attributes support screen readers.
The map library loads as its own chunk and the visitor lookup uses an abort controller, so a slow network never blocks the page.
Theme and sound choices persist in local storage, and the first theme follows the visitor's system preference.
The layout adapts from large screens down to phones, with a dedicated mobile menu.
Solution. Every color token is registered with @property so the browser can tween them, animating gradients, fills and borders together.
Audio without audio files
Problem. Sound effects add weight and licensing questions.
Solution. The Web Audio API synthesizes each sound from oscillators and gain envelopes, with a global on and off switch.
A real map with no API key
Problem. Map services often need paid keys and tokens.
Solution. MapLibre GL with free CARTO basemaps, a theme-aware style and a simple distance calculation, with a "you are right here" case for nearby visitors.
Heavy visuals on weak devices
Problem. Fluid simulation and canvas art can drop frames.
Solution. Quality tiers for the simulation, passive scroll listeners and cleanup of every listener on unmount keep it smooth.
Routing without a library
Problem. A tiny site does not need a full router.
Solution. A hash map resolves pages, falls back to About, scrolls to the top and keeps the nav highlight correct.
A contact form with no backend
Problem. Running a server only for one form is overkill.
Solution. The form builds a pre-filled mailto message, and the resume is a direct PDF download.
Architecture
Framework
React 19 with Vite 8 and the React plugin, using functional components and hooks.
Styling
Hand-written CSS with design tokens, no framework, and a dedicated theme-transition layer.
Animation
GSAP, Framer Motion, CSS keyframes and canvas for different jobs.
Graphics
WebGL2 shaders, 2D canvas, inline SVG and canvas-confetti.
Audio
A small SoundController class over the Web Audio API, wrapped in a React context.
Maps
MapLibre GL with CARTO tiles and an IP-based visitor lookup.
State
Theme and sound contexts with local storage persistence.
Tooling
Oxlint for linting, Vite for fast builds, and Git for version control.
Route
Page
/
Story, interactive cards, map and drum pad
/projects
Showcase cards and in-depth case studies
/experience
Timeline, education and certifications
/skills
Flip cards grouped by category
/contact
Email, links, resume and message form
Outcome
The portfolio is a complete, working product that I designed, built and maintain alone. It shows the full range of my front-end work: architecture, design systems, animation, graphics, audio, accessibility and performance, all in one codebase of 14,000+ lines. Most importantly it is the proof behind everything else on this site.
What I learned
Delight and performance can coexist when every effect has a budget
Design tokens make a big visual change a small code change
Accessibility and reduced motion are part of the design, not a patch
Studying great interactions, then rebuilding them, is the fastest way to learn
Several interactions, such as the sound design, the rainbow configurator and the smooth theme switch, are rebuilds inspired by joshwcomeau.com, written in my own code as a way to learn the techniques.
What is next
Add a live demo link and analytics
Move case-study content into data files and add a blog
Add automated accessibility and performance checks