Technologies
My personal playground for modern web development, built with Next.js 15.
Overview
This wasn't just about having a portfolio; it was about building something the right way. I used Next.js 15, React 19, and TypeScript to create a platform that serves as both my professional face and my technical blog.
Challenges
- Content Chaos: I needed a way to manage static pages and blog posts without duplicating code or styles.
- SEO at Scale: Managing sitemaps and metadata for a multi-language site manually is a nightmare.
- GDPR: I wanted analytics, but I didn't want to be that site that spies on you without asking.
- Testing: I break things. I needed a safety net.
Solution
Unified MDX System: I wrote a custom MDX handler. Whether it's a blog post or an "About Me" page, it uses the same components. I can drop in a <Quote> or a <CodeBlock> anywhere, and it just works.
Smart Sitemaps: I wrote a generator that crawls my content and builds the sitemap automatically, handling all the hreflang tags for internationalization.
Privacy First: I built a dual-storage cookie system. It respects your choice—if you say "no cookies," I really mean no cookies.
Testing: I set up Playwright to run end-to-end tests. It even checks for visual regressions so I don't accidentally break the layout.
Cool Features
Dynamic OG Images: The site generates social preview images on the fly using the Next.js ImageResponse API.
Reading Time: A neat little script calculates how long an article takes to read based on word count.
Tech Mapping: I created a utility that normalizes technology names (like mapping "React.js" and "react" to the same icon), so my stack lists always look clean.
The Tech
- Frontend: Next.js 15.2, React 19, Tailwind CSS 4
- Content: next-mdx-remote, sugar-high (for syntax highlighting)
- Quality: Playwright for E2E and visual testing
- Deploy: Vercel
Results
- It's Fast: Aggressive caching strategies keep load times near instant.
- It's Clean: The codebase is organized, typed, and easy to extend.
- It Works: The automated tests catch bugs before they hit production, which saves me from late-night fixes.

