This project is a high-performance, cinematic 3D portfolio for Ashwin T E, a Robotics Enthusiast and Embedded Systems Developer. It is built as a "Robotic Command Center" using modern web technologies to simulate a technical, HUD-based interface.
- Purpose: Showcasing Ashwin's technical skills, professional experience, and robotics projects through an interactive 3D experience.
- Main Technologies:
- Framework: Next.js 16 (App Router, Turbopack)
- 3D Engine: Three.js via @react-three/fiber and @react-three/drei.
- Animations: GSAP for scroll-synchronized camera movement and Framer Motion for HUD UI transitions.
- Styling: Tailwind CSS v4 with a custom Cyberpunk/HUD glass-panel aesthetic.
- Icons: Lucide React.
- Architecture:
ExperienceComponent: Manages the fixed 3D background, including theHeroModel(robotic core),PointCloud(VSLAM visualization), andCameraRig.HUDComponent: A fixed overlay that displays resume content in scroll-based "chapters".- Camera Rig: Synchronized with page scroll using
gsap/ScrollTriggerto navigate the 3D scene.
To start the development server with Hot Module Replacement:
npm run devTo create an optimized production build (static export):
npm run buildThis command runs next build which is configured for static output (output: "export") in next.config.ts. The final assets will be located in the out/ directory.
To run the ESLint check:
npm run lint- Seeded Randomness: When generating random data (like point clouds), use a seeded pseudo-random generator (found in
src/components/PointCloud.tsx) to ensure deterministic results during React hydration. - Resource Cleanup: Always use
useEffectcleanup functions to kill GSAP timelines and ScrollTriggers (seesrc/components/CameraRig.tsx). - Performance Optimization: Use
useMemofor heavy geometry/attribute generation anduseReffor animation state to avoid unnecessary re-renders.
- HUD Panels: Use the
.glass-panelutility class (defined inglobals.css) for consistent backdrop blur and semi-transparent backgrounds. - Colors:
- Primary Accent:
#00ffcc(Teal/Cyber) - Secondary Accent:
#0066ff(Blue/Tech)
- Primary Accent:
- Icons: Always prefer
lucide-reactfor consistent tech-themed iconography.
- TypeScript: Strict typing is enabled. Avoid
anyand prefer proper Three.js types (e.g.,THREE.Vector3,THREE.Mesh). - React: Functional components with hooks. Use
useEffectwith appropriate dependency arrays. Note:useLayoutEffectshould be avoided for hydration-sensitive state (preferuseEffectwith amountedcheck). - Security: For external links, always include
target="_blank"andrel="noopener noreferrer".