Skip to content

marcin2121/moje-portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

42 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Marcin Molenda Development – Portfolio

Marcin Molenda β€” Developer Portfolio

Premium portfolio built with Next.js 16, Three.js, GSAP & Framer Motion
A high-performance, scroll-driven experience showcasing real-world client projects

Live Site Next.js React TypeScript Three.js


πŸ‡ΊπŸ‡Έ English

Overview

A custom-built developer portfolio designed as a cinematic, scroll-driven experience β€” not a template. Every animation, layout decision, and performance optimization is hand-crafted to deliver a premium user experience while maintaining Lighthouse 100/100 scores.

πŸ—οΈ Architecture & Key Decisions

Layer Technology Rationale
Framework Next.js 16 (App Router) Server Components, Turbopack, streaming SSR
3D Engine Three.js + React Three Fiber Interactive 3D model embedded in scroll layout
Scroll Engine GSAP ScrollTrigger Horizontal scroll pinning, snap-to-section, scrub animations
Motion Framer Motion Page transitions, micro-interactions, spring physics
Styling Tailwind CSS v4 Utility-first, dark mode, custom design tokens
Analytics Umami (self-hosted) Cookie-free, GDPR-compliant, no consent banners
SEO JSON-LD, OpenGraph, Sitemap Structured data for ProfessionalService schema

✨ Technical Highlights

Performance-First Architecture

  • Dynamic imports via next/dynamic β€” Three.js scene, Particles, and heavy modules loaded only when needed
  • requestIdleCallback (rIC) pattern for deferring GSAP initialization to idle browser frames
  • Animated WebP component with IntersectionObserver for lazy-loading and progressive reveal
  • Font optimization β€” Geist Mono with display: swap to eliminate render-blocking

Scroll-Driven Layout

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Hero  β”‚  Services  ──── Horizontal Scroll ────►    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    About Section                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Portfolio β”‚ Case 1 β”‚ Case 2 β”‚ ... β”‚ Case 5  ────►  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                   Contact Section                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • Two independent horizontal scroll containers pinned via GSAP ScrollTrigger
  • Desktop: matchMedia('min-width: 1024px') activates horizontal scrolling
  • Mobile: Falls back to natural vertical scroll with full-width sections
  • Sidebar lava progress bar synced via MotionValue (zero re-renders)

Interactive 3D Scene

  • UrwisModel β€” GLB model loaded via @react-three/drei, embedded in the Case Studies section
  • Interactive orbit with drag-to-rotate and parallax tilt on mouse move
  • Suspense boundary with shimmer fallback for seamless loading

Custom UI Components

Component Purpose
MagicBento Service cards with border-glow effect on hover
MagneticWrapper Magnetic cursor attraction on CTA buttons
AnimatedWebP Lazy-load animated images with IntersectionObserver + decode async
Particles Canvas-based particle field with configurable color

Live Demo Viewport

Built-in iframe preview system for showcasing deployed projects:

  • Desktop/Mobile toggle with spring-animated viewport resize
  • Keyboard-accessible (Esc to close)
  • GTM event tracking on demo interactions

πŸ“‚ Project Structure

moje-portfolio/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ layout.tsx          # Root layout (fonts, metadata, JSON-LD, analytics)
β”‚   β”œβ”€β”€ page.tsx            # Main portfolio page (scroll engine, sections)
β”‚   β”œβ”€β”€ globals.css         # Design tokens & global styles
β”‚   β”œβ”€β”€ not-found.tsx       # Custom 404 page
β”‚   β”œβ”€β”€ robots.ts           # Robots.txt generation
β”‚   β”œβ”€β”€ sitemap.ts          # Dynamic sitemap generation
β”‚   └── polityka-prywatnosci/ # Privacy policy (GDPR)
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ Hero.tsx            # Hero section with orbital tech stack animation
β”‚   β”œβ”€β”€ UrwisModel.tsx      # Three.js 3D model viewer
β”‚   └── ui/
β”‚       β”œβ”€β”€ AnimatedWebP.tsx # Lazy animated image component
β”‚       β”œβ”€β”€ MagicBento.tsx   # Hover-glow card component
β”‚       β”œβ”€β”€ MagneticButton.tsx
β”‚       β”œβ”€β”€ MagneticWrapper.tsx
β”‚       └── Particles.tsx    # Canvas particle system
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ urwis.glb           # 3D model asset
β”‚   β”œβ”€β”€ *.webp              # Optimized project screenshots
β”‚   └── sfx/                # UI sound effects
β”œβ”€β”€ next.config.ts          # Turbopack, compression, package optimization
β”œβ”€β”€ eslint.config.mjs       # ESLint flat config (Core Web Vitals + TypeScript)
└── tsconfig.json           # Strict TypeScript configuration

πŸš€ Getting Started

# Clone
git clone https://github.com/marcin2121/moje-portfolio.git
cd moje-portfolio

# Install
npm install

# Development (Turbopack)
npm run dev

# Production build
npm run build && npm start

⚑ Performance Optimizations

  • Dynamic imports for Three.js, Particles, and GSAP (excluded from initial bundle)
  • requestIdleCallback pattern for deferring GSAP/ScrollTrigger initialization to idle frames
  • LCP element rendered without Framer Motion animation delay (zero render delay on desktop)
  • Lazy-loaded use-sound / Howler.js β€” only imported on first user interaction, not at page load
  • IntersectionObserver-based lazy loading for animated WebP images with decode async
  • display: swap font loading strategy (eliminates render-blocking fonts)
  • Turbopack-optimized tree-shaking for lucide-react and framer-motion
  • Gzip/Brotli compression enabled via Next.js

πŸ‡΅πŸ‡± Polski

Opis

Portfolio zaprojektowane jako immersyjne doświadczenie scroll-driven — nie szablon. Każda animacja, decyzja layoutowa i optymalizacja wydajności została stworzona ręcznie, aby dostarczyć premium UX przy zachowaniu wyników Lighthouse 100/100.

πŸ—οΈ Architektura i Technologie

Warstwa Technologia Uzasadnienie
Framework Next.js 16 (App Router) Server Components, Turbopack, streaming SSR
Silnik 3D Three.js + React Three Fiber Interaktywny model 3D w layoutcie scrollowym
Scroll GSAP ScrollTrigger Horyzontalny scroll z pinowaniem i snap-to-section
Animacje Framer Motion Mikro-interakcje, animacje sprΔ™ΕΌynowe
Stylizacja Tailwind CSS v4 Utility-first, dark mode
Analityka Umami (self-hosted) Bez cookies, zgodne z GDPR
SEO JSON-LD, OpenGraph, Sitemap Dane strukturalne ProfessionalService

✨ Kluczowe RozwiΔ…zania Techniczne

  • Architektura Performance-First β€” dynamiczne importy, requestIdleCallback, lazy-loading z IntersectionObserver
  • Scroll-Driven Layout β€” dwa niezaleΕΌne kontenery horyzontalnego scrolla z GSAP, responsywny fallback dla mobile
  • Interaktywna Scena 3D β€” model GLB z @react-three/drei, drag-to-rotate, parallax na kursor
  • Wbudowany Viewport Demo β€” system podglΔ…du iframe z przeΕ‚Δ…czaniem Desktop/Mobile i animacjΔ… sprΔ™ΕΌynowΔ…
  • Lava Progress Bar β€” wskaΕΊnik postΔ™pu synchronizowany z MotionValue (zero re-renderΓ³w React)

πŸš€ Instalacja

npm install
npm run dev

🀝 Kontakt


Built with precision by Marcin Molenda Β· Β© 2026

About

Premium minimalistic portfolio (2026) built with Next.js, Three.js, and GSAP. Featuring smooth animations, 3D models, and advanced UX/UI.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors