<?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: Sachi Goyal</title>
    <description>The latest articles on DEV Community by Sachi Goyal (@sachi_goyal).</description>
    <link>https://dev.to/sachi_goyal</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%2F1503746%2Fc1d02f4b-ab30-4011-bfd1-0586b66d1748.jpg</url>
      <title>DEV Community: Sachi Goyal</title>
      <link>https://dev.to/sachi_goyal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sachi_goyal"/>
    <language>en</language>
    <item>
      <title>Building My Personal Portfolio with Next.js, Gemini, and Google Cloud Run</title>
      <dc:creator>Sachi Goyal</dc:creator>
      <pubDate>Mon, 02 Feb 2026 07:37:51 +0000</pubDate>
      <link>https://dev.to/sachi_goyal/building-my-personal-portfolio-with-nextjs-gemini-and-google-cloud-run-1gg</link>
      <guid>https://dev.to/sachi_goyal/building-my-personal-portfolio-with-nextjs-gemini-and-google-cloud-run-1gg</guid>
      <description>&lt;p&gt;For the &lt;em&gt;New Year, New You Portfolio Challenge&lt;/em&gt;, I rebuilt my personal portfolio using Next.js 16, Google Gemini, and Google Cloud Run. This post walks through the design, architecture, AI features, and deployment setup behind &lt;strong&gt;sachi.dev&lt;/strong&gt;, an open-source, production-ready portfolio.&lt;/p&gt;

&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;Hi, I’m &lt;strong&gt;Sachi Goyal&lt;/strong&gt; 👋&lt;br&gt;&lt;br&gt;
I’m a software developer who enjoys building functional, well-designed web applications. React and Next.js are my primary tools, and I usually reach for TailwindCSS and shadcn/ui when it comes to styling.&lt;/p&gt;

&lt;p&gt;With this portfolio, my goal was to create something that feels personal but still production-grade. A place where I can write, showcase projects, and experiment with AI features without compromising performance, clarity, or maintainability.&lt;/p&gt;
&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;The portfolio is deployed on &lt;strong&gt;Google Cloud Run&lt;/strong&gt; and publicly accessible at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Run URL (challenge requirement):&lt;/strong&gt;
&lt;a href="https://sachi-dev-809350176771.asia-southeast1.run.app" rel="noopener noreferrer"&gt;https://sachi-dev-809350176771.asia-southeast1.run.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom domain mapped to the same Cloud Run service:&lt;/strong&gt;
&lt;a href="https://sachi.dev" rel="noopener noreferrer"&gt;https://sachi.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://sachi-dev-809350176771.asia-southeast1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;The source code is fully open source:&lt;br&gt;
&lt;a href="https://github.com/sachigoyal/portfolio" rel="noopener noreferrer"&gt;https://github.com/sachigoyal/portfolio&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Demo Video
&lt;/h2&gt;

&lt;p&gt;Here’s a short walkthrough showing how the portfolio works, including the featured project modals and the Gemini-powered AI chat experience:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/WLTQtL8befY"&gt;
  &lt;/iframe&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 React 19&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime &amp;amp; Tooling:&lt;/strong&gt; Bun&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS v4, Radix UI, Framer Motion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content:&lt;/strong&gt; Velite with MDX&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Google Gemini API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Docker + Google Cloud Run (asia-southeast1)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Home page with intro, GitHub contribution heatmap, featured projects, and recent blogs&lt;/li&gt;
&lt;li&gt;Filterable and sortable projects page with categories&lt;/li&gt;
&lt;li&gt;Blog system with MDX, table of contents, search, filters, and year grouping&lt;/li&gt;
&lt;li&gt;Rich MDX components including code blocks, callouts, tabs, accordions, file trees, and math rendering&lt;/li&gt;
&lt;li&gt;Dynamic OpenGraph image generation and per-page metadata&lt;/li&gt;
&lt;li&gt;Light, dark, and system themes with persistence&lt;/li&gt;
&lt;li&gt;Animations across modals, tabs, and cards using Framer Motion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Featured project modals that open on click, with built-in AI chat powered by Gemini&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Google AI Usage
&lt;/h3&gt;

&lt;p&gt;Google Gemini is integrated directly into the portfolio as a practical, scoped feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini powers a &lt;strong&gt;streaming AI chat&lt;/strong&gt; inside featured project modals&lt;/li&gt;
&lt;li&gt;Conversations are context-aware and limited to the selected project&lt;/li&gt;
&lt;li&gt;Requests are rate-limited using Upstash Redis to ensure predictable usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make AI genuinely helpful. Visitors can ask questions about specific projects and get immediate, relevant answers without leaving the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment on Cloud Run
&lt;/h3&gt;

&lt;p&gt;The application is fully Dockerized and deployed using Cloud Build and Google Cloud Run.&lt;/p&gt;

&lt;p&gt;A simplified deployment command looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud run deploy sachi-dev &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;asia-southeast1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--allow-unauthenticated&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--set-env-vars&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also configured &lt;strong&gt;custom domain mapping&lt;/strong&gt; so the same Cloud Run service is accessible via both &lt;code&gt;sachi.dev&lt;/code&gt; and &lt;code&gt;www.sachi.dev&lt;/code&gt;. This keeps the deployment compliant with the challenge requirements while still using a personal domain.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI that fits naturally&lt;/strong&gt;&lt;br&gt;
The Gemini integration is purposeful and contextual, not a generic chatbot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A clean and flexible content system&lt;/strong&gt;&lt;br&gt;
Velite and MDX make it easy to write, organize, and evolve content over time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Polished UI without unnecessary complexity&lt;/strong&gt;&lt;br&gt;
Search, filtering, theming, animations, and SEO all work together without feeling heavy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production-ready infrastructure&lt;/strong&gt;&lt;br&gt;
Fully Dockerized, scalable, and running entirely on Google Cloud Run.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to the Google AI and DEV teams for organizing the challenge. Building this portfolio was a good opportunity to refine my workflow and ship something I plan to keep improving.&lt;/p&gt;

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