<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shafiq Hammad</title>
    <description>The latest articles on DEV Community by Shafiq Hammad (@shafiqhammad5).</description>
    <link>https://dev.to/shafiqhammad5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F873280%2F58dba528-f289-47a8-b722-11dfeb94e508.jpg</url>
      <title>DEV Community: Shafiq Hammad</title>
      <link>https://dev.to/shafiqhammad5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shafiqhammad5"/>
    <language>en</language>
    <item>
      <title>How I Built My Portfolio with Next.js, Tailwind &amp; Sanity</title>
      <dc:creator>Shafiq Hammad</dc:creator>
      <pubDate>Thu, 26 Jun 2025 16:44:14 +0000</pubDate>
      <link>https://dev.to/shafiqhammad5/how-i-built-my-portfolio-with-nextjs-tailwind-sanity-48ml</link>
      <guid>https://dev.to/shafiqhammad5/how-i-built-my-portfolio-with-nextjs-tailwind-sanity-48ml</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;📌 Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you're a frontend developer looking to build a high-performance, SEO-friendly portfolio that’s easy to maintain and extend — this post is for you.&lt;/p&gt;

&lt;p&gt;I recently rebuilt my personal website — &lt;a href="https://shafiqhammad.site" rel="noopener noreferrer"&gt;shafiqhammad.site&lt;/a&gt; — using Next.js 15, Tailwind CSS v4, and Sanity CMS. My goal was to create a visually polished, content-driven portfolio that could evolve with my career while delivering exceptional speed and SEO results.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why I chose this stack&lt;/li&gt;
&lt;li&gt;How I structured the project&lt;/li&gt;
&lt;li&gt;How I integrated FormBold for contact form submissions&lt;/li&gt;
&lt;li&gt;My approach to SEO and performance&lt;/li&gt;
&lt;li&gt;Key takeaways from the process&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Why I Rebuilt My Portfolio&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;My previous portfolio lacked scalability, performance, and content flexibility. It didn’t reflect my current skill set or frontend thinking in 2025.&lt;/p&gt;

&lt;p&gt;So, I decided to rebuild everything from the ground up using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 15 App Router&lt;/strong&gt; for modern routing and layout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for rapid UI development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity CMS&lt;/strong&gt; for headless content management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FormBold&lt;/strong&gt; to handle contact form submissions without backend complexity&lt;/li&gt;
&lt;li&gt;Best practices for SEO, performance, and accessibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🛠️ Tech Stack Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔧 Next.js 15 (App Router)
&lt;/h3&gt;

&lt;p&gt;Next.js 15 offers improved flexibility through server/client component separation and nested layouts. I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;generateStaticParams()&lt;/code&gt; for static blog generation&lt;/li&gt;
&lt;li&gt;Layouts for consistent UI structure&lt;/li&gt;
&lt;li&gt;Route-specific metadata for SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Tailwind CSS v4
&lt;/h3&gt;

&lt;p&gt;Tailwind helped me build and iterate quickly with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive utilities&lt;/li&gt;
&lt;li&gt;Theme customization via CSS variables&lt;/li&gt;
&lt;li&gt;Plugins like &lt;code&gt;@tailwindcss/typography&lt;/code&gt; for better blog styling&lt;/li&gt;
&lt;li&gt;Zero custom CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📰 Sanity CMS
&lt;/h3&gt;

&lt;p&gt;Sanity gave me the power of structured content with an intuitive Studio interface.&lt;/p&gt;

&lt;p&gt;I created custom schemas for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog posts&lt;/li&gt;
&lt;li&gt;SEO metadata&lt;/li&gt;
&lt;li&gt;Hero banners and page settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using GROQ queries, I pulled this data into the frontend cleanly and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;💡 Key Features I Built&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📄 Dynamic Blog with Sanity
&lt;/h3&gt;

&lt;p&gt;Each post uses a clean, SEO-optimized route (&lt;code&gt;/blog/[slug]&lt;/code&gt;) with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metadata from Sanity&lt;/li&gt;
&lt;li&gt;Rich content rendering using &lt;code&gt;@portabletext/react&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Static generation for fast load times&lt;/li&gt;
&lt;li&gt;Sharing-ready OG images and Twitter cards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📬 Contact Form with FormBold&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Instead of building a backend API, I used FormBold — a secure form backend service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instant email alerts&lt;/li&gt;
&lt;li&gt;GDPR-compliant&lt;/li&gt;
&lt;li&gt;Easy spam filtering with honeypot&lt;/li&gt;
&lt;li&gt;Just add your form ID&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;📈 SEO &amp;amp; Performance Strategy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A portfolio is nothing without discoverability. Here’s how I tackled SEO and performance:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 SEO Essentials
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Custom &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; tags on every page&lt;/li&gt;
&lt;li&gt;Canonical URLs and structured breadcrumbs&lt;/li&gt;
&lt;li&gt;Open Graph and Twitter Card metadata for better link sharing&lt;/li&gt;
&lt;li&gt;Dynamic sitemap generation with &lt;code&gt;next-sitemap&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡ Performance Optimization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;next/image for responsive, optimized images&lt;/li&gt;
&lt;li&gt;next/font for performant custom font loading&lt;/li&gt;
&lt;li&gt;Minimal JavaScript using server components&lt;/li&gt;
&lt;li&gt;Lighthouse Score:

&lt;ul&gt;
&lt;li&gt;✅ Performance: 99&lt;/li&gt;
&lt;li&gt;✅ SEO: 100&lt;/li&gt;
&lt;li&gt;✅ Accessibility: 95&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🧠 What I Learned&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 15 App Router&lt;/strong&gt; brings modern developer ergonomics but requires careful server/client boundaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; continues to be the fastest way to build responsive UIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity CMS&lt;/strong&gt; is incredibly powerful for developers and editors alike&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FormBold&lt;/strong&gt; saved me hours by abstracting away form backend logic&lt;/li&gt;
&lt;li&gt;SEO should be part of your stack — not an afterthought&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🌐 Explore the Live Site&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Check it out:&lt;/p&gt;

&lt;p&gt;💻 &lt;a href="https://shafiqhammad.site" rel="noopener noreferrer"&gt;shafiqhammad.site&lt;/a&gt; — Full portfolio&lt;/p&gt;

&lt;p&gt;📝 &lt;a href="https://shafiqhammad.site/blog" rel="noopener noreferrer"&gt;shafiqhammad.site/blog&lt;/a&gt; — Blog articles powered by Sanity&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;💬 Let’s Connect&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Have feedback, questions, or want to collaborate?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/shafiqhammad5/" rel="noopener noreferrer"&gt;🔗 LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/shafiqhammad5" rel="noopener noreferrer"&gt;🐙 GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shafiqhammad.site/contact" rel="noopener noreferrer"&gt;📬 Contact Form&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
