Portfolio V3.0

A modern, responsive portfolio website built with Next.js, TypeScript, and MDX. Features dark mode, global search, and markdown-based content management.

Technologies Used

Next.js 15TypeScriptTailwind CSSMDXFramer MotionFuse.jsnext-themes

Portfolio V3.0

The third iteration of my personal portfolio website, built with modern web technologies and a focus on performance, accessibility, and content management.

Features

🎨 Modern Design

  • Clean, minimalist interface with careful attention to typography and spacing
  • Responsive design that works beautifully on all devices
  • Smooth animations and transitions using Framer Motion

🔍 Global Search

  • Instant search across all content types (blog posts, thoughts, projects, talks)
  • Keyboard shortcuts (⌘K / Ctrl+K) for quick access
  • Fuzzy search powered by Fuse.js
  • Search result highlighting and categorization

📝 Content Management

  • Markdown-based content system using MDX
  • Git-based workflow for content updates
  • Type-safe frontmatter validation
  • Support for multiple content types: blog, thoughts, projects, talks, and now pages

⚡ Performance

  • Static site generation for optimal loading speeds
  • Image optimization and lazy loading
  • Minimal JavaScript bundle size
  • Perfect Lighthouse scores

🌐 SEO & Accessibility

  • Comprehensive meta tags and Open Graph support
  • Semantic HTML structure
  • Screen reader friendly
  • Keyboard navigation support

Technical Implementation

Architecture

The site follows Next.js 15 App Router conventions with a clean separation of concerns:

  • /src/app/ - Page components and routing
  • /src/components/ - Reusable UI components
  • /src/lib/ - Utility functions and business logic
  • /content/ - Markdown content files
  • /public/ - Static assets

Content System

Each content type has its own directory structure and TypeScript interfaces:

interface ContentItem {
  slug: string;
  title: string;
  description?: string;
  date: string;
  tags?: string[];
  published: boolean;
  content: string;
  // Type-specific fields...
}

Search Implementation

The global search uses a combination of:

  • Fuse.js for fuzzy string matching
  • React hooks for state management
  • Keyboard event handling for shortcuts
  • Modal overlay with focus management

Theme System

Dark mode implementation using next-themes:

  • System preference detection
  • Persistent user choice
  • CSS custom properties for theme colors
  • Smooth transitions between themes

Development Process

Planning

  • User experience research and wireframing
  • Component design system creation
  • Content strategy and information architecture
  • Performance budget definition

Implementation

  • TypeScript-first development approach
  • Component-driven development
  • Progressive enhancement mindset
  • Accessibility-first design decisions

Testing

  • Manual testing across devices and browsers
  • Lighthouse performance audits
  • Accessibility testing with screen readers
  • Content validation and error handling

Lessons Learned

What Worked Well

  • MDX for content: Perfect balance of simplicity and flexibility
  • TypeScript everywhere: Caught numerous errors during development
  • Tailwind CSS: Rapid prototyping and consistent design system
  • Next.js App Router: Excellent developer experience and performance

Challenges Overcome

  • Search UX: Balancing comprehensive results with simple interface
  • Content organization: Creating flexible schemas for different content types
  • Performance optimization: Achieving fast loading while maintaining rich features
  • Accessibility: Ensuring keyboard navigation works seamlessly with complex interactions

Future Improvements

  • RSS feed generation for blog and thoughts
  • Newsletter signup integration
  • Analytics implementation
  • Automated content optimization