<?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: Ayush Yadav</title>
    <description>The latest articles on DEV Community by Ayush Yadav (@ayush_yadav_eca833d8a3f28).</description>
    <link>https://dev.to/ayush_yadav_eca833d8a3f28</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%2F4215610%2Ff9cff29a-00f6-4cfa-9b54-65efa3231361.png</url>
      <title>DEV Community: Ayush Yadav</title>
      <link>https://dev.to/ayush_yadav_eca833d8a3f28</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayush_yadav_eca833d8a3f28"/>
    <language>en</language>
    <item>
      <title>Building an Interactive 3D Portfolio with Three.js, Next.js, and GSAP</title>
      <dc:creator>Ayush Yadav</dc:creator>
      <pubDate>Thu, 29 Oct 2026 15:34:33 +0000</pubDate>
      <link>https://dev.to/ayush_yadav_eca833d8a3f28/building-an-interactive-3d-portfolio-with-threejs-nextjs-and-gsap-eb3</link>
      <guid>https://dev.to/ayush_yadav_eca833d8a3f28/building-an-interactive-3d-portfolio-with-threejs-nextjs-and-gsap-eb3</guid>
      <description>&lt;p&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%2Fzscc3ar967pyf5mjagbl.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%2Fzscc3ar967pyf5mjagbl.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most portfolios introduce their creator through a page. I wanted mine to introduce me through a space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Night Workspace&lt;/strong&gt; is my portfolio inside an interactive, warm-lit studio. Visitors explore objects around the room to discover my projects, skills, and background.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.ayushkumar.tech/" rel="noopener noreferrer"&gt;Explore the workspace&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning a room into navigation
&lt;/h2&gt;

&lt;p&gt;The idea was to give familiar objects a purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Books on the shelf&lt;/strong&gt; represent projects and open into reading spreads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The monitor&lt;/strong&gt; introduces me and my work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The softboard&lt;/strong&gt; holds my skills, education, and experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A music player and digital clock&lt;/strong&gt; add atmosphere to the space.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selecting an object moves the camera closer to it. The challenge is making that interaction understandable without requiring visitors to learn a new interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three.js&lt;/strong&gt; for the 3D scene, objects, materials, and rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React and Next.js&lt;/strong&gt; for the application and surrounding interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GSAP&lt;/strong&gt; for animation and transitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canvas textures&lt;/strong&gt; for printed content on objects such as book pages and board notes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenge 1: text inside a 3D scene
&lt;/h2&gt;

&lt;p&gt;Text that looks good on a large texture can become difficult to read once it is mapped onto an object, viewed at an angle, and rendered on a small screen.&lt;/p&gt;

&lt;p&gt;This became particularly noticeable on mobile.&lt;/p&gt;

&lt;p&gt;I worked on several parts together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increasing the size and contrast of printed text.&lt;/li&gt;
&lt;li&gt;Moving the camera closer for reading.&lt;/li&gt;
&lt;li&gt;Increasing texture resolution for visible book pages.&lt;/li&gt;
&lt;li&gt;Reducing the effect of scene lighting on mobile board text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main lesson: texture resolution alone does not solve readability. Camera framing, contrast, and the amount of text on each surface matter too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge 2: mobile performance
&lt;/h2&gt;

&lt;p&gt;A scene that runs comfortably on a desktop can struggle on a phone.&lt;/p&gt;

&lt;p&gt;I introduced a lighter mobile rendering profile, including reduced rendering resolution during movement, smaller shadow maps, and fewer expensive visual effects.&lt;/p&gt;

&lt;p&gt;For reading views, the scene can increase resolution once movement settles. Visible book pages receive sharper textures without keeping every page at the highest resolution.&lt;/p&gt;

&lt;p&gt;I also reduced unnecessary updates when objects are idle.&lt;/p&gt;

&lt;p&gt;This is still an area I’m refining, so feedback from different devices would be useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge 3: keeping the portfolio easy to use
&lt;/h2&gt;

&lt;p&gt;The room is an experiment in presentation, but visitors still need to understand what I do and find relevant work quickly.&lt;/p&gt;

&lt;p&gt;I’m also developing ordinary text pages for project details, skills, and contact information. The interactive experience and readable content should support each other.&lt;/p&gt;

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

&lt;p&gt;Building this has made me think about a portfolio as both a graphics project and an interface.&lt;/p&gt;

&lt;p&gt;An object can look convincing but be difficult to interact with. A camera transition can feel smooth but take too long. A page can look sharp on a laptop and become unreadable on a phone.&lt;/p&gt;

&lt;p&gt;The useful work has been finding those gaps and improving them.&lt;/p&gt;

&lt;h2&gt;
  
  
  I’d appreciate your feedback
&lt;/h2&gt;

&lt;p&gt;If you try the workspace, I’d love to know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Was it clear which objects you could interact with?&lt;/li&gt;
&lt;li&gt;How did it perform on your device?&lt;/li&gt;
&lt;li&gt;Were the book pages and board notes readable?&lt;/li&gt;
&lt;li&gt;Did the room help you explore, or make anything harder to find?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you report a performance issue, please include your device and browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.ayushkumar.tech/" rel="noopener noreferrer"&gt;Visit Night Workspace →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for taking a look!&lt;/p&gt;

&lt;p&gt;— Ayush Kumar Yadav&lt;/p&gt;

</description>
      <category>threejs</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>portfolio</category>
    </item>
  </channel>
</rss>
