<?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>Forem: Adis Klobodanović</title>
    <description>The latest articles on Forem by Adis Klobodanović (@qdiss).</description>
    <link>https://forem.com/qdiss</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%2F3897170%2F29b5f2ed-4383-40aa-a2db-dfcc776f0e32.jpeg</url>
      <title>Forem: Adis Klobodanović</title>
      <link>https://forem.com/qdiss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/qdiss"/>
    <language>en</language>
    <item>
      <title>Why Your Landing Page Is Slow (And How to Fix It)</title>
      <dc:creator>Adis Klobodanović</dc:creator>
      <pubDate>Tue, 28 Apr 2026 06:52:59 +0000</pubDate>
      <link>https://forem.com/qdiss/why-your-landing-page-is-slow-and-how-to-fix-it-4ae2</link>
      <guid>https://forem.com/qdiss/why-your-landing-page-is-slow-and-how-to-fix-it-4ae2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published on &lt;a href="https://adiss.dev/blog/zato-je-tvoj-landing-page-spor-i-kako-to-popraviti" rel="noopener noreferrer"&gt;adiss.dev&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every second of delay costs you conversions. Google knows it, users feel it — and you're probably ignoring it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Actually the Problem?
&lt;/h2&gt;

&lt;p&gt;The most common causes of a slow landing page aren't complex. In 90% of cases, it comes down to three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unoptimized images that are too large&lt;/li&gt;
&lt;li&gt;JavaScript blocking rendering&lt;/li&gt;
&lt;li&gt;Fonts loading synchronously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these can add &lt;strong&gt;2–4 seconds&lt;/strong&gt; to your load time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Images Are the #1 Killer
&lt;/h2&gt;

&lt;p&gt;If you're uploading a 4MB &lt;code&gt;hero.png&lt;/code&gt; directly to your server, you've already lost the visitor before they saw your headline.&lt;/p&gt;

&lt;p&gt;The fix is simple:&lt;/p&gt;

&lt;p&gt;// Bad&lt;br&gt;
&lt;code&gt;&amp;lt;img src="/hero.png" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;// Good&lt;br&gt;
&lt;code&gt;&amp;lt;img src="/hero.webp" loading="lazy" width="1200" height="630" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;WebP format is on average &lt;strong&gt;30% smaller&lt;/strong&gt; than PNG at the same quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript Blocks Everything
&lt;/h2&gt;

&lt;p&gt;React apps have a specific problem — bundle size. If you load all components at once, the browser has to parse hundreds of KB of code before rendering anything.&lt;/p&gt;

&lt;p&gt;The fix is lazy loading:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const HeavyComponent = lazy(() =&amp;gt; import('./HeavyComponent'));&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I use this on my own portfolio — each section loads only when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fonts — The Silent Culprit
&lt;/h2&gt;

&lt;p&gt;Google Fonts are convenient but slow if you don't use them correctly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;!-- Bad — blocks rendering --&amp;gt;&lt;br&gt;
&amp;lt;link href="https://fonts.googleapis.com/css2?family=Inter" rel="stylesheet" /&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;code&gt;&amp;lt;!-- Good — non-blocking --&amp;gt;&lt;br&gt;
&amp;lt;link href="..." rel="stylesheet" media="print" onload="this.media='all'" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Measure
&lt;/h2&gt;

&lt;p&gt;Two tools I use every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lighthouse&lt;/strong&gt; — built into Chrome DevTools, gives a score from 0–100&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PageSpeed Insights&lt;/strong&gt; — Google's tool, shows real-world data&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal isn't a perfect score. The goal is the user seeing content within 2 seconds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fix Order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Convert all images to WebP&lt;/li&gt;
&lt;li&gt;Add lazy loading to components&lt;/li&gt;
&lt;li&gt;Optimize font loading&lt;/li&gt;
&lt;li&gt;Measure results&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each of these can be implemented in &lt;strong&gt;under an hour&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build fast, clean websites for small businesses in Bosnia and beyond. Check out &lt;a href="https://adiss.dev" rel="noopener noreferrer"&gt;adiss.dev&lt;/a&gt; if you need one.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>performance</category>
    </item>
    <item>
      <title>How I Built My Portfolio With React, Vite &amp; Supabase (and what I learned)</title>
      <dc:creator>Adis Klobodanović</dc:creator>
      <pubDate>Sat, 25 Apr 2026 07:47:26 +0000</pubDate>
      <link>https://forem.com/qdiss/how-i-built-my-portfolio-with-react-vite-supabase-and-what-i-learned-2319</link>
      <guid>https://forem.com/qdiss/how-i-built-my-portfolio-with-react-vite-supabase-and-what-i-learned-2319</guid>
      <description>&lt;p&gt;I just launched &lt;a href="https://adiss.dev" rel="noopener noreferrer"&gt;adiss.dev&lt;/a&gt; - my personal portfolio and freelance landing page. Built with React + Vite, Supabase for the blog CMS, deployed on Vercel.&lt;/p&gt;

&lt;p&gt;In this post I'll share what I built, why I made specific decisions, and a few things I'd do differently.&lt;/p&gt;

&lt;p&gt;Full blog at &lt;a href="https://adiss.dev" rel="noopener noreferrer"&gt;adiss.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
