<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mahdi Hazrati   Tech Blog</title>
    <link>https://mahdi.is-a.dev/blog</link>
    <description>Notes on React, Next.js, design systems, and shipping products.</description>
    <language>en-us</language>
    <lastBuildDate>Sun, 19 Jul 2026 07:57:39 GMT</lastBuildDate>
    <atom:link href="https://mahdi.is-a.dev/feed.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title><![CDATA[AI Coding Is Like Horseback Riding: the Horse Runs, You Still Get Tired]]></title>
      <link>https://mahdi.is-a.dev/blog/ai-coding-is-like-horseback-riding</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/ai-coding-is-like-horseback-riding</guid>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[The horse is doing the running. You're still the one who has to stay balanced, read the terrain, and not fall off. That's the whole difference between vibe coding and actually directing the thing.]]></description>
      <category>AI Engineering</category>
      <category>Vibe Coding</category>
      <category>Engineering Philosophy</category>
    </item>
    <item>
      <title><![CDATA[The Day the Facility Guy Shipped a Feature to My App]]></title>
      <link>https://mahdi.is-a.dev/blog/the-day-the-facility-guy-shipped-a-feature</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/the-day-the-facility-guy-shipped-a-feature</guid>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[I taught our building's maintenance guy how to vibe code for fun. Twenty minutes later he'd chatted his way into a working feature inside one of my real apps. Here's what actually happened, and why it didn't disprove anything I've written in this series.]]></description>
      <category>AI Engineering</category>
      <category>Vibe Coding</category>
      <category>Engineering Philosophy</category>
    </item>
    <item>
      <title><![CDATA[Are You Orchestrating or Vibing? A Maturity Model for AI-Assisted Engineering]]></title>
      <link>https://mahdi.is-a.dev/blog/ai-orchestrated-engineering-maturity-model</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/ai-orchestrated-engineering-maturity-model</guid>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[A five-level, self-scoring checklist to find out   honestly   whether your AI-assisted workflow is AI-Orchestrated Engineering or vibe coding with extra steps.]]></description>
      <category>AI Engineering</category>
      <category>Engineering Philosophy</category>
      <category>Software Quality</category>
    </item>
    <item>
      <title><![CDATA[Orchestration Patterns: Directing AI Like a Systems Architect]]></title>
      <link>https://mahdi.is-a.dev/blog/orchestration-patterns-for-engineers</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/orchestration-patterns-for-engineers</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[Pipeline, fan-out/fan-in, adversarial verification, judge panels   the distributed-systems patterns that make AI-Orchestrated Engineering practical instead of aspirational.]]></description>
      <category>AI Engineering</category>
      <category>Software Architecture</category>
      <category>Distributed Systems</category>
    </item>
    <item>
      <title><![CDATA[The Five Layers of AI-Orchestrated Engineering]]></title>
      <link>https://mahdi.is-a.dev/blog/five-layers-ai-orchestrated-engineering</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/five-layers-ai-orchestrated-engineering</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[Intent, Decomposition, Delegation, Verification, Synthesis   the framework I use to turn 'AI writes code fast' into 'AI-assisted systems are correct.']]></description>
      <category>AI Engineering</category>
      <category>Software Architecture</category>
      <category>Engineering Philosophy</category>
    </item>
    <item>
      <title><![CDATA[The Vibe Coding Trap: Why 'Just Let the AI Do It' Fails at Scale]]></title>
      <link>https://mahdi.is-a.dev/blog/vibe-coding-trap-explained</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/vibe-coding-trap-explained</guid>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[Vibe coding feels fast because it defers all its cost to later. A field guide to the five failure modes I see over and over   and why they're structural, not incidental.]]></description>
      <category>AI Engineering</category>
      <category>Engineering Philosophy</category>
      <category>Software Quality</category>
    </item>
    <item>
      <title><![CDATA[AI-Orchestrated Engineering: A New Discipline Beyond Vibe Coding]]></title>
      <link>https://mahdi.is-a.dev/blog/ai-orchestrated-engineering-manifesto</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/ai-orchestrated-engineering-manifesto</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[Vibe coding treats AI as an oracle you gamble on. AI-Orchestrated Engineering treats it as an instrument you conduct. Here's the discipline I've been building   and why the distinction matters.]]></description>
      <category>AI Engineering</category>
      <category>Engineering Philosophy</category>
      <category>AI</category>
    </item>
    <item>
      <title><![CDATA[Every Markdown Feature This Blog Supports]]></title>
      <link>https://mahdi.is-a.dev/blog/markdown-showcase</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/markdown-showcase</guid>
      <pubDate>Sat, 07 Jun 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[A living reference for writing posts   thumbnails, code, tables, alerts, footnotes, images, audio, video, and YouTube embeds.]]></description>
      <category>Markdown</category>
      <category>Blog</category>
      <category>Reference</category>
    </item>
    <item>
      <title><![CDATA[Perlin Noise: The Algorithm Behind Procedural Worlds]]></title>
      <link>https://mahdi.is-a.dev/blog/perlin-noise-explained</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/perlin-noise-explained</guid>
      <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[How Ken Perlin's gradient noise creates infinite terrain, clouds, and fire   and why Simplex improved it thirty years later.]]></description>
      <category>Graphics</category>
      <category>Algorithms</category>
      <category>Procedural</category>
    </item>
    <item>
      <title><![CDATA[Transformers Explained: Attention, QKV, and Why LLMs Work]]></title>
      <link>https://mahdi.is-a.dev/blog/transformer-attention-explained</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/transformer-attention-explained</guid>
      <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[A frontend engineer's guide to the architecture behind GPT   self-attention, positional encoding, and the encoder-decoder split.]]></description>
      <category>ML</category>
      <category>Transformers</category>
      <category>Deep Learning</category>
    </item>
    <item>
      <title><![CDATA[Ray Marching and Signed Distance Fields]]></title>
      <link>https://mahdi.is-a.dev/blog/ray-marching-sdf-shaders</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/ray-marching-sdf-shaders</guid>
      <pubDate>Sat, 24 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Render infinite geometry on a fullscreen triangle   SDFs, sphere tracing, and the shader loop that replaced polygon soup.]]></description>
      <category>Shaders</category>
      <category>WebGL</category>
      <category>Graphics</category>
    </item>
    <item>
      <title><![CDATA[Concurrent React: Suspense, Transitions, and Time Slicing]]></title>
      <link>https://mahdi.is-a.dev/blog/concurrent-react-explained</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/concurrent-react-explained</guid>
      <pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[How React 18 schedules updates, keeps the UI responsive during heavy renders, and what useTransition actually buys you.]]></description>
      <category>React</category>
      <category>Performance</category>
      <category>Frontend</category>
    </item>
    <item>
      <title><![CDATA[B-Trees: Why Every Database Index Looks the Same]]></title>
      <link>https://mahdi.is-a.dev/blog/b-trees-database-indexes</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/b-trees-database-indexes</guid>
      <pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[The data structure behind PostgreSQL, SQLite, and MySQL indexes   balanced trees, page alignment, and why O(log n) isn't enough.]]></description>
      <category>Databases</category>
      <category>Algorithms</category>
      <category>Backend</category>
    </item>
    <item>
      <title><![CDATA[File-Based Blogs on Next.js Static Export]]></title>
      <link>https://mahdi.is-a.dev/blog/file-based-blog-with-nextjs</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/file-based-blog-with-nextjs</guid>
      <pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[How to ship a markdown blog with zero database, full SEO, and static export   the same stack powering mahdi.is-a.dev.]]></description>
      <category>Next.js</category>
      <category>Markdown</category>
      <category>Static Export</category>
    </item>
    <item>
      <title><![CDATA[WebAssembly Beyond the Browser]]></title>
      <link>https://mahdi.is-a.dev/blog/webassembly-beyond-browser</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/webassembly-beyond-browser</guid>
      <pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[From Figma's design engine to Cloudflare Workers   why WASM is becoming the portable bytecode layer of the web stack.]]></description>
      <category>WebAssembly</category>
      <category>Systems</category>
      <category>Performance</category>
    </item>
    <item>
      <title><![CDATA[Raft Consensus: Leader Election Without the PhD]]></title>
      <link>https://mahdi.is-a.dev/blog/raft-consensus-explained</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/raft-consensus-explained</guid>
      <pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[How distributed systems agree on a log when nodes fail   terms, heartbeats, and why Paxos stayed in papers while Raft got textbooks.]]></description>
      <category>Distributed Systems</category>
      <category>Algorithms</category>
      <category>Backend</category>
    </item>
    <item>
      <title><![CDATA[Gradient Descent: The Hill-Climbing Algorithm Behind Deep Learning]]></title>
      <link>https://mahdi.is-a.dev/blog/gradient-descent-deep-learning</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/gradient-descent-deep-learning</guid>
      <pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Loss surfaces, learning rates, momentum, and Adam   the optimization loop that makes neural networks actually learn.]]></description>
      <category>ML</category>
      <category>Math</category>
      <category>Deep Learning</category>
    </item>
    <item>
      <title><![CDATA[OAuth2 + PKCE: Auth for Modern Single-Page Apps]]></title>
      <link>https://mahdi.is-a.dev/blog/oauth2-pkce-spa-security</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/oauth2-pkce-spa-security</guid>
      <pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Why implicit flow died, how PKCE protects public clients, and the token flow every React app should implement.]]></description>
      <category>Security</category>
      <category>OAuth</category>
      <category>Web</category>
    </item>
    <item>
      <title><![CDATA[Git Internals: Objects, Refs, and the DAG Under the Hood]]></title>
      <link>https://mahdi.is-a.dev/blog/git-internals-objects-and-refs</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/git-internals-objects-and-refs</guid>
      <pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Git isn't a filesystem with history   it's a content-addressed object database with labels. Once you see the DAG, everything clicks.]]></description>
      <category>Git</category>
      <category>Tools</category>
      <category>DevOps</category>
    </item>
    <item>
      <title><![CDATA[Design Systems That Actually Ship]]></title>
      <link>https://mahdi.is-a.dev/blog/design-systems-that-ship</link>
      <guid isPermaLink="true">https://mahdi.is-a.dev/blog/design-systems-that-ship</guid>
      <pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Lessons from building NPUI   tokens, primitives, and the gap between Figma and production.]]></description>
      <category>Design Systems</category>
      <category>React</category>
      <category>NPUI</category>
    </item>
  </channel>
</rss>
