A modern, performance-optimized portfolio website built with React and TypeScript. Features a clean terminal-inspired design with smooth animations and a fully responsive layout.
This portfolio showcases professional work, skills, and projects with an emphasis on performance and user experience. Built with modern web technologies and best practices.
Status: ✅ Production-ready with enterprise-level code quality, comprehensive testing, and full accessibility support.
- Framework: React 19 with TypeScript
- Build Tool: Vite 7
- Styling: Tailwind CSS
- Animations: Framer Motion, GSAP with ScrollTrigger
- Smooth Scrolling: Lenis
- Icons: Lucide React
- Testing: Vitest, React Testing Library
- ✅ Terminal-inspired UI with macOS-style window headers
- ✅ Smooth scroll animations and transitions (GSAP + Framer Motion)
- ✅ Fully responsive design (mobile, tablet, desktop)
- ✅ Performance optimized with lazy loading and code splitting
- ✅ Accessible components with ARIA labels and screen reader support
- ✅ SEO-friendly structure with sitemap and robots.txt
- ✅ Background music with controls
- ✅ Project showcase with detailed information
- ✅ Service Worker for offline support
- ✅ Comprehensive test coverage (70%+)
- ✅ Security headers and best practices
- Node.js 18 or higher
- npm or yarn package manager
# Clone the repository
git clone https://github.com/ItsOrv/Orv-Portfolio-Site.git
cd Orv-Portfolio-Site
# Install dependencies
npm install
# Start development server
npm run devThe application will be available at http://localhost:5173
npm run buildThe production build will be generated in the dist directory.
src/
├── components/ # React components
│ ├── AboutSection.tsx
│ ├── SkillsSection.tsx
│ ├── ProjectsSection.tsx
│ ├── ContactSection.tsx
│ ├── BackgroundMusic.tsx
│ ├── ErrorBoundary.tsx
│ ├── MobileMenu.tsx
│ ├── TerminalHeader.tsx # Reusable terminal header
│ ├── SectionWrapper.tsx # Section wrapper component
│ ├── LoadingSkeleton.tsx # Loading states
│ ├── LazyImage.tsx # Lazy-loaded images
│ ├── StructuredData.tsx # SEO structured data
│ ├── A11yAnnouncer.tsx # Accessibility announcements
│ ├── ErrorFallback.tsx # Error UI component
│ └── __tests__/ # Component tests
├── hooks/ # Custom React hooks
│ ├── useLenisScroll.ts
│ ├── useGSAPAnimations.ts
│ ├── useMobileOverscroll.ts
│ ├── useFocusTrap.ts
│ └── __tests__/ # Hook tests
├── utils/ # Utility functions
│ ├── a11yAnnounce.ts
│ ├── errorHandler.ts
│ └── registerServiceWorker.ts
├── data/
│ └── projects/ # Project data files
├── types/ # TypeScript type definitions
├── test/ # Test setup and utilities
├── content.ts # Centralized content configuration
├── App.tsx # Main application component
└── main.tsx # Application entry point
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production build locallynpm run lint- Run ESLintnpm test- Run tests in watch modenpm run test:run- Run tests oncenpm run test:coverage- Run tests with coverage reportnpm run deploy- Deploy to GitHub Pages
All content is managed through src/content.ts. Update the following:
- Profile information and bio
- Skills and expertise levels
- Project details and descriptions
- Contact information and social links
- Section headings and terminal commands
Project data is organized in src/data/projects/ with individual TypeScript files for each project.
The project is configured for GitHub Pages deployment:
npm run deployThis will build the project and deploy it to the gh-pages branch.
The project can be deployed to any static hosting service:
- Build the project:
npm run build - Upload the
distdirectory to your hosting service - Configure your server to serve
index.htmlfor all routes (SPA routing)
- Code splitting with lazy-loaded components
- Optimized bundle size with tree shaking
- Efficient animations with GSAP
- Smooth scrolling with Lenis
- Mobile-optimized with reduced animations on low-end devices
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- TypeScript strict mode enabled
- ESLint for code quality
- Prettier for code formatting (via VS Code settings)
Tests are written using Vitest and React Testing Library. Run tests with:
npm testAdditional documentation is available:
- TODO.md - Project roadmap and future enhancements
- OG_IMAGE_INSTRUCTIONS.md - Guide for creating Open Graph image
This project is private and proprietary.
- Email: poriya.saw@gmail.com
- GitHub: @ItsOrv
- LinkedIn: ItsOrv
- Telegram: @Pouria_Orv
Built with React, TypeScript, and modern web technologies.