<?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: GJV PAVANSAI</title>
    <description>The latest articles on DEV Community by GJV PAVANSAI (@pavansai20052004hue).</description>
    <link>https://dev.to/pavansai20052004hue</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041803%2F8683d548-39a3-4ebc-87ba-19be38230a70.png</url>
      <title>DEV Community: GJV PAVANSAI</title>
      <link>https://dev.to/pavansai20052004hue</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pavansai20052004hue"/>
    <language>en</language>
    <item>
      <title>https://www.linkedin.com/posts/gjv44_softwareengineer-aiengineer-fullstackdeveloper-ugcPost-7492873611960049664-zbr-/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAGgdKOsBtm4MF_SaHMHk69gmVrhAJZbcPo0</title>
      <dc:creator>GJV PAVANSAI</dc:creator>
      <pubDate>Tue, 11 Aug 2026 09:35:57 +0000</pubDate>
      <link>https://dev.to/pavansai20052004hue/-5an5</link>
      <guid>https://dev.to/pavansai20052004hue/-5an5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2" class="crayons-story__hidden-navigation-link"&gt;I Built a Cinematic Developer Portfolio Instead of a Traditional One — Here’s What I Learned&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/pavansai20052004hue" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041803%2F8683d548-39a3-4ebc-87ba-19be38230a70.png" alt="pavansai20052004hue profile" class="crayons-avatar__image" width="800" height="452"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/pavansai20052004hue" class="crayons-story__secondary fw-medium m:hidden"&gt;
              GJV PAVANSAI
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                GJV PAVANSAI
                
              
              &lt;div id="story-author-preview-content-4367871" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/pavansai20052004hue" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041803%2F8683d548-39a3-4ebc-87ba-19be38230a70.png" class="crayons-avatar__image" alt="" width="800" height="452"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;GJV PAVANSAI&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2" id="article-link-4367871"&gt;
          I Built a Cinematic Developer Portfolio Instead of a Traditional One — Here’s What I Learned
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/portfolio"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;portfolio&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/gjv44_softwareengineer-aiengineer-fullstackdeveloper-ugcPost-7492873611960049664-zbr-/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAAGgdKOsBtm4MF_SaHMHk69gmVrhAJZbcPo0" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD5605AQFdfyeyhnJE9Q%2Fthumbnail-with-play-button-overlay-high%2FB56Z_wI6dJIsCw-%2F0%2F1786440300192%3Fe%3D2147483647%26v%3Dbeta%26t%3DGjQ07qvQo3GgLHwOJiv_FmYCGIWpmt4x5Kcc2GOXRis" height="720" class="m-0" width="1514"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/gjv44_softwareengineer-aiengineer-fullstackdeveloper-ugcPost-7492873611960049664-zbr-/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAAGgdKOsBtm4MF_SaHMHk69gmVrhAJZbcPo0" rel="noopener noreferrer" class="c-link"&gt;
            #softwareengineer #aiengineer #fullstackdeveloper #artificialintelligence #softwaredevelopment #webdevelopment #reactjs #typescript #portfolio #opentowork | Pavan Sai
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🚀 I didn’t want to build another developer portfolio. I wanted to build an experience.

Please see the portfolio and comment me what are changes i should do and find any bugs or errors in my portfolio so that will help me to imporve myself 

After weeks of designing, coding, debugging, rebuilding, and polishing… my new Software Engineering &amp;amp; AI portfolio is officially LIVE.
What started as a simple portfolio idea gradually became one of the most interesting projects I’ve worked on.
I wanted someone visiting it to experience my journey — not just scroll through a list of technologies and projects.
So I experimented with:
🎬 A cinematic opening experience
🎵 Custom soundtrack and audio transitions
⚡ Interactive animations and scene transitions
🤖 AI &amp;amp; Software Engineering project showcases
🧩 Detailed project case studies
📱 Responsive experiences across devices
🎨 A custom cinematic visual system
But the coolest part wasn’t getting everything working.
It was finding everything that wasn’t working. 😅
Broken navigation. Routing issues. Blurry text. Video positioning. Audio levels. Responsive layouts. Animation timing. Deployment problems. Tiny UI inconsistencies that somehow took hours to solve.
That process became the real lesson behind this project:
Build. Test. Break. Debug. Improve. Repeat.
That’s software engineering.
And after many iterations, I’m finally happy to share the result.
🌐 Portfolio: https://lnkd.in/gcJghPgF
I’d love for you to experience it rather than just look at it.
And developers — if you find a bug, tell me. 👀
There’s always one hiding somewhere. 😂
I’m currently exploring opportunities in Software Engineering, AI Development, and Full-Stack Engineering, and I’d love to connect with people building interesting technology.
Feedback, connections, and opportunities are always welcome. 🚀
#SoftwareEngineer #AIEngineer #FullStackDeveloper #ArtificialIntelligence #SoftwareDevelopment #WebDevelopment #ReactJS #TypeScript #Portfolio #OpenToWork
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built a Cinematic Developer Portfolio Instead of a Traditional One — Here’s What I Learned</title>
      <dc:creator>GJV PAVANSAI</dc:creator>
      <pubDate>Tue, 11 Aug 2026 09:35:22 +0000</pubDate>
      <link>https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2</link>
      <guid>https://dev.to/pavansai20052004hue/i-built-a-cinematic-developer-portfolio-instead-of-a-traditional-one-heres-what-i-learned-25h2</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Cinematic Developer Portfolio Instead of a Traditional One — Here’s What I Learned
&lt;/h1&gt;

&lt;p&gt;Most developer portfolios follow the same structure:&lt;/p&gt;

&lt;p&gt;About.&lt;br&gt;&lt;br&gt;
Skills.&lt;br&gt;&lt;br&gt;
Projects.&lt;br&gt;&lt;br&gt;
Contact.&lt;/p&gt;

&lt;p&gt;There is nothing wrong with that.&lt;/p&gt;

&lt;p&gt;But when I started rebuilding mine, I wanted it to feel less like a collection of sections and more like an &lt;strong&gt;experience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So what started as a simple portfolio redesign slowly turned into a cinematic, interactive developer portfolio built around my journey as a &lt;strong&gt;Software Engineer and AI Developer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🌐 Live Portfolio:&lt;br&gt;&lt;br&gt;
&lt;a href="https://pavan-sai-portfolio-xi.vercel.app" rel="noopener noreferrer"&gt;https://pavan-sai-portfolio-xi.vercel.app&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;I wanted the visitor to feel like they were entering a story rather than opening another resume website.&lt;/p&gt;

&lt;p&gt;The final experience includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cinematic opening sequence&lt;/li&gt;
&lt;li&gt;A custom soundtrack&lt;/li&gt;
&lt;li&gt;Full-screen scene-based navigation&lt;/li&gt;
&lt;li&gt;Animated video backgrounds&lt;/li&gt;
&lt;li&gt;Project showcases and case studies&lt;/li&gt;
&lt;li&gt;A personal journey timeline&lt;/li&gt;
&lt;li&gt;Responsive mobile layouts&lt;/li&gt;
&lt;li&gt;A cinematic closing scene&lt;/li&gt;
&lt;li&gt;Smooth transitions between sections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The overall visual direction is built around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Black + Champagne Gold + Cinematic Lighting&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Portfolio Flow
&lt;/h2&gt;

&lt;p&gt;The experience follows a sequence:&lt;/p&gt;

&lt;p&gt;Intro&lt;br&gt;&lt;br&gt;
→ Pavan Sai&lt;br&gt;&lt;br&gt;
→ Hero&lt;br&gt;&lt;br&gt;
→ About&lt;br&gt;&lt;br&gt;
→ Skills&lt;br&gt;&lt;br&gt;
→ Projects&lt;br&gt;&lt;br&gt;
→ Journey&lt;br&gt;&lt;br&gt;
→ Contact&lt;br&gt;&lt;br&gt;
→ Closing Credits&lt;/p&gt;

&lt;p&gt;Instead of normal vertical scrolling, the main portfolio behaves more like a sequence of scenes.&lt;/p&gt;

&lt;p&gt;Visitors move through the experience using navigation controls.&lt;/p&gt;

&lt;p&gt;Project case studies are separate and can scroll normally because they contain more detailed technical information.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Projects
&lt;/h2&gt;

&lt;p&gt;Some of the projects featured in the portfolio include:&lt;/p&gt;

&lt;h3&gt;
  
  
  DevPilot AI
&lt;/h3&gt;

&lt;p&gt;An AI-powered DevOps incident recovery platform focused on detecting failures, diagnosing issues and helping recover production systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  ROCmPorter Agent
&lt;/h3&gt;

&lt;p&gt;An AI-assisted CUDA-to-AMD ROCm migration tool that analyzes repositories, identifies CUDA dependencies and helps generate migration changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  HunarHub
&lt;/h3&gt;

&lt;p&gt;A local skilled-worker discovery and service marketplace platform.&lt;/p&gt;

&lt;p&gt;I also showcase other engineering, AI and full-stack projects throughout the portfolio.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Part Nobody Sees 😅
&lt;/h2&gt;

&lt;p&gt;Building the visuals was actually not the hardest part.&lt;/p&gt;

&lt;p&gt;The difficult part was making everything work together.&lt;/p&gt;

&lt;p&gt;I ran into issues with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route transitions&lt;/li&gt;
&lt;li&gt;Wrong scene navigation&lt;/li&gt;
&lt;li&gt;Video cropping&lt;/li&gt;
&lt;li&gt;Blurry typography&lt;/li&gt;
&lt;li&gt;Responsive layouts&lt;/li&gt;
&lt;li&gt;Audio autoplay restrictions&lt;/li&gt;
&lt;li&gt;Music volume&lt;/li&gt;
&lt;li&gt;Duplicate video playback&lt;/li&gt;
&lt;li&gt;Project route mapping&lt;/li&gt;
&lt;li&gt;Text baked into generated visuals&lt;/li&gt;
&lt;li&gt;Mobile viewport sizing&lt;/li&gt;
&lt;li&gt;Video preloading&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Broken Git repository objects&lt;/li&gt;
&lt;li&gt;Production asset paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some bugs looked tiny but took much longer than expected.&lt;/p&gt;

&lt;p&gt;One of the biggest lessons from this project was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build. Test. Break. Debug. Improve. Repeat.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That cycle ended up defining the entire project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Readable UI vs Cinematic Artwork
&lt;/h2&gt;

&lt;p&gt;One interesting problem came from using cinematic generated artwork.&lt;/p&gt;

&lt;p&gt;Some images looked beautiful, but small text embedded inside them became blurry when displayed as video or scaled across different resolutions.&lt;/p&gt;

&lt;p&gt;The solution was simple in theory:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat the video as artwork.&lt;br&gt;&lt;br&gt;
Treat important information as HTML.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So the final architecture separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cinematic media&lt;/li&gt;
&lt;li&gt;Atmospheric effects&lt;/li&gt;
&lt;li&gt;Readability gradients&lt;/li&gt;
&lt;li&gt;Real HTML content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This made the text much sharper while keeping the cinematic look.&lt;/p&gt;




&lt;h2&gt;
  
  
  Video Performance
&lt;/h2&gt;

&lt;p&gt;Another challenge was having multiple cinematic sections without destroying performance.&lt;/p&gt;

&lt;p&gt;I avoided playing every video simultaneously.&lt;/p&gt;

&lt;p&gt;The experience instead tries to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play only relevant media&lt;/li&gt;
&lt;li&gt;Pause hidden videos&lt;/li&gt;
&lt;li&gt;Avoid aggressive preloading&lt;/li&gt;
&lt;li&gt;Use static posters as fallbacks&lt;/li&gt;
&lt;li&gt;Respect &lt;code&gt;prefers-reduced-motion&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Keep project preview videos lightweight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was especially important on mobile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Audio
&lt;/h2&gt;

&lt;p&gt;The portfolio also has its own cinematic soundtrack.&lt;/p&gt;

&lt;p&gt;But browsers do not allow websites to freely autoplay audio.&lt;/p&gt;

&lt;p&gt;So the soundtrack starts only after user interaction.&lt;/p&gt;

&lt;p&gt;The flow became:&lt;/p&gt;

&lt;p&gt;Enter Experience&lt;br&gt;&lt;br&gt;
→ soundtrack begins&lt;br&gt;&lt;br&gt;
→ cinematic intro starts&lt;br&gt;&lt;br&gt;
→ music continues through the portfolio&lt;/p&gt;

&lt;p&gt;There is also a persistent sound control so visitors can disable it anytime.&lt;/p&gt;




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

&lt;p&gt;This project reminded me that frontend development is not only about making something look good.&lt;/p&gt;

&lt;p&gt;A polished experience requires thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;li&gt;Media loading&lt;/li&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Browser behavior&lt;/li&gt;
&lt;li&gt;Production deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And sometimes the final 10% of polish takes as much effort as the first 90%.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech
&lt;/h2&gt;

&lt;p&gt;The portfolio uses technologies including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;HTML5 video&lt;/li&gt;
&lt;li&gt;Client-side routing&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Custom media handling&lt;/li&gt;
&lt;li&gt;Vercel deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also showcases my broader work across:&lt;/p&gt;

&lt;p&gt;Python, FastAPI, Node.js, Express.js, Next.js, Docker, AI systems, RAG, Elasticsearch and more.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;p&gt;The portfolio is now live:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://pavan-sai-portfolio-xi.vercel.app" rel="noopener noreferrer"&gt;https://pavan-sai-portfolio-xi.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would love feedback from other developers.&lt;/p&gt;

&lt;p&gt;Especially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does the intro feel?&lt;/li&gt;
&lt;li&gt;Is the navigation intuitive?&lt;/li&gt;
&lt;li&gt;How does it perform on your device?&lt;/li&gt;
&lt;li&gt;Which project catches your attention first?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And of course...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you find a bug, tell me. 👀&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is always one hiding somewhere.&lt;/p&gt;

&lt;p&gt;Thanks for checking it out.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>portfolio</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A huge amount of GPU code is locked to NVIDIA CUDA — `nvcc` in the build, `cudaMalloc` in the kernels, `torch.cuda` everywhere. Moving it to AMD ROCm (often cheaper and more available hardware) usually means reading the whole codebase by hand and rewriting</title>
      <dc:creator>GJV PAVANSAI</dc:creator>
      <pubDate>Wed, 22 Jul 2026 11:06:23 +0000</pubDate>
      <link>https://dev.to/pavansai20052004hue/a-huge-amount-of-gpu-code-is-locked-to-nvidia-cuda-nvcc-in-the-build-cudamalloc-in-the-5dm4</link>
      <guid>https://dev.to/pavansai20052004hue/a-huge-amount-of-gpu-code-is-locked-to-nvidia-cuda-nvcc-in-the-build-cudamalloc-in-the-5dm4</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed" class="crayons-story__hidden-navigation-link"&gt;I built a tool that migrates CUDA code to AMD ROCm — and made the AI do less, not more&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/pavansai20052004hue" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041803%2F8683d548-39a3-4ebc-87ba-19be38230a70.png" alt="pavansai20052004hue profile" class="crayons-avatar__image" width="800" height="452"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/pavansai20052004hue" class="crayons-story__secondary fw-medium m:hidden"&gt;
              GJV PAVANSAI
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                GJV PAVANSAI
                
              
              &lt;div id="story-author-preview-content-4205525" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/pavansai20052004hue" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4041803%2F8683d548-39a3-4ebc-87ba-19be38230a70.png" class="crayons-avatar__image" alt="" width="800" height="452"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;GJV PAVANSAI&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed" id="article-link-4205525"&gt;
          I built a tool that migrates CUDA code to AMD ROCm — and made the AI do less, not more
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cpp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cpp&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>coding</category>
      <category>programming</category>
      <category>software</category>
      <category>tools</category>
    </item>
    <item>
      <title>I built a tool that migrates CUDA code to AMD ROCm — and made the AI do less, not more</title>
      <dc:creator>GJV PAVANSAI</dc:creator>
      <pubDate>Wed, 22 Jul 2026 11:05:34 +0000</pubDate>
      <link>https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed</link>
      <guid>https://dev.to/pavansai20052004hue/i-built-a-tool-that-migrates-cuda-code-to-amd-rocm-and-made-the-ai-do-less-not-more-9ed</guid>
      <description>&lt;p&gt;A huge amount of GPU code is locked to NVIDIA CUDA — &lt;code&gt;nvcc&lt;/code&gt; in the build, &lt;code&gt;cudaMalloc&lt;/code&gt; in the kernels, &lt;code&gt;torch.cuda&lt;/code&gt; everywhere. Moving it to AMD ROCm (often cheaper and more available hardware) usually means reading the whole codebase by hand and rewriting every NVIDIA-specific line. Most teams never do it.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;ROCmPorter&lt;/strong&gt;. Point it at any GitHub repo and it flags every CUDA dependency with file+line evidence, scores the repo's ROCm readiness 0–100, and can open a pull request that migrates the code to HIP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live (free, no signup):&lt;/strong&gt; &lt;a href="https://rocmporter-agent.vercel.app" rel="noopener noreferrer"&gt;https://rocmporter-agent.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Source (MIT):&lt;/strong&gt; &lt;a href="https://github.com/pavansai20052004-hue/rocmporter-agent" rel="noopener noreferrer"&gt;https://github.com/pavansai20052004-hue/rocmporter-agent&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The one design decision I care about: make the AI do &lt;em&gt;less&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;The obvious way to build this is "throw the file at an LLM and ask for HIP." I didn't do that, because most of a CUDA→HIP migration isn't a judgment call — it's a lookup. &lt;code&gt;cudaMalloc&lt;/code&gt; → &lt;code&gt;hipMalloc&lt;/code&gt;. &lt;code&gt;&amp;lt;cuda_runtime.h&amp;gt;&lt;/code&gt; → &lt;code&gt;&amp;lt;hip/hip_runtime.h&amp;gt;&lt;/code&gt;. &lt;code&gt;cudaStream_t&lt;/code&gt; → &lt;code&gt;hipStream_t&lt;/code&gt;. Asking a model to do that is slow, non-deterministic, and occasionally wrong on things that have exactly one correct answer.&lt;/p&gt;

&lt;p&gt;So the engine is &lt;strong&gt;deterministic-first&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A curated hipify pass (~90 CUDA→HIP API/header/library mappings) runs first and converts the mechanical majority with &lt;strong&gt;zero AI&lt;/strong&gt;. Files it fully converts never touch a model.&lt;/li&gt;
&lt;li&gt;Only the &lt;em&gt;semantic remainder&lt;/em&gt; goes to an LLM — and that prompt is grounded in a small curated knowledge base of ROCm facts (warp size is 64 on CDNA, cuDNN→MIOpen isn't a rename, don't rewrite &lt;code&gt;torch.cuda&lt;/code&gt; device strings on ROCm builds of PyTorch, etc.).&lt;/li&gt;
&lt;li&gt;Every migrated file reports provenance: what was mechanical vs. AI-assisted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is that patches are mostly deterministic with a small, clearly-labeled AI remainder — which is exactly what you want when a human has to review the diff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compile-verified, not vibes
&lt;/h2&gt;

&lt;p&gt;A migration tool that emits code that doesn't compile is worse than useless. So generated HIP is compile-checked with &lt;code&gt;hipcc&lt;/code&gt; inside AMD's official &lt;code&gt;rocm/dev-ubuntu-22.04&lt;/code&gt; container in CI on every push. The example in the repo (&lt;code&gt;examples/vector_add&lt;/code&gt;) is machine-generated by the engine and compile-validated continuously — the badge on the README is a real build, not a claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Being honest about the limit
&lt;/h2&gt;

&lt;p&gt;It's &lt;strong&gt;compile-verified, not execution-verified&lt;/strong&gt;. I don't have AMD GPU access yet, so I can't run migrated test suites on real hardware. That's the next thing I want to add, and I'd rather say it plainly than imply otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;FastAPI backend (static analysis + hybrid engine), React frontend, and it also ships as a GitHub Action (readiness comments on PRs) and a VS Code extension (inline CUDA lock-in + one-click hipify).&lt;/p&gt;




&lt;p&gt;If you've got a CUDA repo you've been meaning to port, paste it in and tell me where the output is wrong — that feedback is exactly what improves the mapping. And if it's useful, a GitHub star helps other people find it. 🙏&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhawv3rxphkh92mg91ggx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhawv3rxphkh92mg91ggx.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>cpp</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
