<?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 Ahmed Mohi Uddin Hasan</title>
    <description>The latest articles on DEV Community by Syed Ahmed Mohi Uddin Hasan (@syedahmedx3).</description>
    <link>https://dev.to/syedahmedx3</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%2F3814417%2Fe2a31af2-6f0c-4306-8038-f6cae0ff0ee3.jpg</url>
      <title>DEV Community: Syed Ahmed Mohi Uddin Hasan</title>
      <link>https://dev.to/syedahmedx3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syedahmedx3"/>
    <language>en</language>
    <item>
      <title>A green pipeline means nothing if your test suite is written to validate its own hallucinations.

Stop letting AI write post-hoc tests for code it just generated. Here is why Spec-First TDD is non-negotiable for AI engineering: 👇

#ai #webdev #programming</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Sat, 15 Aug 2026 08:05:54 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/a-green-pipeline-means-nothing-if-your-test-suite-is-written-to-validate-its-own-hallucinations-50l</link>
      <guid>https://dev.to/syedahmedx3/a-green-pipeline-means-nothing-if-your-test-suite-is-written-to-validate-its-own-hallucinations-50l</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c" class="crayons-story__hidden-navigation-link"&gt;The AI Test Illusion&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/syedahmedx3" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3814417%2Fe2a31af2-6f0c-4306-8038-f6cae0ff0ee3.jpg" alt="syedahmedx3 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/syedahmedx3" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Syed Ahmed Mohi Uddin Hasan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Syed Ahmed Mohi Uddin Hasan
                
                
              
              &lt;div id="story-author-preview-content-4402177" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/syedahmedx3" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3814417%2Fe2a31af2-6f0c-4306-8038-f6cae0ff0ee3.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Syed Ahmed Mohi Uddin Hasan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 15&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c" id="article-link-4402177"&gt;
          The AI Test Illusion
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The AI Test Illusion</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Sat, 15 Aug 2026 08:03:27 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c</link>
      <guid>https://dev.to/syedahmedx3/the-ai-test-illusion-3j7c</guid>
      <description>&lt;p&gt;As AI coding assistants like Claude Code, Cursor, and GitHub Copilot become daily drivers in modern software engineering, a dangerous pattern has emerged in many team pipelines: letting LLMs generate unit tests for code they just wrote.&lt;/p&gt;

&lt;p&gt;It feels efficient on the surface. The AI writes a feature, writes the test suite, the tests run, and the pipeline turns green.&lt;/p&gt;

&lt;p&gt;However, relying on post-hoc test generation creates a massive structural blind spot one that software engineering researchers and core maintainers have now quantified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Flaw of Post-Hoc AI Tests: Confirmation Bias&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When an LLM generates a feature, its context window contains the exact logic, assumptions, and potential edge-case omissions that produced that code.&lt;/p&gt;

&lt;p&gt;If you prompt the model right after with "now write unit tests for this code," the model uses its generated code as its ground truth. Instead of asking "What should this code do according to business requirements?", the LLM asks "What does this code currently do?"&lt;/p&gt;

&lt;p&gt;If the feature code contains a subtle logic bug, the LLM will generate test assertions that validate that exact bug as expected behaviour. The pipeline passes, but all you have done is automate confirmation bias.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What the Empirical Data Says: Low Mutation Scores&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't just a theoretical concern, software testing metrics prove it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High Coverage, Low Mutation Detection:&lt;/strong&gt; Studies evaluating LLM-generated unit tests using Mutation Testing (deliberately injecting artificial bugs into code to see if tests catch them) reveal a stark reality. While post-hoc LLM tests achieve high line coverage, they often have low mutation scores, sometimes under 15%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Green Suite Illusion:&lt;/strong&gt; Because post-hoc tests mirror implementation rather than boundary rules, they pass even when underlying business logic is intentionally corrupted.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. The Context Engineering Misconception&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A common counterargument is that adding spec requirements into context files like CLAUDE.md bloats the context window and degrades model performance.&lt;/p&gt;

&lt;p&gt;This conflates two completely different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repository Rules (CLAUDE.md / System Guidelines):&lt;/strong&gt; This should strictly remain lightweight, defining architectural patterns, tech stacks, and formatting constraints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feature Specifications (Issues, API Contracts, Specs):&lt;/strong&gt; Feature requirements belong in dedicated issue files, OpenAPI contracts, or spec files passed during feature generation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt; Spec-First (TDD) Grounding&lt;/p&gt;

&lt;p&gt;Whether you use a single agent loop or a sub-agent setup, the core rule of reliable AI engineering remains Test-Driven Development (TDD):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[ External Spec / Ticket ] ---&amp;gt; [ Generate Assertions / Tests ] ---&amp;gt; &lt;br&gt;
[ Generate Feature Code ] ---&amp;gt; [ Verify ]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When test assertions are anchored to an external requirement before or alongside code generation, the LLM is forced to evaluate its implementation against an unyielding standard, eliminating false positives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI is an incredible force multiplier, but green pipelines mean nothing if your test suite is written to validate its own hallucinations. &lt;/p&gt;

&lt;p&gt;By decoupling test requirements from post-hoc code generation and enforcing spec-first engineering, teams can leverage AI safely without shipping silent production bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References &amp;amp; Further Reading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arxiv.org/abs/2506.02954" rel="noopener noreferrer"&gt;1. Mutation-Guided Unit Test Generation with LLMs (IEEE/ACM International Conference on Automated Software Engineering)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arxiv.org/abs/2404.00971" rel="noopener noreferrer"&gt;2. Beyond Functional Correctness: Exploring Hallucinations in LLM-Generated Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openreview.net/forum?id=sqciWyTm70" rel="noopener noreferrer"&gt;3. Evaluating Test-Driven Development in LLM-Based Code Generation (ACM Transactions on Software Engineering)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Frontend World Just Changed: 5 Shifts for 2026</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Tue, 21 Apr 2026 10:48:38 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/the-frontend-world-just-changed-5-shifts-for-2026-o79</link>
      <guid>https://dev.to/syedahmedx3/the-frontend-world-just-changed-5-shifts-for-2026-o79</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The React Compiler Killed Manual Optimisation. Handwriting. useMemo or useCallback is now like manual memory management. Since the v1.0 release, the compiler handles performance at build time. Write simpler code; let the toolchain optimise it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Rendering Debate is Dead Stop choosing one strategy per app. Hybrid rendering is now per-component. Static parts load instantly while dynamic elements stream. If you aren't mixing SSR/SSG/CSR, you’re leaving performance on the table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessibility is Legally Enforced. The EAA (June 2025) made accessibility mandatory. Semantic HTML and ARIA roles are now legal requirements, not "nice-to-haves." Retrofitting costs 10x more—bake it in from day one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TypeScript is the baseline. Plain JS is legacy. With the rise of end-to-end safety (tRPC, Zod, Drizzle), an "Architecture-First" approach is the only way to avoid quite technical debt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI IDEs are the Standard Success in 2026 is about the split: AI handles the boilerplate and scaffolding; you own the architecture and critical trade-offs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Pattern? Tools have matured. Our job is shifting from assembling frameworks to shaping product strategy. Adapt now, or fall behind the competition.&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>frontend</category>
      <category>uidesign</category>
    </item>
    <item>
      <title>Why Git Mastery is Non-Negotiable</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Mon, 13 Apr 2026 13:45:18 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/why-git-mastery-is-non-negotiable-1d2b</link>
      <guid>https://dev.to/syedahmedx3/why-git-mastery-is-non-negotiable-1d2b</guid>
      <description>&lt;p&gt;The Complete Git &amp;amp; GitHub Workflow Reference for Modern Developers&lt;/p&gt;

&lt;p&gt;Every developer knows the basic commands: add, commit, and push. But when a merge conflict breaks the build, or you need to recover lost work from three days ago, the difference between a junior and a senior developer is how deeply they understand their version control system.&lt;/p&gt;

&lt;p&gt;I’ve compiled the "Ultimate Git &amp;amp; GitHub Workflow Cheat Sheet" to bridge that gap. This isn't just a list of commands; it’s a comprehensive guide to the professional developer’s daily workflow.&lt;/p&gt;

&lt;p&gt;What this guide covers:&lt;/p&gt;

&lt;p&gt;Foundational Architecture: Understanding the three-stage workflow between your working directory, staging area, and local repository.&lt;/p&gt;

&lt;p&gt;The "Parallel Universe" Strategy: How to use branching to experiment fearlessly without ever touching your production-ready code.&lt;/p&gt;

&lt;p&gt;History Management: The critical differences between merging and rebasing, and the "Golden Rule" of when to use each.&lt;/p&gt;

&lt;p&gt;Emergency Recovery: Step-by-step instructions for undoing uncommitted changes, amending mistakes, and using "selective surgery" through cherry-picking.&lt;/p&gt;

&lt;p&gt;Team Collaboration: Mastering the Pull Request (PR) workflow, forking open-source projects, and managing remote-tracking branches.&lt;/p&gt;

&lt;p&gt;Automation &amp;amp; Efficiency: A deep dive into the GitHub CLI to speed up your terminal work and the basics of CI/CD with GitHub Actions.&lt;/p&gt;

&lt;p&gt;Why every developer should have this:&lt;/p&gt;

&lt;p&gt;Git is essentially a time machine for your code. Using it correctly ensures that your project history remains linear, clean, and most importantly, reversible. &lt;/p&gt;

&lt;p&gt;Whether you are prepping for your first job or looking to lead a team, these are the fundamental insights required to work at scale.&lt;/p&gt;

&lt;p&gt;A few core habits to start today:&lt;/p&gt;

&lt;p&gt;Commit early and often to make changes easier to understand and revert.&lt;/p&gt;

&lt;p&gt;Always pull before you push to stay in sync with your team and avoid unnecessary conflicts.&lt;/p&gt;

&lt;p&gt;Never work directly on your main branch—branches are your safest friend.&lt;/p&gt;

&lt;p&gt;Check out the link below for the full PDF for the complete breakdown and copy-paste command sequences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/syedahmedhasanx3_git-github-workflow-reference-for-modern-ugcPost-7449415719093477376-jyGM?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAFy4nBMBEXY_M_LnIgAHcQzG1OYyMdMvpYE" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/syedahmedhasanx3_git-github-workflow-reference-for-modern-ugcPost-7449415719093477376-jyGM?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAFy4nBMBEXY_M_LnIgAHcQzG1OYyMdMvpYE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Created by Syed Ahmed Mohi Uddin Hasan&lt;br&gt;
Full-Stack Web Developer&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>coding</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Is your "Clean Code" actually Production-Grade?</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Wed, 08 Apr 2026 12:35:17 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/is-your-clean-code-actually-production-grade-26i4</link>
      <guid>https://dev.to/syedahmedx3/is-your-clean-code-actually-production-grade-26i4</guid>
      <description>&lt;p&gt;We are often taught that clean code is readable code. But in high-performance enterprise systems, readability is only half the battle. &lt;br&gt;
If it isn't performant, it isn't professional.&lt;/p&gt;

&lt;p&gt;True Senior Engineering lives in the micro-details that most developers overlook:&lt;/p&gt;

&lt;p&gt;1️⃣Dependency Hygiene: Stop passing objects into React hooks. Reference equality issues lead to "silent" re-render loops that kill mobile performance. &lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fjhi6xcog517vfh8y29a9.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.amazonaws.com%2Fuploads%2Farticles%2Fjhi6xcog517vfh8y29a9.png" alt="Primitive vs. Object Dependencies" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ The Layout Thrashing Trap: "Clean CSS" can still be slow. If your JavaScript is fighting the browser's rendering engine by constantly reading and writing geometry, your UI will feel "janky." &lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fb7wjczqy71x26y7nvqe5.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.amazonaws.com%2Fuploads%2Farticles%2Fb7wjczqy71x26y7nvqe5.png" alt="Eliminating Layout Thrashing" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ Defensive Schema Design: Production-grade apps move the heavy lifting to the database layer. Use SQL Views and Row-Level Security (RLS) to keep the frontend "thin," fast, and secure.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F2rjrsa637btek49wxd1o.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.amazonaws.com%2Fuploads%2Farticles%2F2rjrsa637btek49wxd1o.png" alt="Defensive Schema Design" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are the invisible details that separate a standard codebase from a scalable, high-speed architecture.&lt;/p&gt;

&lt;p&gt;Which of these bottlenecks have you encountered in your projects? Let’s talk tech below! 👇&lt;/p&gt;

</description>
      <category>react</category>
      <category>css</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Beyond Basic Styling: Why I’m Architecture-First with the Modern CSS Trilogy</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Sat, 28 Mar 2026 18:34:34 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/beyond-basic-styling-why-im-architecture-first-with-the-modern-css-trilogy-2eam</link>
      <guid>https://dev.to/syedahmedx3/beyond-basic-styling-why-im-architecture-first-with-the-modern-css-trilogy-2eam</guid>
      <description>&lt;p&gt;The*&lt;em&gt;Wall of Text&lt;/em&gt;*era of CSS is over. If you’re still fighting specificity wars or using useEffect to toggle a parent class, you’re fighting the browser engine rather than leveraging it.&lt;/p&gt;

&lt;p&gt;In my latest project work, I’ve moved away from "manual" styling toward a philosophy of Efficiency, Weightlessness, and Relationships. &lt;/p&gt;

&lt;p&gt;This shift is mandatory for anyone building professional-grade component libraries today. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Strategic Shift:&lt;/strong&gt; Efficiency through Consolidation: Moving beyond redundant repetition to create "forgiving" selector blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weightless Defaults:&lt;/strong&gt; Setting global resets that never "fight" your components, eliminating the need for !important forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relational Intelligence:&lt;/strong&gt; Letting the container "know" its content. &lt;/p&gt;

&lt;p&gt;This moves UI logic from heavy scripts into the lightning-fast CSS engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get the Technical Blueprint:&lt;/strong&gt; For a deep dive into the implementation details, performance benchmarks, and code refactors mentioned above, download the full whitepaper: &lt;a href="https://github.com/syedahmedx3/modern-css-mastery/raw/main/The-Modern-CSS-Trilogy/The%20Modern%20CSS%20Trilogy.pdf" rel="noopener noreferrer"&gt;https://github.com/syedahmedx3/modern-css-mastery/raw/main/The-Modern-CSS-Trilogy/The%20Modern%20CSS%20Trilogy.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m curious to hear your insights:&lt;/strong&gt; How has moving your state logic from JS to CSS changed your Cumulative Layout Shift (CLS) or overall performance metrics? Let's talk in the comments! 👇&lt;/p&gt;

</description>
      <category>moderncss</category>
      <category>webperf</category>
      <category>frontendchallenge</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why Your React Scroll is Lagging (and how to fix it with Locomotive v5</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Wed, 25 Mar 2026 11:40:18 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/why-your-react-scroll-is-lagging-and-how-to-fix-it-with-locomotive-v5-2dp8</link>
      <guid>https://dev.to/syedahmedx3/why-your-react-scroll-is-lagging-and-how-to-fix-it-with-locomotive-v5-2dp8</guid>
      <description>&lt;p&gt;The Problem: The "Jank" Struggle&lt;br&gt;
In traditional web development, scrolling is a passive browser event. When the Main Thread is busy with heavy React renders or API calls, your scroll stutters. This is Jank, and it kills the premium feel of high-end sites.&lt;/p&gt;

&lt;p&gt;The Solution: Virtual Scroll Paradigm&lt;br&gt;
I recently built a mastery framework to solve this. Version 5 of Locomotive Scroll (built on the Lenis engine) changes the game. Here is the theoretical core:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Virtual vs. Main Thread&lt;br&gt;
Native scrolling relies on the browser's main thread. If your JS execution is heavy, the scroll lags. Locomotive v5 intercepts wheel events and calculates a custom trajectory, ensuring a consistent 60 FPS experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sub-Pixel Precision&lt;br&gt;
Native scrolling moves in whole pixels, creating a "staircase effect." By moving in decimals (e.g., 1.1px), we achieve "buttery" smoothness on 120Hz displays.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The "Saudi Web" Standard (RTL)&lt;br&gt;
Working in the KSA market, I realised most animation libraries break with Arabic localisation. In this repo, I demonstrate how to use Logical Properties (margin-inline-start), so your parallax effects work seamlessly in both English and Arabic.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🚀 Show Me The Code&lt;br&gt;
The heart of this repo is the optimised useLocomotive hook. It includes a ResizeObserver to handle dynamic React content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/hooks/useLocomotive.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useLocomotive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scrollRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&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="nx"&gt;scrollRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LocomotiveScroll&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;autoStart&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="na"&gt;lenisOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lerp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;options&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;resizeObserver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ResizeObserver&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;scrollRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

    &lt;span class="nx"&gt;resizeObserver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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="nx"&gt;scrollRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;destroy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nx"&gt;resizeObserver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&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="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;scrollRef&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;Get the Full Framework&lt;br&gt;
I've open-sourced the entire setup, including a 4-page Technical Masterclass PDF covering GSAP syncing and performance math.&lt;/p&gt;

&lt;p&gt;🔥 GitHub Repo: &lt;a href="https://github.com/AhmedHasanx3/locomotive-scroll-react-mastery" rel="noopener noreferrer"&gt;https://github.com/AhmedHasanx3/locomotive-scroll-react-mastery&lt;/a&gt;&lt;br&gt;
💼 Portfolio: &lt;a href="https://ahmedhasanx3.github.io/Portfolio/" rel="noopener noreferrer"&gt;https://ahmedhasanx3.github.io/Portfolio/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this helps your project, please give the repo a Star ⭐! I am also currently open to new opportunities in Front-End/Full-Stack roles—feel free to reach out!&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Boosted Page Load Speeds by 25% Using Modern Asset Delivery</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Mon, 16 Mar 2026 12:57:22 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/how-i-boosted-page-load-speeds-by-25-using-modern-asset-delivery-37fd</link>
      <guid>https://dev.to/syedahmedx3/how-i-boosted-page-load-speeds-by-25-using-modern-asset-delivery-37fd</guid>
      <description>&lt;p&gt;We’ve all been there: You build a "pixel-perfect" UI with smooth GSAP animations, only to watch your Lighthouse score tank because of heavy assets. In a high-stakes market like Saudi Arabia, where mobile-first indexing and varying network speeds are the norm, a 2-second delay can result in a 20% drop in conversions.&lt;/p&gt;

&lt;p&gt;Recently, I reduced the initial load time of a production real estate platform by 25%. Here’s the "no-fluff" breakdown of the modern asset delivery strategy I used.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The "Next-Gen" Format Pivot
Standard JPEGs and PNGs are the silent killers of performance. I moved the entire asset pipeline to WebP and AVIF.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Result: We saw a 30-40% reduction in file size without visible quality loss.&lt;/p&gt;

&lt;p&gt;Pro Tip: Don't just convert them; serve them conditionally using the  tag so legacy browsers don't break.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implementing Priority Hints
Not all assets are created equal. I used fetchpriority to tell the browser exactly what to focus on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;LCP Hero Image: Added fetchpriority="high" to the main banner.&lt;/p&gt;

&lt;p&gt;Non-Critical Scripts: Used defer and fetchpriority="low" for third-party tracking pixels.&lt;br&gt;
This ensured the "Above the Fold" content was interactive while the rest of the app hydrated in the background.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The GSAP Optimisation Trick
I love using GSAP for cinematic effects, but it can be heavy if not managed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of loading the entire library, I imported only the necessary plugins (ScrollTrigger, Flip).&lt;/p&gt;

&lt;p&gt;I initialised animations only after the main thread was free, ensuring the initial "First Contentful Paint" was lightning-fast.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edge Delivery (CDN) &amp;amp; KSA Specifics
Since the target audience was in Al Khobar and Riyadh, using a CDN with local "Edge" nodes was non-negotiable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By caching static assets closer to the user, we reduced the Time to First Byte (TTFB) significantly.&lt;/p&gt;

&lt;p&gt;We also implemented aggressive Cache-Control headers for assets that rarely change (fonts, brand logos).&lt;/p&gt;

&lt;p&gt;The Results by the time we were done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lighthouse Performance Score: Jumped from 78 to 100.&lt;/li&gt;
&lt;li&gt;Page Load Speed: 25% faster on average on 4G connections.&lt;/li&gt;
&lt;li&gt;User Retention: Noticeable improvement in session duration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Takeaway: Performance isn't a one-time task; it's a series of small, intentional architectural choices. If you aren't auditing your network tab daily, you're leaving speed on the table.&lt;/p&gt;

&lt;p&gt;What’s your go-to "quick win" for web performance? Let’s swap tips in the comments!&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>productivity</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>RTL Mastery: Beyond Just dir="rtl"</title>
      <dc:creator>Syed Ahmed Mohi Uddin Hasan</dc:creator>
      <pubDate>Mon, 09 Mar 2026 10:01:55 +0000</pubDate>
      <link>https://dev.to/syedahmedx3/rtl-mastery-beyond-just-dirrtl-2m1h</link>
      <guid>https://dev.to/syedahmedx3/rtl-mastery-beyond-just-dirrtl-2m1h</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
When building for the KSA market, many developers think adding dir="rtl" to the  tag is the finish line. In reality, that is just the starting blocks. Truly high-performance, localised apps require a "mirror-first" mindset to ensure a "pixel-perfect" experience for Arabic-speaking users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my experience launching production sites like DarElite, I've found that deep RTL support is what separates a translated site from a truly localised one. Here is a guide on going beyond the basics.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use CSS Logical Properties&lt;/li&gt;
&lt;li&gt;Stop thinking in "left" and "right." Use logical properties to let the browser handle the heavy lifting based on the document direction.&lt;/li&gt;
&lt;li&gt;Margin/Padding: Use margin-inline-start instead of margin-left.&lt;/li&gt;
&lt;li&gt;Borders: Use border-end-start-radius for specific corners.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tailwind Strategy: If you use Tailwind CSS, leverage the start and end utilities (e.g., ps-4 instead of pl-4).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Icons: To Mirror or Not to Mirror?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is where most UI/UX bugs hide. Not every icon should be flipped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mirror these: Progress bars, directional arrows (back/forward), and icons representing movement (like a bicycle).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't mirror these: Checkmarks, clock faces, and media playback buttons (Play/Pause/Seek) generally stay the same.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handling Bidirectional (BiDi) Text&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In technical or business apps, you will often have "Mixed Direction" content—like an English email address or a phone number inside an Arabic sentence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Fix: Use the  (Bi-Directional Isolation) tag for user-generated content to prevent the layout from breaking when different scripts collide.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance in RTL Layouts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Localised apps often struggle with layout shifts during the "direction swap."&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tip: Ensure your CSS architecture is "direction-agnostic" from the start. By refining component architecture, I’ve managed to maintain 100% Lighthouse scores while supporting complex RTL layouts.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>tailwindcss</category>
      <category>react</category>
    </item>
  </channel>
</rss>
