A modern, animated, and fully responsive developer portfolio built with Next.js 16, React 19, and a rich set of interactive 3D/UI experiences.
Maherβs Portfolio is a modern, minimalist developer portfolio designed to showcase projects, work experience, and client testimonials through a series of polished, animated sections. The site combines Aceternity UI-style interactive components (spotlight effects, 3D pin cards, moving borders, canvas reveal effects) with a real-time 3D interactive globe and smooth Framer Motion animations, all wrapped in a dark-themed, fully responsive layout.
Key highlights:
next-themes
| Category | Tools & Libraries |
|---|---|
| Core Framework | Next.js 16.2.10 (App Router), React 19.2.4, TypeScript 5 |
| Styling | Tailwind CSS 4, tailwind-merge, class-variance-authority, tw-animate-css |
| UI Components | shadcn/ui, Aceternity UI-style custom components (Spotlight, 3D Pin, Moving Border, Bento Grid) |
| Animation | Motion (Framer Motion), Lottie (lottie-react) for confetti micro-interactions |
| 3D / WebGL | Three.js, @react-three/fiber, @react-three/drei, three-globe (interactive globe) |
| Icons | Lucide React, Tabler Icons |
| Theming | next-themes (dark mode) |
| Error Monitoring | Sentry (@sentry/nextjs) β client, server, and edge runtime instrumentation |
| Linting | ESLint 9, eslint-config-next |
portfolio/
β
βββ app/
β βββ layout.tsx # Root layout, fonts, theme provider
β βββ page.tsx # Home page β composes all sections
β βββ theme-provider.tsx # next-themes wrapper
β βββ global-error.tsx # Sentry-wrapped global error boundary
β βββ globals.css # Tailwind v4 theme tokens & keyframes
β
βββ components/
β βββ Hero.tsx # Landing section with spotlight + text effect
β βββ Grid.tsx # "About" bento grid wrapper
β βββ RecentProjects.tsx # 3D pin project showcase
β βββ Clients.tsx # Testimonials + company logos
β βββ Experience.tsx # Work experience cards
β βββ Approach.tsx # Process/approach cards with canvas reveal
β βββ Footer.tsx # Contact CTA + social links
β βββ MagicButton.tsx # Reusable gradient-border button
β βββ ui/
β βββ bento-grid.tsx # Bento grid + item components
β βββ 3d-pin.tsx # 3D tilt project card
β βββ moving-border.tsx # Animated gradient border button/card
β βββ spotlight-new.tsx # Hero spotlight animation
β βββ text-generate-effect.tsx # Word-by-word text reveal
β βββ infinite-moving-cards.tsx # Auto-scrolling testimonial cards
β βββ canvas-reveal-effect.tsx # WebGL dot-matrix reveal shader
β βββ Globe.tsx / GridGlobe.tsx # Interactive 3D globe (three-globe)
β βββ floating-navbar.tsx # Scroll-aware sticky navigation
β βββ tailwindcss-buttons.tsx
β
βββ data/
β βββ index.ts # Nav items, projects, testimonials, experience
β βββ globe.json # GeoJSON country data for the 3D globe
β βββ confetti.json # Lottie animation data
β
βββ lib/
β βββ utils.ts # `cn()` class-merging helper
β
βββ instrumentation.ts # Sentry server/edge init
βββ instrumentation-client.ts # Sentry browser init (Replay + Feedback)
βββ sentry.server.config.ts
βββ sentry.edge.config.ts
βββ next.config.ts # Static export + Sentry webpack plugin
βββ components.json # shadcn/ui configuration
useStateβs lazy initializer to randomize animation speed per cardmailto: link)next-themes, with system preference support| Section | Component | Description |
|---|---|---|
| Navigation | FloatingNav |
Sticky, scroll-aware nav bar |
| Hero | Hero |
Intro headline, spotlight, CTA button |
| About | Grid β BentoGrid |
Bio, tech stack, 3D globe, email copy |
| Projects | RecentProjects |
3D pin cards for featured work |
| Testimonials | Clients |
Infinite scrolling reviews + company logos |
| Experience | Experience |
Work history timeline cards |
| Approach | Approach |
Development process, 3 animated cards |
| Footer | Footer |
Contact CTA + social links |
# Clone the repository
git clone https://github.com/your-username/portfolio.git
cd portfolio
# Install dependencies
npm install
# Start the development server
npm run dev
# Build for production (static export)
npm run build
# Start the production server
npm run start
# Lint the codebase
npm run lint
Open http://localhost:3000 in your browser to view the result.
Most personal content (projects, testimonials, work experience, nav links, and social links) lives in a single file:
data/index.ts
Update the projects, testimonials, workExperience, companies, and socialMedia arrays to reflect your own information.
This project ships with Sentry pre-configured across all Next.js runtimes:
instrumentation-client.ts β browser errors, session replay, and user feedback widgetinstrumentation.ts + sentry.server.config.ts β Node.js server errorssentry.edge.config.ts β Edge runtime (middleware) errorsapp/global-error.tsx β global React error boundary that reports to Sentry
To connect your own Sentry project, replace the dsn value in each config file with your projectβs DSN.This project was built by following and learning from a tutorial by Adrian Hajdin from JavaScript Mastery.
πΊ YouTube Tutorial
π¨βπ» Adrian Hajdin on GitHub
Maher Elmair
π LinkedIn
βοΈ X (Twitter)
π GitHub
β€οΈ Made with passion by Maher Elmair
π Check out the live version of the portfolio:
π 3D Portfolio
If you found this project useful or inspiring, please consider giving it a βοΈ
Pull requests, issues, and suggestions are always welcome π