<?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: Mukesh Agrawal</title>
    <description>The latest articles on DEV Community by Mukesh Agrawal (@mukesh_agrawal_ea17dc4c6c).</description>
    <link>https://dev.to/mukesh_agrawal_ea17dc4c6c</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%2F3746858%2F7bd121ee-543f-421f-b16e-0bee2460de4c.png</url>
      <title>DEV Community: Mukesh Agrawal</title>
      <link>https://dev.to/mukesh_agrawal_ea17dc4c6c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mukesh_agrawal_ea17dc4c6c"/>
    <language>en</language>
    <item>
      <title>Building a High-Performance Portfolio with Next.js</title>
      <dc:creator>Mukesh Agrawal</dc:creator>
      <pubDate>Mon, 02 Feb 2026 07:53:18 +0000</pubDate>
      <link>https://dev.to/mukesh_agrawal_ea17dc4c6c/building-a-high-performance-portfolio-with-nextjs-53oo</link>
      <guid>https://dev.to/mukesh_agrawal_ea17dc4c6c/building-a-high-performance-portfolio-with-nextjs-53oo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I'm a full-stack developer passionate about creating beautiful, performant web experiences. After years of building internal dashboards and enterprise applications, I decided to invest time in crafting a portfolio that genuinely represents my work—not just another template. This project became an exercise in balancing visual polish with technical depth, proving that personal projects are where developers truly grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;Check out the deployed portfolio here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://portfolio-358673208762.us-central1.run.app" rel="noopener noreferrer"&gt;https://portfolio-358673208762.us-central1.run.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Next.js 16 (App Router) with TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animations&lt;/strong&gt;: Framer Motion + GSAP (ScrollTrigger)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS 4 + Stitch (AI-powered design-to-code)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Google Cloud Run with Cloud Build&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development&lt;/strong&gt;: Gemini CLI (vibecoding), Antigravity (agentic IDE)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Design Decisions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Animation Strategy&lt;/strong&gt;: Rather than over-animating, I used purposeful animations with GSAP's ScrollTrigger to reveal content as users scroll. The floating certification cloud uses staggered Framer Motion animations for a premium feel without being distracting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dark Theme with Green&lt;/strong&gt;: A deliberate choice inspired by terminal interfaces. The &lt;code&gt;#ccff00&lt;/code&gt; accent color creates visual hierarchy and draws the eye to key information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leveraging Google AI Tools&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stitch&lt;/strong&gt; transformed my wireframes and design ideas directly into clean UI code. Upload a sketch → get functional React components instantly. This cut design-to-code time by weeks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini CLI&lt;/strong&gt; made making this portfolio possible. I dropped a &lt;code&gt;GEMINI.md&lt;/code&gt; file with my coding standards (TypeScript-first, component patterns, naming conventions) and let Gemini CLI handle the boilerplate. It caught inconsistencies I would've missed manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antigravity&lt;/strong&gt; sits in the background as my agentic IDE, orchestrating multi-step tasks like "refactor the animation logic" or "add accessibility features to all components" without my constant intervention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prerendered static pages (no unnecessary server requests)&lt;/li&gt;
&lt;li&gt;CSS-in-JS minimized through Tailwind's JIT compilation&lt;/li&gt;
&lt;li&gt;Lazy loading for heavy animations&lt;/li&gt;
&lt;li&gt;Cloud Build + Cloud Run for automatic deployment and scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deployment Process
&lt;/h3&gt;

&lt;p&gt;The hardest part? Getting the Docker build right. The initial Dockerfile attempted to use Next.js standalone mode, but the &lt;code&gt;.next&lt;/code&gt; directory is gitignored (rightfully so). Here's what worked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:18-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="c"&gt;# ... build steps ...&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:18-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;runner&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/.next ./.next&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/public ./public&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json ./&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloud Build automatically picks up changes from git pushes, rebuilds the container, and deploys to Cloud Run. Total deployment time: ~90 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The Certification Cloud Component&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Seven floating badges arranged in a constellation pattern, each with individual bobbing animations and hover effects. It's purely visual but perfectly captures the "accomplished professional" narrative without a boring bullet list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Infinite Company Carousel&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Seamlessly loops through 22 years of career history. The animation is GPU-accelerated and pauses on hover—small details that signal polish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Responsive Without Compromise&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Works identically from mobile to 4K displays. The hero text scales with &lt;code&gt;clamp()&lt;/code&gt;, certifications hide gracefully on small screens, and the layout adapts without feeling cramped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The Build Debugging Journey&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Figuring out why Cloud Build was failing taught me about &lt;code&gt;.gcloudignore&lt;/code&gt;, container layer optimization, and the importance of clear Dockerfiles. Sometimes the process is more valuable than the product.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Learnings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Animation isn't free&lt;/strong&gt;: Each GSAP animation adds ~2KB. I spent time profiling to keep the bundle lean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll hijacking is tempting but evil&lt;/strong&gt;: Resist it. Users want predictable scroll behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript saves production headaches&lt;/strong&gt;: Caught undefined refs to components before deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker build context matters&lt;/strong&gt;: Thoughtful &lt;code&gt;.gcloudignore&lt;/code&gt; and &lt;code&gt;.gitignore&lt;/code&gt; configuration prevents bloated images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Integrating Google AI into the Workflow
&lt;/h2&gt;

&lt;p&gt;What surprised me most was how natural it felt to weave Google's AI tools into the development loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stitch&lt;/strong&gt; proved invaluable at the design phase. Instead of fighting Figma or hiring a designer, I described the aesthetic ("dark theme, bold typography, floating elements") and pasted my wireframe. Stitch generated the initial UI structure in minutes. From there, I refined it, exported React code, and had a functional starting point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt; transformed development velocity. Vibecoding isn't just hype—it's real. I created a &lt;code&gt;GEMINI.md&lt;/code&gt; documenting my preferences:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Use TypeScript with strict mode
- Components in /app/components with .tsx extension  
- Tailwind for styling, no CSS files
- Export as named exports, not default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I could ask Gemini CLI to "build the company carousel component" and it would follow my standards automatically. No more code reviews saying "fix the naming conventions."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antigravity&lt;/strong&gt; handles the heavy lifting. Need to refactor animations across all components? Tell an Antigravity agent to "make all motion animations use framer-motion consistently" and it plans the work, executes changes across files, validates the output, and iterates until it's right. You're no longer coding—you're directing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Planning to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog section using Stitch-generated layouts + Gemini CLI for post generation from my notes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - Advanced component library leveraging Stitch's design-to-code pipeline
&lt;/h2&gt;

&lt;p&gt;If you're building something similar: try Stitch for your next design, drop a &lt;code&gt;GEMINI.md&lt;/code&gt; in your repo, and let Gemini CLI handle the scaffolding. You'll ship faster, and your code will be more consistent.&lt;/p&gt;

&lt;p&gt;Built with ❤️ + &lt;strong&gt;Next.js&lt;/strong&gt; + &lt;strong&gt;Stitch&lt;/strong&gt; + &lt;strong&gt;Gemini CLI&lt;/strong&gt; + &lt;strong&gt;Antigravity&lt;/strong&gt; + &lt;strong&gt;Google Cloud Run&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
