Project

Makje Portfolio 2024

This Next.js portfolio website showcases a clean, responsive design with modular components and a focus on user experience. It integrates theme switching, dynamic navigation, and scalable architecture to serve as a professional online presence. The project emphasizes maintainability and performance optimization through component-based design and Tailwind CSS styling.

April 2026

About

This project is a Next.js-based portfolio website designed to demonstrate modern frontend development practices. It features a modular structure with reusable components, optimized styling with Tailwind CSS, and seamless theming capabilities. The site is built to be easily extendable, performant, and visually appealing.

Purpose

The main goal is to provide a professional online portfolio that highlights personal projects and skills with a focus on user experience. Key features include:

  • Dynamic navigation with mobile and desktop support
  • Theme toggling between light and dark modes
  • Modular layout with header, footer, and content sections
  • Custom icons and scalable UI components
  • Easy configuration via centralized config.ts

Technical Deep Dive

The architecture leverages Next.js's server-side rendering and client-side hydration to deliver fast initial loads and interactive UI. The layout is composed of a root component (layout.tsx) that wraps all pages, injecting global styles and context providers. Navigation components (Header, MainNav, MobileNav) utilize NextUI's Navbar and NavbarMenu for responsive behavior, with state management for menu toggling. The theme switcher employs next-themes to toggle CSS classes dynamically, with animated icon transitions via custom motion components like FlipIcon and RotateIcon. This setup ensures a cohesive, scalable, and accessible user interface.

Lessons Learned

One challenge was managing theme state across server and client boundaries, which was addressed by deferring theme initialization until component mount (useEffect). This pattern prevents hydration mismatches and ensures consistent theme rendering. Additionally, designing a flexible navigation system that adapts seamlessly between mobile and desktop views required careful coordination of state and layout components, reinforcing the importance of component composition and responsive design principles.