<?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: Syed Fraheem Ahmed</title>
    <description>The latest articles on DEV Community by Syed Fraheem Ahmed (@fraheemahmed).</description>
    <link>https://dev.to/fraheemahmed</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%2F4191229%2Fee0cc318-8a5f-40b4-bf46-1f8f0d6388b7.png</url>
      <title>DEV Community: Syed Fraheem Ahmed</title>
      <link>https://dev.to/fraheemahmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fraheemahmed"/>
    <language>en</language>
    <item>
      <title>How We Engineered Sub-Second Core Web Vitals in Next.js 15 (Real-World Architecture Lessons)</title>
      <dc:creator>Syed Fraheem Ahmed</dc:creator>
      <pubDate>Sat, 17 Oct 2026 23:06:31 +0000</pubDate>
      <link>https://dev.to/fraheemahmed/how-we-engineered-sub-second-core-web-vitals-in-nextjs-15-real-world-architecture-lessons-1ed8</link>
      <guid>https://dev.to/fraheemahmed/how-we-engineered-sub-second-core-web-vitals-in-nextjs-15-real-world-architecture-lessons-1ed8</guid>
      <description>&lt;p&gt;When building modern web applications, the difference between a prototype and a production-grade system usually comes down to three things: &lt;strong&gt;architectural discipline&lt;/strong&gt;, &lt;strong&gt;hydration overhead&lt;/strong&gt;, and &lt;strong&gt;perceived user velocity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://xynsol.com" rel="noopener noreferrer"&gt;XynSol&lt;/a&gt;, we design and engineer full-stack platforms, clinical software, and high-throughput web systems. A core part of our philosophy is &lt;em&gt;"From Effort to Effortless through Automation"&lt;/em&gt; and that extends directly to our frontend performance and cloud infrastructure.&lt;/p&gt;

&lt;p&gt;In this article, I want to break down the architectural patterns, runtime trade-offs, and performance optimizations we use to achieve &lt;strong&gt;sub-second Largest Contentful Paint (LCP)&lt;/strong&gt; and &lt;strong&gt;zero Total Blocking Time (TBT)&lt;/strong&gt; in Next.js 15 production builds.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Hidden Performance Killer: Heavy Client Runtimes
&lt;/h3&gt;

&lt;p&gt;Many web projects start with great intentions. But as features pile up, teams unknowingly introduce runtime debt:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Heavy animation libraries bundled into initial SSR:&lt;/strong&gt; Client-side motion libraries that inject runtime inline styles can easily add 30kB–50kB of parsed JavaScript to the critical path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party scripts blocking the main thread:&lt;/strong&gt; Analytics, chatbots, and tag managers firing during initial hydration spike Total Blocking Time (TBT) past 400ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flash of Invisible Content (FOIC):&lt;/strong&gt; Setting &lt;code&gt;opacity: 0&lt;/code&gt; in CSS while waiting for client hydration creates blank screens on slow cellular connections, especially on mobile devices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is how we tackle these challenges systematically.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Zero-TBT Entrance Animations: Dropping the Runtime Tax
&lt;/h3&gt;

&lt;p&gt;Instead of bundling heavy JavaScript libraries to handle basic entrance transitions, we rely on &lt;strong&gt;hardware-accelerated CSS&lt;/strong&gt; paired with lightweight, shared &lt;code&gt;IntersectionObserver&lt;/code&gt; primitives.&lt;/p&gt;

&lt;p&gt;For above-the-fold content (like heroes and primary value propositions), &lt;strong&gt;never hide content behind client hydration&lt;/strong&gt;. Render pure, semantic HTML from the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Server-rendered directly without layout shift or opacity delays&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HeroSection&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"surface-ink py-24 lg:py-32"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"main-container"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"type-eyebrow"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Software · Automation · Growth&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"type-display text-white"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          From Effort to Effortless Through Automation
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"type-lead text-muted max-w-xl"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          We design, build, and maintain production software that removes
          manual bottlenecks and scales business operations.
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By ensuring the initial server HTML is 100% visible on first paint, First Contentful Paint (FCP) drops to under 300ms, and Largest Contentful Paint occurs on the very first frame.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Defeating TBT with Asynchronous Script Deferral
&lt;/h3&gt;

&lt;p&gt;If your application uses live chat widgets or analytics platforms, running them in the primary document &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; blocks the main thread during critical hydration.&lt;/p&gt;

&lt;p&gt;We isolate third-party embeds into a non-blocking deferred module that only executes once the browser reaches idle state (&lt;code&gt;requestIdleCallback&lt;/code&gt; or after the load event):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Script&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/script&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DeferredScripts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;shouldLoad&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShouldLoad&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Wait until critical rendering and user interaction thread is free&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;requestIdleCallback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;requestIdleCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setShouldLoad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;

      &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;cancelIdleCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setShouldLoad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;shouldLoad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Script&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"third-party-analytics"&lt;/span&gt;
        &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lazyOnload"&lt;/span&gt;
        &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://www.googletagmanager.com/gtag/js?id=YOUR_ID"&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single architectural pattern eliminated over 300ms of main-thread execution time on mobile devices.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Layered Full-Stack Architecture: Next.js + Distributed Services
&lt;/h3&gt;

&lt;p&gt;Performance isn't just about client-side Lighthouse scores. It is about backend stability and database connection pooling.&lt;/p&gt;

&lt;p&gt;In production systems developed at &lt;a href="https://xynsol.com/services/web-development/" rel="noopener noreferrer"&gt;XynSol&lt;/a&gt;, we enforce strict tier separation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Clients &amp;amp; Edge Ingress ]
  ├── Next.js 15 (Edge SSR / CDN Caching)
  └── Native Mobile &amp;amp; Partner APIs
            │ (TLS 1.3 · Rate Limiter · OAuth2)
            ▼
[ Distributed Service Layer ]
  ├── TypeScript Core API / Django REST Framework
  └── Asynchronous Worker Queues (BullMQ / Celery / Redis)
            │ (PgBouncer Connection Pooling)
            ▼
[ Data &amp;amp; Persistence Layer ]
  ├── PostgreSQL 16 (ACID Relational Storage · WAL Replication)
  ├── Redis Cluster (In-Memory Hot Cache &amp;amp; Pub/Sub)
  └── S3 Compatible Object Storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why This Separation Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection Exhaustion Prevention:&lt;/strong&gt; Serverless functions spinning up can quickly exhaust PostgreSQL connection limits. Running PgBouncer or connection pools guarantees database reliability under traffic spikes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous Offloading:&lt;/strong&gt; Any task taking more than 50ms (email dispatches, PDF generation, data synchronization) is immediately pushed to background workers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Key Takeaways for Frontend &amp;amp; Full-Stack Engineers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content First, Animations Second:&lt;/strong&gt; Never allow CSS or client-side JavaScript to hide server-rendered markup with &lt;code&gt;opacity: 0&lt;/code&gt;. Progressive enhancement should add polish, not hold content hostage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Third-Party Tax:&lt;/strong&gt; A fast React application is frequently ruined by 400ms of blocking third-party scripts. Defer them to idle callbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep Your Architecture Inspectable:&lt;/strong&gt; Use strict TypeScript types across your API boundaries and database models to eliminate runtime schema errors before deployment.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Connect with the Team
&lt;/h3&gt;

&lt;p&gt;Are you optimizing web performance, scaling Next.js platforms, or building automated business software? We'd love to exchange notes and hear about your architecture challenges!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://xynsol.com" rel="noopener noreferrer"&gt;xynsol.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💼 &lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/company/xynsol" rel="noopener noreferrer"&gt;Follow XynSol on LinkedIn&lt;/a&gt; for our latest case studies, engineering articles, and software releases.&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;GitHub:&lt;/strong&gt; Check out our open-source tools and repos on &lt;a href="https://github.com/xynsol" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your thoughts or favorite performance optimization tricks in the comments below! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>typescript</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
