<?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: Ammar Najjar</title>
    <description>The latest articles on DEV Community by Ammar Najjar (@ammarnajjar).</description>
    <link>https://dev.to/ammarnajjar</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%2F4013380%2F48e6aa49-7f25-4cc0-8be7-3f35c41e1e1c.jpg</url>
      <title>DEV Community: Ammar Najjar</title>
      <link>https://dev.to/ammarnajjar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ammarnajjar"/>
    <language>en</language>
    <item>
      <title>More RAM Changed What Matters in My Local AI Setup</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Sat, 26 Sep 2026 11:11:34 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/more-ram-changed-what-matters-in-my-local-ai-setup-3e5b</link>
      <guid>https://dev.to/ammarnajjar/more-ram-changed-what-matters-in-my-local-ai-setup-3e5b</guid>
      <description>&lt;p&gt;Six months ago, I started running local LLMs seriously on a Mac with 16 GB of unified memory. Most of my decisions were dictated by memory: which models fit, which quantization to use, and how much context I could afford.&lt;/p&gt;

&lt;p&gt;Moving to 48 GB changed that.&lt;/p&gt;

&lt;p&gt;Models such as Qwen3.8-27B became practical for everyday use, and my attention shifted toward a different problem: &lt;strong&gt;how well does the model work during a real coding-agent session?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory Was Only the First Constraint
&lt;/h2&gt;

&lt;p&gt;My current setup uses LM Studio with Qwen3.8 and Splash, while OpenCode provides the agentic coding workflow.&lt;/p&gt;

&lt;p&gt;With enough memory to run larger models comfortably, other constraints became much more visible.&lt;/p&gt;

&lt;p&gt;Context length has a direct cost. Longer sessions accumulate tool output and code. Compaction can interrupt the flow earlier than expected. Thinking improves some tasks while adding latency to others.&lt;/p&gt;

&lt;p&gt;A model that looks impressive in a short prompt can therefore feel quite different when it has to navigate a repository, inspect several files, use tools, make changes, and preserve enough context to continue reasoning about them.&lt;/p&gt;

&lt;p&gt;That changed how I evaluate local models.&lt;/p&gt;

&lt;p&gt;I care less about whether a model technically fits on my machine. I care more about how long I can work with it before the workflow starts getting in the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup I Actually Use
&lt;/h2&gt;

&lt;p&gt;After quite a bit of experimentation, the stack has become relatively small:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mac with 48 GB unified memory → LM Studio → Qwen3.8 / Splash → OpenCode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The interesting optimization work now happens around that stack: choosing a sensible context size, deciding when thinking is worth enabling, understanding why compaction happens, and balancing model capability against interactive speed.&lt;/p&gt;

&lt;p&gt;There is still plenty to experiment with, but having more memory has made the trade-offs much clearer.&lt;/p&gt;

&lt;p&gt;I documented my current configuration, what changed since the original 16 GB setup, and the lessons from using it for actual development work in the full article:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ammar-najjar.com/blog/local-ai-setup-six-months-later/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/local-ai-setup-six-months-later/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use local LLMs with coding agents, I would be interested in comparing experiences. Once model size and memory stopped being your main constraint, what became the next bottleneck?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>hardware</category>
      <category>llm</category>
    </item>
    <item>
      <title>What Happens When the Team Chooses a Different Approach?</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Sat, 19 Sep 2026 08:10:58 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/what-happens-when-the-team-chooses-a-different-approach-4dl6</link>
      <guid>https://dev.to/ammarnajjar/what-happens-when-the-team-chooses-a-different-approach-4dl6</guid>
      <description>&lt;p&gt;A team is discussing how to solve a problem. You have an approach in mind, probably backed by experience, but the team reaches a different conclusion.&lt;/p&gt;

&lt;p&gt;Their approach is reasonable. You can see some risks, but there is no strong reason to override the decision.&lt;/p&gt;

&lt;p&gt;So you let them try it.&lt;/p&gt;

&lt;p&gt;This sounds like autonomy. The difficult part comes afterward.&lt;/p&gt;

&lt;p&gt;How long do you let the approach run before intervening? What happens when progress is slower than you expected? At what point does giving space become waiting too long?&lt;/p&gt;

&lt;p&gt;I ran into exactly this tension while trying to change how I lead technical discussions. I wanted to create more room for others to make decisions instead of becoming the person who provides the solution whenever I have a strong opinion.&lt;/p&gt;

&lt;p&gt;What helped was adding one small constraint to the experiment: &lt;strong&gt;a time boundary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of leaving the decision open-ended, we could agree on when we would look at the result again. Until then, the team had space to execute its approach. At the review point, we could look at what actually happened rather than debating whose initial idea was better.&lt;/p&gt;

&lt;p&gt;That distinction has become useful for me because it separates two decisions that are easy to mix together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who owns the approach?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When do we evaluate whether that approach is working?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is more to getting this right, especially around outcomes, constraints, and what should happen at the review point. I wrote about the experience and the practical model I now use in the full article:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ammar-najjar.com/blog/give-autonomy-a-time-boundary/" rel="noopener noreferrer"&gt;Give Autonomy a Time Boundary&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you lead technical discussions, I am curious how you handle this moment: when the team chooses a reasonable approach that you would not have chosen yourself.&lt;/p&gt;

</description>
      <category>culture</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>Making AI Coding Agents More Efficient: My Local Toolkit</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Sun, 23 Aug 2026 17:17:43 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/making-ai-coding-agents-more-efficient-my-local-toolkit-86n</link>
      <guid>https://dev.to/ammarnajjar/making-ai-coding-agents-more-efficient-my-local-toolkit-86n</guid>
      <description>&lt;p&gt;Giving AI coding agents more tools doesn’t necessarily make them more efficient.&lt;/p&gt;

&lt;p&gt;After using OpenCode and Claude Code heavily, I started focusing less on adding capabilities and more on controlling the information flowing into the agent.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;searching before reading entire files&lt;/li&gt;
&lt;li&gt;choosing between text, structural, and semantic search&lt;/li&gt;
&lt;li&gt;reducing noisy command output&lt;/li&gt;
&lt;li&gt;keeping sessions focused&lt;/li&gt;
&lt;li&gt;defining explicit stopping rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve documented the toolkit I currently use, including Headroom, RTK, Caveman, Serena, &lt;code&gt;rg&lt;/code&gt;, &lt;code&gt;fd&lt;/code&gt;, &lt;code&gt;ast-grep&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt;, &lt;code&gt;yq&lt;/code&gt;, and others, along with how I define their responsibilities in &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The principle behind all of it is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give the agent the smallest amount of information necessary to make the next correct decision.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Full post:&lt;br&gt;
&lt;a href="https://ammar-najjar.com/blog/local-ai-coding-toolkit/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/local-ai-coding-toolkit/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>I Built a Tool to Visualize NgRx Action Flows</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Sun, 16 Aug 2026 13:20:16 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/i-built-a-tool-to-visualize-ngrx-action-flows-50l5</link>
      <guid>https://dev.to/ammarnajjar/i-built-a-tool-to-visualize-ngrx-action-flows-50l5</guid>
      <description>&lt;p&gt;As Angular applications grow, NgRx flows can become surprisingly difficult to follow. An action dispatched from a component may trigger an effect, dispatch another action, update a reducer, and continue through several related paths.&lt;/p&gt;

&lt;p&gt;I wanted a better way to understand these relationships without manually jumping through the codebase.&lt;/p&gt;

&lt;p&gt;That led me to build &lt;strong&gt;ngrx-graph&lt;/strong&gt;, an open-source tool that analyzes Angular and NgRx source code using the TypeScript AST and generates visual graphs of action flows.&lt;/p&gt;

&lt;p&gt;Instead of showing the entire application as one massive graph, it lets you focus on a specific action and see how it connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Effects&lt;/li&gt;
&lt;li&gt;Reducers&lt;/li&gt;
&lt;li&gt;Selectors&lt;/li&gt;
&lt;li&gt;Other actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This can be useful when debugging unfamiliar flows, reviewing code, onboarding developers, or preparing a refactoring.&lt;/p&gt;

&lt;p&gt;In the full article, I explain why I built the project, how the static analysis works, some of the challenges I encountered, and where I want to take it next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full article:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://ammar-najjar.com/blog/ngrx-graph/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/ngrx-graph/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you work with NgRx, I’d be interested to hear how you navigate complex action flows in larger applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  angular #ngrx #typescript #opensource #webdev
&lt;/h1&gt;

</description>
      <category>angular</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>How I Configure Cloudflare for My Personal Website</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Sat, 01 Aug 2026 08:11:47 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/how-i-configure-cloudflare-for-my-personal-website-5ago</link>
      <guid>https://dev.to/ammarnajjar/how-i-configure-cloudflare-for-my-personal-website-5ago</guid>
      <description>&lt;p&gt;Cloudflare has become much more than a CDN. Today it offers performance optimizations, security features, caching options, protocol settings, AI controls, and dozens of toggles that can be difficult to evaluate.&lt;/p&gt;

&lt;p&gt;When I migrated my personal website to Cloudflare Workers, I decided to review every setting from scratch instead of relying on defaults. The result is a documented configuration explaining which options I enable, which I leave disabled, and the reasoning behind each decision.&lt;/p&gt;

&lt;p&gt;In this article you'll find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance settings worth enabling.&lt;/li&gt;
&lt;li&gt;Security features that make sense for a personal website.&lt;/li&gt;
&lt;li&gt;Which options I intentionally leave disabled.&lt;/li&gt;
&lt;li&gt;Links to the official Cloudflare documentation for every recommendation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're hosting a static site, portfolio, or blog on Cloudflare, I hope this saves you some time.&lt;/p&gt;

&lt;p&gt;I'd also love to hear how others configure Cloudflare. Are there any settings you strongly disagree with or think are often overlooked?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full article here:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ammar-najjar.com/blog/how-i-configure-cloudflare/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/how-i-configure-cloudflare/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>performance</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Rebuilt My Personal Site with Astro + Bun + Cloudflare, Here’s the Full Architecture Breakdown</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Thu, 23 Jul 2026 07:26:39 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/i-rebuilt-my-personal-site-with-astro-bun-cloudflare-heres-the-full-architecture-breakdown-2agg</link>
      <guid>https://dev.to/ammarnajjar/i-rebuilt-my-personal-site-with-astro-bun-cloudflare-heres-the-full-architecture-breakdown-2agg</guid>
      <description>&lt;p&gt;After years with a heavier Docusaurus/React setup, I decided it was time for something lighter, faster, and more maintainable.&lt;/p&gt;

&lt;p&gt;The result is a fully static, high-performance personal website that scores excellent Core Web Vitals while staying simple to develop and deploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I cover in the new post:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Why &lt;strong&gt;Astro&lt;/strong&gt; became the perfect fit (zero JS by default)
&lt;/li&gt;
&lt;li&gt;Switching the entire toolchain to &lt;strong&gt;Bun&lt;/strong&gt; (spoiler: it feels &lt;em&gt;much&lt;/em&gt; snappier)
&lt;/li&gt;
&lt;li&gt;How the site delivers under 10 KB of JavaScript on most pages
&lt;/li&gt;
&lt;li&gt;Smart image optimization, automatic dimension injection, and responsive handling
&lt;/li&gt;
&lt;li&gt;Internationalization (i18n) setup with content collections
&lt;/li&gt;
&lt;li&gt;The complete deployment pipeline with GitHub Actions + Cloudflare Pages
&lt;/li&gt;
&lt;li&gt;Dark mode without layout shifts, Shiki syntax highlighting with CSS variables, and more
&lt;/li&gt;
&lt;li&gt;How local AI tools (running on my Mac) helped shape the rebuild
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in modern static site architecture, performance-first development, or just want to see a clean, thoughtful stack in action, I think you'll enjoy this one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full technical deep dive here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://ammar-najjar.com/blog/website-architecture/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/website-architecture/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your thoughts in the comments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What stack are you using for your personal site or blog right now?&lt;/li&gt;
&lt;li&gt;Are you team static or still running full server-side frameworks?&lt;/li&gt;
&lt;li&gt;Any tools you're excited about in 2026?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking forward to the discussion! &lt;/p&gt;

</description>
      <category>architecture</category>
      <category>javascript</category>
      <category>performance</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Lunch Conversation Changed My Website</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Mon, 20 Jul 2026 07:11:50 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/a-lunch-conversation-changed-my-website-3odc</link>
      <guid>https://dev.to/ammarnajjar/a-lunch-conversation-changed-my-website-3odc</guid>
      <description>&lt;h1&gt;
  
  
  A Lunch Conversation Changed My Website
&lt;/h1&gt;

&lt;p&gt;Sometimes, the best engineering decisions don't start with code.&lt;/p&gt;

&lt;p&gt;Mine started over lunch.&lt;/p&gt;

&lt;p&gt;A simple conversation made me realize that although my personal website still worked, it no longer matched how I wanted to write, experiment, and share my work. Every improvement came with unnecessary friction, and I found myself maintaining the platform more than enjoying it.&lt;/p&gt;

&lt;p&gt;That was the moment I decided it was time to rebuild.&lt;/p&gt;

&lt;p&gt;I chose Astro, but this isn't really a story about Astro. It's about recognizing when a project has outgrown its foundation, and why rebuilding can be a better investment than continuing to patch what's already there.&lt;/p&gt;

&lt;p&gt;In the article, I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why one conversation changed my perspective.&lt;/li&gt;
&lt;li&gt;Why I decided to rebuild instead of iterate.&lt;/li&gt;
&lt;li&gt;Why Astro became my framework of choice.&lt;/li&gt;
&lt;li&gt;The lessons I learned throughout the migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever looked at one of your side projects and thought, "If I were starting today, I'd do this differently," you'll probably relate.&lt;/p&gt;

&lt;p&gt;I'd love to hear whether you've ever rebuilt a project for the same reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full article:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://ammar-najjar.com/blog/rebuilding-website-astro/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/rebuilding-website-astro/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>sideprojects</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Nine Years on GitHub Pages. Why I Finally Moved to Cloudflare Pages</title>
      <dc:creator>Ammar Najjar</dc:creator>
      <pubDate>Fri, 03 Jul 2026 09:51:55 +0000</pubDate>
      <link>https://dev.to/ammarnajjar/nine-years-on-github-pages-why-i-finally-moved-to-cloudflare-pages-3pgn</link>
      <guid>https://dev.to/ammarnajjar/nine-years-on-github-pages-why-i-finally-moved-to-cloudflare-pages-3pgn</guid>
      <description>&lt;p&gt;After almost &lt;strong&gt;nine years&lt;/strong&gt; on GitHub Pages, I decided it was finally time to migrate my personal website to &lt;strong&gt;Cloudflare Pages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The migration itself was easier than I expected, but I still ran into a few interesting challenges around Docusaurus, Yarn, custom domains, DNS, and sitemap generation.&lt;/p&gt;

&lt;p&gt;In this article, I explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why I decided to move&lt;/li&gt;
&lt;li&gt;What I gained&lt;/li&gt;
&lt;li&gt;The issues I encountered&lt;/li&gt;
&lt;li&gt;Lessons learned along the way&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're considering moving your own static site, I hope it saves you some time.&lt;/p&gt;

&lt;p&gt;👉 Read the full article here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ammar-najjar.com/blog/github-pages-to-cloudflare/" rel="noopener noreferrer"&gt;https://ammar-najjar.com/blog/github-pages-to-cloudflare/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have you stayed with GitHub Pages, or have you moved to another platform? I'd love to hear what influenced your decision.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>github</category>
    </item>
  </channel>
</rss>
