Series Background: This is the first post in the Portfolio series. . What started as a minimal portfolio has evolved into a production-ready platform with comprehensive security, featuring CSP headers, rate limiting, Redis analytics, background job processing, and extensive monitoring. This series documents the complete journey from initial build to production deployment.
I wanted to build a focused portfolio that is fast to load, easy to iterate on, and simple to host. After trying a few prototypes, I settled on a modern stack that prioritizes , typed data, and tiny bundles.
The Next.js represents a fundamental shift toward server-first rendering. Unlike the Pages Router, App Router makes server components the default, which means:
Better performance: Initial page loads are faster since most components render on the server.
Improved SEO: Content is fully rendered before it reaches the browser.
Reduced client bundle: Only interactive components ship JavaScript to the client.
Streaming and suspense: Built-in support for progressive loading.
In this portfolio, I only use client components where it actually matters, theme toggling, the contact form, and a few sprinkle interactions.
Takeaway
The App Router flips the mental model: instead of opting into server rendering, you opt into
client rendering only where interactivity demands it. This portfolio uses client components only
for theme toggling, the contact form, and a few sprinkle interactions.
Everything lands on Vercel with zero manual knobs. Analytics and Speed Insights are on by default, headers are set via vercel.json, and the whole thing stays fast.
File-based content with MDX and strict TypeScript frontmatter catches errors before deployment
while keeping authoring simple. Every post is tracked in Git, rendered at build time, and
type-validated.
Server components encourage you to ask “does this need to be interactive?”
Tailwind v4 wipes away config noise
File-based content with MDX provides Git-backed authoring
Type-safe frontmatter catches errors before deployment
Search and tag filtering are now live without compromising the stack’s simplicity, and view counts remain on the roadmap.
This was just the beginning. After shipping, I spent time hardening the site for production with security improvements, performance optimizations, and developer experience enhancements.