<?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: Alex Lanção </title>
    <description>The latest articles on DEV Community by Alex Lanção  (@lancao2).</description>
    <link>https://dev.to/lancao2</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%2F4064167%2F73cd4967-ac59-4012-a6b9-a61abac809eb.png</url>
      <title>DEV Community: Alex Lanção </title>
      <link>https://dev.to/lancao2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lancao2"/>
    <language>en</language>
    <item>
      <title>Why I stopped making "landing pages" and turned my portfolio into an OS</title>
      <dc:creator>Alex Lanção </dc:creator>
      <pubDate>Sat, 29 Aug 2026 12:35:26 +0000</pubDate>
      <link>https://dev.to/lancao2/why-i-stopped-making-landing-pages-and-turned-my-portfolio-into-an-os-546e</link>
      <guid>https://dev.to/lancao2/why-i-stopped-making-landing-pages-and-turned-my-portfolio-into-an-os-546e</guid>
      <description>&lt;p&gt;If you are a Front-end or Full Stack developer, you’ve probably been through this: you build a great-looking portfolio, put up a picture of yourself, list your skills with progress bars (which don't really mean much), and add links to your GitHub.&lt;/p&gt;

&lt;p&gt;The problem with this standard "institutional page" model is that it only tells people what you know how to do. I wanted a portfolio that proved what I know how to do. The famous "Show, don't tell."&lt;/p&gt;

&lt;p&gt;It was with this mindset that I decided to step away from the obvious and rebuild my portfolio from scratch. The goal wasn't just to have a showcase for recruiters, but to force myself to face real architectural challenges that I encounter in my day-to-day work.&lt;/p&gt;

&lt;p&gt;The idea: An interactive portfolio (macOS Replica)&lt;/p&gt;

&lt;p&gt;I decided to create an ecosystem running straight in the browser, simulating an operating system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    Project link: &lt;a href="https://www.alexlan.com.br/" rel="noopener noreferrer"&gt;https://www.alexlan.com.br/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;    Repository: &lt;a href="https://github.com/lancao2/portfolio-alexlan.com" rel="noopener noreferrer"&gt;https://github.com/lancao2/portfolio-alexlan.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More than the aesthetics, what motivated me were the technical "pain points" that a project like this brings. Developing a highly interactive portfolio simulates complex engineering problems. I've highlighted here some of the main challenges I faced and how I solved them:&lt;br&gt;
The hell of cascading re-renders (Drag &amp;amp; Z-Index)&lt;/p&gt;

&lt;p&gt;The window manager was, by far, the trickiest part. How do you handle dozens of windows that need focus, dynamic z-index, and simultaneous dragging without killing React with re-renders?&lt;/p&gt;

&lt;p&gt;The solution was to divide responsibilities. The orchestration logic (which app is open, which has focus) I kept in a traditional Context API. But the physics of dragging (the X/Y coordinates) was isolated. I delegated the movement to Framer Motion, which mutates the CSS transform directly in the DOM (requestAnimationFrame).&lt;/p&gt;

&lt;p&gt;In other words: I can drag a window across the screen at a constant 60fps without React even knowing about it. The global state is only updated at the exact moment of the click, just to change the window's priority.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real functionality vs. "Pretty Mockup"
&lt;/h3&gt;

&lt;p&gt;I didn't want it to be just a visual toy; it needed to have utility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    Integrated Scheduler: Right in the Menu Bar (the top clock), I embedded my Google Calendar schedule. Anyone can open it and book a 30-minute chat with me right there, friction-free.&lt;/li&gt;
&lt;li&gt;    Messaging App: A functional chat connected to a MySQL database (hosted on Aiven via Prisma ORM) where it's possible to send me a direct message through the "system".&lt;/li&gt;
&lt;li&gt;    Hybrid Mobile First: A desktop interface doesn't fit on a mobile screen. Instead of blocking mobile users, the system restructures the layout (the "Finder" turns into a native bottom tab navigation).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why I recommend making out-of-the-box portfolios
&lt;/h3&gt;

&lt;p&gt;Institutional projects are easy. They will rarely test your limits on global state management, performance optimization, advanced componentization, or DOM interaction.&lt;/p&gt;

&lt;p&gt;When you try to build something non-standard (a window system, a simple game, an interactive data visualization tool), you run into architectural problems that large companies face all the time. You train for the market while building your own personal brand.&lt;/p&gt;

&lt;p&gt;I invite you all to test the application out and, most importantly, take a look at the source code! I'd love to hear your thoughts on the architecture I used and how you would solve the window management problem.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>react</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
