A dark, futuristic, 3D interactive portfolio built with React, Vite, Three.js
(React Three Fiber + drei), GSAP, and Tailwind CSS.
npm install
npm run dev
Open the URL Vite prints (usually http://localhost:5173).
To build for production / deploy:
npm run build
npm run preview # preview the production build locally
The dist/ folder is what you deploy (Vercel, Netlify, GitHub Pages, etc).
src/data/projects.jsEach object in the array is one project card + its modal detail view.
Edit title, description, problem, solution, features, tech,github, demo. Drop real project screenshots into public/projects/
and point image at them, e.g. image: "/projects/my-shot.jpg" — if an
image is missing, the card automatically falls back to a styled
placeholder, so nothing breaks while you're still adding assets.
src/data/posters.jsSame idea — add/remove entries, drop poster images into public/posters/,
and reference them as /posters/your-file.jpg.
src/data/techstack.jsAdd, remove or re-group technologies under Development / Design / Hardware.
src/components/About.jsxThe paragraph under "A developer with a creative side" — edit directly.
src/components/Hero.jsx"KRITANSH", the role line, and the supporting sentence are plain text
near the top of the component — edit directly.
src/components/Contact.jsxmailto: link in the links array near the top of the file.href values in thelinks array for your real profile URLs.public/resume/resume.pdf (create the filepublic/favicon.svgReplace with your own icon (keep the filename, or update the <link> inindex.html if you rename it).
src/
├── components/
│ ├── Navbar.jsx floating glass nav + mobile menu
│ ├── Hero.jsx headline + 3D hero scene
│ ├── About.jsx bio + floating 3D chip
│ ├── TechStack.jsx tilt badges by category
│ ├── Projects.jsx project grid + detail modal
│ ├── ProjectCard.jsx single 3D-tilt project card
│ ├── DesignGallery.jsx draggable 3D poster carousel + lightbox
│ ├── PosterCard.jsx single poster panel
│ ├── CreativeSkills.jsx animated statement + skill pills
│ ├── Contact.jsx links + footer
│ ├── CustomCursor.jsx desktop-only custom cursor
│ ├── Scene.jsx shared 3D primitives (shapes, particles)
│ ├── icons.jsx GitHub/LinkedIn/Instagram glyphs
│ └── scenes/ lazy-loaded Three.js scenes (code-split)
├── data/
│ ├── projects.js
│ ├── posters.js
│ └── techstack.js
├── useMediaFlags.js mobile + prefers-reduced-motion detection
├── App.jsx
├── main.jsx
└── index.css design tokens (colors, fonts, utility classes)
public/
├── projects/ put project screenshots here
├── posters/ put poster/design images here
└── resume/ put resume.pdf here
src/components/scenes/*.jsx) areReact.lazy + Suspense, so the page shell (text, nav,useMediaFlags).prefers-reduced-motion turned on.