Author: Ammar Najjar
33 posts
Blog Posts
My Local AI Coding Toolkit: How I Keep Agents Fast and Token-Efficient

AI coding agents have become part of my daily workflow. I use OpenCode and Claude Code for everything from exploring unfamiliar codebases and investigating bugs to implementing changes, reviewing code, and working through architectural questions.
Read more →ngrx-graph: Static Analysis and Graph Visualization for NgRx Applications

If you have ever traced an action through a sprawling NgRx codebase, wondering which effect listens to it, which reducer handles it, and whether some other effect silently dispatches another action in the chain, you know the pain. Manual code traversal works until it does not. One missed dispatch() call buried in a mergeMap. Your mental model breaks.
Read more →How I Configure Cloudflare for My Website

Open your Cloudflare dashboard today and you'll find dozens of features for improving performance, security, and reliability. Some are enabled by default, others are recommended, and new capabilities appear regularly as the platform evolves. With so many options available, I wanted to better understand how each setting contributed to my website.
Read more →How This Website Works: A Technical Look at the Stack

In a companion article, I wrote about why I rebuilt this website with Astro and how that decision grew into a much larger project. That article was about the journey and the thinking. This one is about the outcome: how the website actually works, every layer from writing a post to it appearing in a reader's browser.
Read more →A Lunch Conversation Changed My Website

Some of the most enjoyable projects I've worked on have started in surprisingly ordinary moments. A conversation introduces a new idea, someone shares an experience from their own work, or I come across a different way of approaching a familiar problem. The conversation eventually ends, everyone returns to their daily work, yet one small idea continues to occupy my thoughts. Over the following days that idea slowly grows into documentation, notes, experiments and, occasionally, an entirely new project. Looking back, I can trace many of my favorite learning experiences to moments exactly like these, and rebuilding my personal website became another one of those unexpected journeys.
Read more →Making Angular AI Work in Real Projects

AI can generate a component, write a test, or explain a compiler error. But in real applications, results depend more on project context than model capability. It doesn't understand your architecture, your conventions, or the boundaries you built over years.
Read more →Every Camera Tells a Story

Every now and then, I catch myself looking at new cameras. I open another review, compare another specification sheet, or watch yet another photographer explaining why this year's camera is better than last year's. It always begins with a simple curiosity, and before I realize it, hours have passed. Somewhere between comparison videos, photography forums, and used listings, I find myself imagining what it would be like to own a different camera.
Read more →Nine Years on GitHub Pages, Why I Finally Moved to Cloudflare

For nearly nine years, my personal website lived on GitHub Pages. It was free, reliable, and required almost no maintenance, so why migrate? A recent move to Cloudflare Pages prompted this post, which covers the motivation behind the change, the migration process, the issues encountered, and the trade-offs discovered along the way.
Read more →Local AI on a MacBook Pro with 16 GB RAM: What Actually Works
Running AI coding assistants locally sounds appealing: no API costs, your code stays on your machine, and you get a Claude Code-like experience for free. But getting it to actually work well on a 16 GB MacBook Pro M1 takes more trial and error than most guides admit.
Read more →Essential Development Tools: My Brewfile Setup
As a software engineer, our toolset shapes how we work and what we can accomplish. Over time, I've curated a collection of essential tools that boost my productivity and make development more enjoyable. Here's a breakdown of my Homebrew setup, featuring the tools I use daily.
Read more →Portfolio: a lightweight personal portfolio tracker
This post explains the design and implementation of a small browser-first portfolio tracker. It focuses on requirements, the challenges encountered, and how the final solution addresses them, including code snippets that illustrate the state handling, caching, and chart interaction.
Read more →Mastering Git Commands: A Practical Guide
Git is an indispensable tool for version control, enabling developers to track changes, collaborate effectively, and manage project history. While its capabilities are vast, a solid understanding of key commands can significantly streamline your workflow. This article delves into a selection of practical Git commands, explaining what they do, how to use them, and when they are most effective.
Read more →Angular - Content Projection
Content projection is a feature in angular that supports inserting a component in another component. This changes the way an angular developer designs his application/library by implementing flexible and reusable components.
Read more →Reactjs: Arrays in jsx
When I tried out Reactjs tutorial few months ago, I noticed that in the official starter code, they repeated same div elements in the render() method, just in case of change in the source, I will list it here:
Read more →Fetch using Gitlab API
Between gitlab repos that need daily tracking and frequent machine changes, the manual cloning and sync process became exhausting. An automation script was the obvious next step to offload the boring tasks.
Read more →PyConDe & PyData 2019
Fresh back from PyConDe & PyData-2019, this post shares and documents the experience. Think of it as a diary more than a blog, covering:
Read more →RxJS Series - Observables
RxJS (on Github) is a reactive programming library for Javascript, and in this series, I would like to expose my way of learning it with you.
Read more →Custom Selenium Webdrivers using Decorators
How to create custom selenium webdriver classes dynamically with a parametrized browser binary path?
Read more →Fedora23 Upgrade (unlabeled home)
When I tried to update from the fedora23 to fedora24, I faced the issue that the home directoy lost its labeling:
Read more →Build Vim from Source
Many times when I want to use vim which comes within the main repo of any Linux distro, I find that it is missing some kind of support, either python or client-server mode, or any other feature. And there for I have to build it manually from source and install it.
Read more →Lwa4p Robot Arm Setup
Experiments with the powerball lightweight lwa4p robot arm from Schunk came with many difficulties getting it to move using moveit. This post shares that experience.
Read more →Adventure through my vimrc (nvimrc)
In this post I'm going to take you in an adventure in my previously vimrc and currently init.vim which I collected from using vim then neovim along the last few years. I will explain the feature or the function, then include the configurations or code that should be inserted in the vimrc (init.vim) file to activate that feature.
Read more →Opencv on Openshift
When I wanted to intall opencv on my python-2.7 openshift online cartridge I faced the problem of quota limitation to 1GB.
Read more →
Reading Notes
Rich Dad Poor Dad

Rich Dad Poor Dad by Robert T. Kiyosaki and Sharon L. Lechter is one of the best-selling personal finance books ever written, translated into 51 languages and part of a series that has sold more than 30 million copies worldwide. The book tells the story of two father figures in Kiyosaki's life: his own highly educated but financially struggling real father, and his best friend Mike's uneducated but wealthy father, who became his surrogate financial mentor and died as one of the richest men in Hawaii. From these two contrasting examples, Kiyosaki builds six lessons about money, assets, and the mindset that separates the wealthy from everyone else.
Read more →Create Space

Derek Draper spent more than a decade coaching people at the very top of business, the FTSE 100 crowd, and Create Space (2018) distills all of that into one argument: the modern challenge isn't to fill space, it's to create it. For most of human history we've been exploring, expanding and filling the world around us. Now, for the first time, we're overcrowded and overscheduled, and growth, improvement and development all depend on making room. Draper organizes the book around four domains, thinking, connecting, doing and being, and fills each one with tools from his real coaching cases, from structured reflection to a weekly meeting with yourself.
Read more →How Google Works

Google was founded in 1998 by two Stanford PhD students, Larry Page and Sergey Brin, with no formal business experience and no MBA playbook to follow. This book is the inside account of what happened next, written by Eric Schmidt, Google's CEO from 2001 to 2011, and Jonathan Rosenberg, its longtime head of products. Their argument is blunt: the old command-and-control management model cannot survive the speed of modern innovation. The only sustainable path is to build a company around "smart creatives", obsessive hiring, and a culture that treats engineers as the core of every decision. If you have ever wondered why Google works the way it does, this is the explanation from the people who made it.
Read more →Thinking, Fast and Slow

Daniel Kahneman, the psychologist who won the Nobel Prize in Economic Sciences in 2002, spent a lifetime of research, much of it with his longtime collaborator Amos Tversky, studying how the human mind makes decisions. Thinking, Fast and Slow distills that research into a tour of our cognitive machinery and gives us a language to talk about why so much of our reasoning is quietly driven by bias. The central claim: human judgment is predictably imperfect, and once you understand the shortcuts your mind is taking, you can start catching them.
Read more →The Five Dysfunctions of a Team

Patrick Lencioni, the American business consultant and founder of the Table Group, wrote The Five Dysfunctions of a Team as a leadership fable: a short novel that diagnoses why highly qualified groups so often underperform, told through the story of a struggling Silicon Valley startup and its new CEO. The book identifies five interlocking dysfunctions, absent trust, fear of conflict, lack of commitment, avoidance of accountability, and inattention to results, and argues that each one flows from the one beneath it.
Read more →Atomic Habits

In his book "Atomic Habits", James Clear outlines the principles of habit formation and behavior change. The author shares his personal journey of recovery from a severe injury, which led him to understand that significant progress stems from a series of small, consistent actions, rather than singular transformative events. Clear introduces the "Four Laws of Behavior Change": making habits obvious, attractive, easy, and satisfying. He emphasizes the importance of systems over goals, highlighting how environmental design, social influence, and the immediate gratification of rewards play crucial roles in establishing and maintaining habits, ultimately arguing that true identity change is the North Star of habit transformation.
Read more →
