A modern, high-performance personal portfolio and dual-persona website built with React 19, TypeScript, Vite, Tailwind CSS v4, and Framer Motion.
The platform features an interactive persona switcher spotlighting two professional specializations:
- Tech Persona: Software Engineer, Frontend Web Developer, and Enterprise SAP ABAP Developer.
- Creative Persona: Sports Photographer, Graphic Designer, and Basketball Media Specialist.
- 🌓 Dual-Persona Architecture: Seamlessly toggle between Tech and Creative identities with fluid Framer Motion layout transitions.
- 🎨 Modern Design System: Built with Tailwind CSS v4, custom glassmorphism effects, curated typography (
Outfit+DM Sans), and dark/light theme support. - 📱 Fully Responsive: Fluid layouts designed from 320px mobile screens to ultra-wide desktop monitors, featuring an accessible off-canvas mobile drawer.
- ⚡ Ultra-Fast Performance: Zero runtime CDNs, tree-shakable SVG icons (Lucide React & React Icons), optimized asset handling, and instant Vite HMR.
- ♿ Accessibility First: Semantic HTML5 landmarks, ARIA tablist/tab semantics, focus-visible states, keyboard ESC navigation, and
prefers-reduced-motioncompliance. - 🔍 SEO & Social Optimization: Comprehensive Open Graph cards, Twitter metadata, Favicon icons, and Schema.org JSON-LD Person structured data.
- 🛡️ Type-Safe Data Architecture: Centralized and strongly-typed data layer (
src/data/) with zero fragile DOM queries or stringified links.
| Layer | Technology |
|---|---|
| Framework | React 19 (Strict Mode) |
| Build Tool & Bundler | Vite 6 |
| Language | TypeScript 5.7 |
| Styling | Tailwind CSS v4 with CSS Variables |
| Animations | Framer Motion (Spring-based physics) |
| Icons | Lucide React + React Icons (Fa6) |
| Fonts | Google Fonts (Outfit & DM Sans) |
MyWebsite/
├── public/
│ ├── avatar.png # Profile photograph
│ ├── favicon.ico # Site favicon
│ ├── preview.png # Open Graph preview image
│ └── documents/ # CV / Resume documents
├── src/
│ ├── assets/ # Bundled visual assets
│ ├── components/
│ │ ├── common/ # Reusable UI atoms (Button, Card, Badge, ThemeToggle, etc.)
│ │ ├── layout/ # Layout shell (Header, Sidebar, MobileDrawer, Footer)
│ │ └── sections/
│ │ ├── tech/ # Tech persona sections (Hero, Skills, Projects, Experience, Education, Contact)
│ │ └── creative/ # Creative persona sections (Hero, Work, Photography, Achievements, Tools, Contact)
│ ├── data/ # Strongly typed data modules
│ │ ├── profile.ts # Core profile and social links
│ │ ├── tech.ts # Technical bio, skills, experience, education
│ │ ├── creative.ts # Creative bio, achievements, tools, gallery
│ │ └── projects.ts # Featured engineering and web projects
│ ├── hooks/ # Custom hooks (useTheme, useActiveSection)
│ ├── types/ # TypeScript domain interfaces
│ ├── utils/ # Class merging utilities (clsx, twMerge)
│ ├── App.tsx # Main application layout coordinator
│ ├── main.tsx # React root entry point
│ └── index.css # Tailwind CSS v4 & custom design tokens
├── index.html # SEO metadata & JSON-LD entry
├── package.json # Project dependencies & scripts
├── tsconfig.json # TypeScript configuration
└── vite.config.ts # Vite build configuration
Ensure you have Node.js (v18 or higher) and npm installed on your system.
Clone the repository and install dependencies:
git clone https://github.com/hassiebb/MyWebsite.git
cd MyWebsite
npm installStart the Vite development server with Hot Module Replacement:
npm run devThe application will be accessible at: http://localhost:3000
Compile TypeScript and build the optimized production bundle:
npm run buildPreview the production build locally:
npm run previewTo enable direct CV downloads:
- Place your resume PDF in
public/documents/Mohammad-Hassieb-Resume.pdf - Update
cvPathinsrc/data/profile.tsto'/documents/Mohammad-Hassieb-Resume.pdf'
- Email: mohammadhassieb@gmail.com
- LinkedIn: Mohammad Hassieb
- GitHub: @hassiebb
- Instagram: @mhassieb_
- YouTube: @Mohammad_Hassieb
This project is open source and available under the MIT License.