<?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: YOGA VIGNESH S</title>
    <description>The latest articles on DEV Community by YOGA VIGNESH S (@yogavigneshengineer).</description>
    <link>https://dev.to/yogavigneshengineer</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%2F3646470%2Fbcd774d2-1bf2-4fa9-be73-8734b2efb894.png</url>
      <title>DEV Community: YOGA VIGNESH S</title>
      <link>https://dev.to/yogavigneshengineer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yogavigneshengineer"/>
    <language>en</language>
    <item>
      <title>From Mechanical Engineer to Full-Stack: Building a 98 Lighthouse Portfolio with React + Three.js</title>
      <dc:creator>YOGA VIGNESH S</dc:creator>
      <pubDate>Sat, 06 Dec 2025 13:20:47 +0000</pubDate>
      <link>https://dev.to/yogavigneshengineer/from-mechanical-engineer-to-full-stack-building-a-98-lighthouse-portfolio-with-react-threejs-5hml</link>
      <guid>https://dev.to/yogavigneshengineer/from-mechanical-engineer-to-full-stack-building-a-98-lighthouse-portfolio-with-react-threejs-5hml</guid>
      <description>&lt;h1&gt;
  
  
  The Journey
&lt;/h1&gt;

&lt;p&gt;6 months ago, I was designing mechanical systems. Today, I'm shipping React apps with 98/100 Lighthouse scores.&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://yogavignesh.me" rel="noopener noreferrer"&gt;https://yogavignesh.me&lt;/a&gt;&lt;br&gt;
💻 GitHub: &lt;a href="https://github.com/yogavignesh-engineer/yogavignesh.me" rel="noopener noreferrer"&gt;https://github.com/yogavignesh-engineer/yogavignesh.me&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Build a portfolio that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shows my mechanical engineering background&lt;/li&gt;
&lt;li&gt;Demonstrates modern web dev skills&lt;/li&gt;
&lt;li&gt;Maintains 60fps with 3D + animations&lt;/li&gt;
&lt;li&gt;Loads fast (sub-2s FCP)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack &amp;amp; Why
&lt;/h2&gt;

&lt;p&gt;[Your tech stack section]&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Lessons
&lt;/h2&gt;

&lt;p&gt;[Your optimization techniques]&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Deep Dive
&lt;/h2&gt;

&lt;p&gt;[Show interesting React patterns]&lt;/p&gt;

&lt;h2&gt;
  
  
  Metrics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;98/100 Lighthouse&lt;/li&gt;
&lt;li&gt;327KB gzipped&lt;/li&gt;
&lt;li&gt;60fps animations&lt;/li&gt;
&lt;li&gt;Mobile-optimized&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;[Your learnings]&lt;/p&gt;

&lt;p&gt;Would love your feedback! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Physics in the Browser: How I Built a Beam Stress Visualizer with React &amp; Three.js</title>
      <dc:creator>YOGA VIGNESH S</dc:creator>
      <pubDate>Thu, 04 Dec 2025 14:06:30 +0000</pubDate>
      <link>https://dev.to/yogavigneshengineer/physics-in-the-browser-how-i-built-a-beam-stress-visualizer-with-react-threejs-nem</link>
      <guid>https://dev.to/yogavigneshengineer/physics-in-the-browser-how-i-built-a-beam-stress-visualizer-with-react-threejs-nem</guid>
      <description>&lt;p&gt;&lt;strong&gt;"&lt;/strong&gt;You're a mechanical engineer? Why are you coding*&lt;em&gt;?"&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;I get asked this in every interview. The assumption is always that engineering and web development are opposites. One deals with steel and forces; the other deals with DOM nodes and pixels.&lt;/p&gt;

&lt;p&gt;I disagree. To me, a React component is just a machine with inputs (props) and outputs (UI).&lt;/p&gt;

&lt;p&gt;So when I built my portfolio (yogavignesh.me), I didn't want a static "About Me" page. I wanted to prove that the web can handle real engineering physics.&lt;/p&gt;

&lt;p&gt;I built a Beam Deflection Visualizer that calculates stress and bending moments in real-time at 60FPS. Here is the engineering behind the code.      &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Material Data
First, I mapped real-world material properties to JavaScript objects.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`// src/components/BeamVisualizer.jsx&lt;/p&gt;

&lt;p&gt;const materials = {&lt;br&gt;
  steel: { &lt;br&gt;
    name: 'Structural Steel', &lt;br&gt;
    E: 200, // Young's Modulus in GPa&lt;br&gt;
    density: 7850&lt;br&gt;
  },&lt;br&gt;
  aluminum: { &lt;br&gt;
    name: 'Aluminum 6061', &lt;br&gt;
    E: 69, &lt;br&gt;
    density: 2700&lt;br&gt;
  },&lt;br&gt;
  wood: { &lt;br&gt;
    name: 'Oak Timber', &lt;br&gt;
    E: 11, &lt;br&gt;
    density: 750&lt;br&gt;
  }&lt;br&gt;
};`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Calculation Loop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I used useCallback to memoize the physics calculation. This prevents React from recalculating the physics on every single frame unless the force or material changes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// Calculating deflection based on Hooke's Law approximation&lt;br&gt;
const calculateDeflection = useCallback(() =&amp;gt; {&lt;br&gt;
  const E = materials[material].E;&lt;br&gt;
  // Simplified deflection logic for visual representation&lt;br&gt;
  // Force / Modulus = Raw Deflection Factor&lt;br&gt;
  const rawDeflection = (force / E); &lt;br&gt;
  return rawDeflection;&lt;br&gt;
}, [force, material, materials]);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visualizing Stress with SVG Paths&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is where the "Front End" meets "Mechanical."&lt;/p&gt;

&lt;p&gt;Instead of using a heavy 3D model for the beam bending, I used a dynamic SVG Path. By manipulating the Bézier curve control points based on the calculated deflection, I can simulate bending smoothly.&lt;/p&gt;

&lt;p&gt;`// 3. VISUALIZATION LOGIC&lt;br&gt;
const deflectionVal = useMemo(() =&amp;gt; calculateDeflection(), [calculateDeflection]);&lt;/p&gt;

&lt;p&gt;// Clamp the visual bending so it doesn't break the UI&lt;br&gt;
const maxPixels = 100; &lt;br&gt;
const curveDepth = useMemo(() =&amp;gt; Math.min(deflectionVal * 0.8, maxPixels), [deflectionVal]); &lt;/p&gt;

&lt;p&gt;// The Magic: A Quadratic Bézier Curve (Q) that updates dynamically&lt;br&gt;
const beamPath = useMemo(() =&amp;gt; &lt;br&gt;
  &lt;code&gt;M 40 150 Q 250 ${150 + curveDepth} 460 150&lt;/code&gt;, &lt;br&gt;
[curveDepth]);`&lt;/p&gt;

&lt;p&gt;By binding curveDepth to the Y-axis of the control point, the beam "bends" organically as the user drags the force slider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling 60FPS Interactions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since this is an interactive portfolio, performance is key. I didn't want the animations to lag on mobile devices.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Memoization: Every calculation is wrapped in useMemo or useCallback.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GPU Acceleration: I used Framer Motion for the UI elements, which handles transform changes on the GPU thread rather than the main thread&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intersection Observer: The grid background animation pauses automatically when the user scrolls away from the component (saving battery life).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;// Pausing animations when off-screen&lt;br&gt;
const observer = new IntersectionObserver(&lt;br&gt;
  (entries) =&amp;gt; {&lt;br&gt;
    if (entries[0].isIntersecting) {&lt;br&gt;
      gridBg.classList.remove('paused');&lt;br&gt;
    } else {&lt;br&gt;
      gridBg.classList.add('paused');&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  { threshold: 0.01 }&lt;br&gt;
);&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;The final result is a "Digital Twin" of a mechanical stress test. It’s not just a fancy animation; it’s accurate to the material properties. Steel resists bending 3x more than Aluminum, just like in real life.&lt;/p&gt;

&lt;p&gt;You can play with the live simulator here: yogavignesh.me&lt;/p&gt;

&lt;p&gt;I’m currently looking for roles that bridge the gap between Hardware/Engineering and Full Stack Development. If you're building digital twins or IoT dashboards, let's talk.&lt;/p&gt;

&lt;p&gt;Tech Stack: React, Three.js, Framer Motion, Tailwind.&lt;/p&gt;

&lt;h1&gt;
  
  
  react #webdev #engineering #threejs #javascript
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
