Building a Modern Portfolio with Next.js 15
2 min read
nextjsreactarchitecture
Building a portfolio website seems simple, but doing it right requires careful architectural decisions. Here's how I approached it.
Architecture Decisions
Static First
Every page is statically generated at build time. This means:
- Zero server costs — Hosted on Vercel's free tier
- Instant page loads — Pre-rendered HTML served from CDN
- Perfect SEO — Search engines see full HTML
Content Layer
Instead of a CMS, I use a file-based content system:
content/
├── blog/*.mdx # Blog posts
├── projects/*.mdx # Project descriptions
└── resume.json # Structured resume data
Type Safety
Every piece of content is typed end-to-end:
typescript
interface BlogFrontmatter {
title: string
date: string
description: string
tags: string[]
category: BlogCategory
}
Development Process
I used a multi-agent development approach with Claude Code:
- scaffold-agent — Set up the project skeleton
- content-agent — Created all content files
- blog-agent — Built the blog module
- projects-agent — Built the projects module
- resume-agent — Built the resume module
- integration-agent — Integrated everything
This parallel workflow reduced development time significantly.
Performance
The site achieves:
- Lighthouse Performance: 98
- First Contentful Paint: 0.8s
- Time to Interactive: 1.2s
Lessons Learned
- Start with contracts — Define your types first
- Own your content — File-based > CMS for personal sites
- Static is king — SSG beats SSR for portfolios