A professional React-based portfolio website featuring immersive scroll-based animations and interactions. Built with modern technologies and architectural best practices.
- Smooth Scroll Animations: Dynamic scene transitions based on scroll progress
- Custom Cursor: Interactive cursor with pupil tracking
- Responsive Design: Mobile-first approach with breakpoints for all devices
- Film Grain Effect: Authentic analog texture overlay
- Performance Optimized: Fast load times with minimal bundle size
- Accessible: WCAG-compliant markup and semantic HTML
- Type-Safe: Full TypeScript support throughout
- React 18 - UI framework
- TypeScript - Type safety
- Vite - Lightning-fast build tool
- CSS3 - Modern styling with CSS variables
- Responsive Design - Mobile-first approach
- Node.js 18+ and npm
- Git
# Clone the repository
git clone <repository-url>
cd hexmoc
# Install dependencies
npm install
# Start development server
npm run devThe app will open at http://localhost:3000
# Build the project
npm run build
# Preview production build
npm run previewhexmoc/
├── src/
│ ├── components/
│ │ ├── Canvas/
│ │ │ ├── Canvas.tsx # Main scene container
│ │ │ ├── Canvas.css # Canvas styling
│ │ │ └── Scenes/ # Individual scene components
│ │ │ ├── IntroScene.tsx
│ │ │ ├── GreetingScene.tsx
│ │ │ ├── NameScene.tsx
│ │ │ ├── DesignerScene.tsx
│ │ │ ├── ThoughtsScene.tsx
│ │ │ ├── BengaluruScene.tsx
│ │ │ ├── WorkScene.tsx
│ │ │ ├── ReflectionScene.tsx
│ │ │ └── EndScene.tsx
│ │ ├── Borders/ # Frame border component
│ │ ├── Noise/ # Film grain overlay
│ │ ├── Curtain/ # Opening curtain animation
│ │ ├── Cursor/ # Custom cursor component
│ │ ├── SocialLinks/ # Social media links
│ │ ├── ScrollIndicator/ # Mobile scroll hint
│ │ └── Typography/ # Typography styles
│ ├── hooks/
│ │ ├── useScroll.ts # Scroll progress tracking
│ │ └── useCursor.ts # Cursor position and tracking
│ ├── config/
│ │ └── sceneConfig.ts # Scene timing and work items
│ ├── types/
│ │ └── index.ts # TypeScript type definitions
│ ├── styles/
│ │ └── globals.css # Global styles and CSS variables
│ ├── App.tsx # Root component
│ └── index.tsx # React entry point
├── public/
│ └── index.html # HTML template
├── package.json
├── tsconfig.json
├── vite.config.ts
└── README.md
- Background:
#0d0d0d(Deep Black) - Text:
#ffffff(White) - Accent Red:
#b73e41(Primary accent) - Accent Amber:
#a76c03(Secondary accent) - Surface:
#111111(Dark surface)
- Headings: Space Grotesk (Bold)
- Body/Labels: Exposit (Bold)
Uses viewport-relative units (vw) for responsive scaling with CSS clamp() for optimal sizing across all devices.
Edit scene components in src/components/Canvas/Scenes/ to modify content:
// Example: Edit IntroScene.tsx
<div className="t-inside-the-mind">Inside the Mind of</div>
<div className="t-name-big">HIDAS</div>Modify scene configuration in src/config/sceneConfig.ts:
{ id: 'scene-intro', inStart: -10, inEnd: -1, outStart: 5, outEnd: 8 }inStart/inEnd: Fade-in progress percentageoutStart/outEnd: Fade-out progress percentage
Update CSS variables in src/styles/globals.css:
:root {
--color-accent-red: #b73e41;
--color-accent-amber: #a76c03;
}- Mobile: < 600px
- Tablet: 600px - 992px
- Desktop: > 992px
- Code Splitting: Components are tree-shakable
- CSS Optimization: Uses CSS variables for minimal file size
- Animation Performance: Uses
transformandopacityfor GPU acceleration - Image Optimization: External resources cached by browsers
When contributing to this project:
- Maintain the component structure
- Keep styles modular and scoped to components
- Use TypeScript for type safety
- Test responsive design across breakpoints
This project is licensed under the MIT License - see the LICENSE file for details.
Built as a modern React conversion of the original HTML portfolio with enhanced architecture, performance, and maintainability.
Made with ❤️ by Hidas K C