An immersive, animation-rich developer portfolio built with Next.js 15 that blends storytelling, 3D experiences, and performant web techniques. This project showcases professional work, experiments, and craft case studies while delivering a memorable user journey on every device.
π Live Site Β· π Report Bug Β· π‘ Request Feature
- Features
- Tech Stack
- Architecture
- Getting Started
- Environment Variables
- Available Scripts
- Project Structure
- Core Experiences
- Performance & Accessibility
- Deployment
- Security
- Contributing
- License
- Contact
- Parallax storytelling powered by a custom
ParallaxScrollWrapperthat uses GSAP Observer for buttery smooth section transitions. - Cinematic hero moment with GSAP timelines, gradient typography, and animated underline elements.
- Interactive hobby stories delivered in an Instagram-inspired iPhone mockup with auto-progress reels.
- 3D integration via Three.js and React Three Fiber for immersive visual highlights.
- Rich MDX content pipeline powering long-form case studies and craft writeups with live components.
- Dark/light mode switching with persisted preferences using
next-themes. - Keyboard-friendly navigation and motion-reduced states for accessible experiences.
- Production-grade tooling including Turbopack, TypeScript, ESLint, and Prettier.
| Layer | Technologies |
|---|---|
| Framework | Next.js 15 (App Router), React 19 |
| Language | TypeScript, MDX |
| Styling | Tailwind CSS, Shadcn/ui, Radix Primitives |
| Animation | GSAP, Framer Motion, SplitType |
| 3D / Graphics | Three.js, React Three Fiber, @react-three/drei, Cobe |
| Data & APIs | next-mdx-remote, Octokit GraphQL |
| Tooling | Turbopack, ESLint, Prettier, pnpm script compatibility |
The portfolio uses a component-driven architecture with domain-focused feature folders. Key concepts include:
- App Router for route-based code splitting and streaming.
- Composable UI primitives extending Shadcn/ui for consistent styling.
- Store layer with Zustand for lightweight global state (e.g., active section, theme toggles).
- Animation orchestration using GSAP timelines coupled with IntersectionObserver hooks.
- MDX content system stored in
src/mdx-contentfor project narratives and thought pieces.
- Node.js 18.x or newer
- Yarn 1.22.x (project default) or pnpm/npm (supported but not committed)
- Git
git clone https://github.com/salah/portfolio-2.0.git
cd portfolio-2.0
yarn installyarn devOpen http://localhost:3000 to view the site. The page auto-reloads as you edit components thanks to Fast Refresh.
Duplicate the sample file and populate secrets:
cp .env.example .env.localKey variables used in production:
# Optional β used for GitHub API integrations
GITHUB_TOKEN=your_personal_access_token
# Optional β surfaced in analytics dashboards
VERCEL_ANALYTICS_ID=your_vercel_analytics_id
# Add any other secrets your fork requiresTip: Avoid committing
.env.local. Use Vercel or your hosting provider to configure secrets in production.
yarn dev # Start Next.js in development mode with Turbopack
yarn build # Generate an optimized production build
yarn start # Start the production server
yarn lint # Run ESLint across the projectsrc/
βββ app/ # App Router routes, metadata, and API handlers
β βββ layout.tsx # Root layout with providers and global styles
β βββ page.tsx # Landing page composition
β βββ tech-stack/ # Dedicated tech stack showcase
β βββ work/ # Work experience and case studies
β βββ craft/ # MDX-driven craft stories
βββ components/
β βββ ui/ # Reusable UI primitives (Shadcn/ui adaptations)
β βββ intro-view/ # Animated hero & GSAP hover interactions
β βββ hobby-view/ # Instagram story-style hobby section
β βββ ... # Additional feature-specific components
βββ hooks/ # Custom React hooks (animations, breakpoints, etc.)
βββ lib/ # Utilities, configuration helpers, MDX processors
βββ mdx-content/ # Source content for craft section
βββ store/ # Zustand stores for global state
βββ styles/ # Tailwind layers and global CSS overrides
- ParallaxScrollWrapper β Locks the scroll wheel to full-screen sections with elegant y-axis parallax while allowing inner content to scroll independently.
- IntroView β Hovering portfolio keywords reveals contextual imagery with staggered GSAP animations.
- JourneyView β Framer Motion scroll progress reveals, gradient animated typography, and progress indicators.
- HobbyView β Instagram reel simulation with auto-progress bars, tap navigation, and GSAP character reveals.
- Dock Navigation β macOS-inspired dock using PNG icons with hover magnification.
- Core Web Vitals optimized via Next.js Image, dynamic imports, and streaming data.
- Custom
useReducedMotionhooks to respect OS-level motion preferences. - Keyboard navigable components with appropriate ARIA attributes & focus states.
- Lazy-loading heavy sections (Three.js scenes, MDX content) to reduce first load time.
- Please review SECURITY.md for our responsible disclosure policy.
- Vulnerabilities should be reported privately via email before creating public issues.
Contributions, ideas, and bug reports are welcome!
- Fork the project.
- Create a feature branch:
git checkout -b feature/awesome-improvement. - Commit with Conventional Commits or clear messages.
- Push and open a Pull Request describing your change.
Make sure yarn lint passes before submitting. Include screenshots or screen recordings for UI changes when possible.
Distributed under the MIT License. See LICENSE for more information.
- Author: Muhammad (aka Salah)
- Website: salah.uz
- GitHub: @salahbm
- LinkedIn: linkedin.com/in/salahbm
- Big Thanks to SugarDarius for the layout of the portfolio.
Built with β€οΈ using Next.js, TypeScript, and a passion for delightful web experiences.
