Project Case Study
I built this website as my new personal portfolio, with an integrated blog to share my thoughts and document my learning journey. My main goal was to turn the entire site into a live demonstration of my skills, so performance and clean architecture were key priorities. To achieve this, I chose Next.js, taking advantage of PPR and SSG for static sections to maximize speed and SEO. I also worked through some of the more challenging parts of the framework—such as the new caching system and Cache Components—which felt confusing at first for a Junior Dev. A big challenge was making the comment system fully interactive without hurting performance, and implementing a complete admin dashboard to manage all dynamic content efficiently. Overall, this project showcases my ability to build modern, performant, and scalable full-stack frontend applications.
I built this website as my new personal portfolio, with an integrated blog to share my thoughts and document my learning journey. My main goal was to turn the entire site into a live demonstration of my skills, so performance and clean architecture were key priorities. To achieve this, I chose Next.js, taking advantage of PPR and SSG for static sections to maximize speed and SEO. I also worked through some of the more challenging parts of the framework—such as the new caching system and Cache Components—which felt confusing at first for a Junior Dev. A big challenge was making the comment system fully interactive without hurting performance, and implementing a complete admin dashboard to manage all dynamic content efficiently. Overall, this project showcases my ability to build modern, performant, and scalable full-stack frontend applications.
While building this project, I ran into several challenges that pushed me to level up both technically and architecturally. One of the biggest obstacles was working with Next.js’s new caching system and Cache Components. They felt unintuitive at first, especially when I needed features like a fully interactive comment system without compromising performance. Finding the right balance between dynamic behavior and fast page delivery took a lot of testing and fine-tuning. Another major challenge was choosing the right tools for performance and long-term maintainability. I decided to use Drizzle ORM instead of Prisma to keep queries efficient and predictable, and I chose Better Auth to maintain complete control over authentication data while avoiding slow third-party redirects. These decisions weren’t just technical choices—they directly shaped the speed and smoothness of the final user experience. I also wanted the blog posts to look beautifully styled rather than just streams of plain <p> tags, which led me deep into the world of MDX and Markdown. Implementing custom components, syntax highlighting, and ensuring consistent formatting across all posts required careful setup and experimentation. On top of all that, building a complete admin dashboard to manage posts, projects, and dynamic content added another layer of complexity. Designing it to be powerful, performant, and intuitive took time, but ultimately strengthened the entire system.
In building this project, I also had to make several architectural decisions focused on performance and control. I chose Drizzle ORM over Prisma to keep the queries lightweight, predictable, and efficient—especially since performance was a priority across the entire stack. For authentication, I went with Better Auth to maintain full control over user data and avoid unnecessary third-party redirects, which helps keep the authentication flow fast and seamless. These decisions allowed me to build a solution that is both performant and highly maintainable.