Skip to content
Posts by year

Articles

  • ngrx-graph: Static Analysis and Graph Visualization for NgRx Applications

    ngrx-graph: Static Analysis and Graph Visualization for NgRx Applications

    TL;DR ngrx-graph scans NgRx codebases via AST parsing, resolves aliases and nested actions, and outputs focused or project-wide action flow graphs in DOT/SVG. One command replaces hours of manual code tracing.

    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

    How I Configure Cloudflare for My Website

    TL;DR A systematic review of every Cloudflare Free plan setting, what stays on, what gets disabled, and the principles behind each decision.

    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

    How This Website Works: A Technical Look at the Stack

    TL;DR A complete technical breakdown of how this site is built, from Bun + Astro content pipeline to Cloudflare deployment, minimal JavaScript, and performance optimizations.

    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

    A Lunch Conversation Changed My Website

    TL;DR How a casual lunch discussion led to rebuilding this site with Astro, modernizing the entire stack, and rethinking it as a personal digital workshop rather than a traditional portfolio.

    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

    Making Angular AI Work in Real Projects

    TL;DR AI tools are great at generating code, but real Angular projects succeed only when you give them rich project context, architecture boundaries, and conventions.

    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 Camera Tells a Story

    TL;DR A personal reflection on how cameras shape our photography, creativity, and the stories we choose to tell through images.

    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

    Nine Years on GitHub Pages, Why I Finally Moved to Cloudflare

    TL;DR Why I migrated this site from GitHub Pages to Cloudflare after nearly a decade, including the migration process, challenges, and discovered trade-offs.

    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

    TL;DR Practical guide to running local AI coding assistants on a 16GB M1 MacBook Pro, what works well, what doesn't, and the real setup trade-offs.

    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

    TL;DR My curated list of essential macOS development tools via Homebrew that significantly boost daily productivity and workflow enjoyment.

    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

    TL;DR This post explains the design and implementation of a simple browser based personal portfolio tracker built with React, TypeScript, and Vite, covering requirements, challenges, and solutions for state handling, caching, and charts.

    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 →