<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Brandon Wie</title>
    <description>Software engineering insights, tutorials, and learnings</description>
    <link>https://brandonwie.dev</link>
    <atom:link href="https://brandonwie.dev/rss.xml" rel="self" type="application/rss+xml"/>
    <language>en-us</language>
    <lastBuildDate>Thu, 09 Apr 2026 02:02:52 GMT</lastBuildDate>
    
    <item>
      <title><![CDATA[Claude Code Agent Teams]]></title>
      <description><![CDATA[Experimental feature for orchestrating multiple Claude Code instances as a coordinated team with shared task lists and inter-agent messaging]]></description>
      <link>https://brandonwie.dev/posts/claude-code-agent-teams</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/claude-code-agent-teams</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>claude-code</category>
      <category>agent-teams</category>
      <category>experimental</category>
    </item>
    <item>
      <title><![CDATA[Claude Code: Shared + Personal AI Config Pattern]]></title>
      <description><![CDATA[Split AI instructions into committed (shared) and gitignored (personal) layers]]></description>
      <link>https://brandonwie.dev/posts/claude-code-shared-personal-config</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/claude-code-shared-personal-config</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>ai-config</category>
      <category>onboarding</category>
    </item>
    <item>
      <title><![CDATA[Stow Symlink Health Checking]]></title>
      <description><![CDATA[GNU Stow creates symlinks from system config paths back to a dotfiles repo,]]></description>
      <link>https://brandonwie.dev/posts/stow-symlink-health-checking</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/stow-symlink-health-checking</guid>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>dotfiles</category>
      <category>stow</category>
      <category>symlinks</category>
    </item>
    <item>
      <title><![CDATA[Phase A→B Classifier Deployment: Zero-Shot to Fine-Tuned]]></title>
      <description><![CDATA[How to ship a working intent classifier on day one with zero labeled data, then graduate to a domain-specific model as you collect examples.]]></description>
      <link>https://brandonwie.dev/posts/distilbert-vs-bart-intent-classification</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/distilbert-vs-bart-intent-classification</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>nlp</category>
      <category>intent-classification</category>
      <category>distilbert</category>
      <category>bart</category>
      <category>model-selection</category>
    </item>
    <item>
      <title><![CDATA[I Built What Karpathy Described — Before He Described It]]></title>
      <description><![CDATA[Andrej Karpathy published a pattern for LLM-maintained knowledge bases. I have been running one for months. Here is what the comparison revealed.]]></description>
      <link>https://brandonwie.dev/posts/karpathy-llm-knowledge-bases</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/karpathy-llm-knowledge-bases</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>knowledge-management</category>
      <category>claude-code</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[LLM Fine-Tuning Strategies]]></title>
      <description><![CDATA[A practical decision framework for choosing between prompt engineering, RAG, and LoRA fine-tuning when building LLM-powered applications.]]></description>
      <link>https://brandonwie.dev/posts/llm-fine-tuning-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/llm-fine-tuning-strategies</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>fine-tuning</category>
      <category>llm</category>
    </item>
    <item>
      <title><![CDATA[Population Stability Index (PSI) for Model Drift Detection]]></title>
      <description><![CDATA[How to detect when your deployed classifier's input distribution shifts away from training data — before accuracy degrades — using a lightweight statistical metric.]]></description>
      <link>https://brandonwie.dev/posts/psi-model-drift-detection</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/psi-model-drift-detection</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>mlops</category>
      <category>drift-detection</category>
      <category>monitoring</category>
      <category>statistics</category>
    </item>
    <item>
      <title><![CDATA[Anthropic MCP Context Budget Optimization]]></title>
      <description><![CDATA[Anthropic-hosted MCP integrations consume ~71K tokens of your context window at session start — even when you never call them. Here is how to reclaim that budget.]]></description>
      <link>https://brandonwie.dev/posts/anthropic-mcp-context-budget-optimization</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/anthropic-mcp-context-budget-optimization</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>ai-ml</category>
    </item>
    <item>
      <title><![CDATA[Docker Subnet Collision with Static-IP Services]]></title>
      <description><![CDATA[When multiple Docker Compose projects define custom bridge networks, their subnets can collide silently. Here is how to diagnose and fix it.]]></description>
      <link>https://brandonwie.dev/posts/docker-subnet-collision-static-ip-services</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/docker-subnet-collision-static-ip-services</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[Hybrid CI: Self-Hosted Jenkins + GitHub Actions]]></title>
      <description><![CDATA[Why use one CI system when you can use both? A split architecture that plays to each tool's strengths for polyglot portfolio projects.]]></description>
      <link>https://brandonwie.dev/posts/hybrid-ci-jenkins-github-actions</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/hybrid-ci-jenkins-github-actions</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>ci-cd</category>
      <category>jenkins</category>
      <category>github-actions</category>
      <category>architecture-decision</category>
    </item>
    <item>
      <title><![CDATA[PortAudio Stale USB Audio Device Handle]]></title>
      <description><![CDATA[Long-running audio daemons using PortAudio silently produce zero-filled buffers when the USB device handle goes stale. Here is how to diagnose and fix it.]]></description>
      <link>https://brandonwie.dev/posts/portaudio-stale-usb-audio-handle</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/portaudio-stale-usb-audio-handle</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>devops</category>
    </item>
    <item>
      <title><![CDATA[Google Meet Link Creation]]></title>
      <description><![CDATA[Lesson learned from implementing programmatic Google Meet link creation.]]></description>
      <link>https://brandonwie.dev/posts/google-meet-link-creation</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/google-meet-link-creation</guid>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[The Next Intelligence Explosion Is Social, Not Computational]]></title>
      <description><![CDATA[A Google paper argues every major intelligence explosion emerged from social organization, not individual cognition — and AI will follow the same pattern.]]></description>
      <link>https://brandonwie.dev/posts/next-intelligence-explosion-social</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/next-intelligence-explosion-social</guid>
      <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>ai-agents</category>
      <category>research</category>
      <category>society</category>
    </item>
    <item>
      <title><![CDATA[WAF Allowlist Patterns]]></title>
      <description><![CDATA[Block-by-default WAF approach using route allowlisting. Stronger security than]]></description>
      <link>https://brandonwie.dev/posts/waf-allowlist-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/waf-allowlist-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>waf</category>
      <category>security</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Redis and BullMQ Queue Patterns]]></title>
      <description><![CDATA[Comprehensive guide to Redis-backed job queues with BullMQ in Node.js/NestJS]]></description>
      <link>https://brandonwie.dev/posts/redis-queue-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/redis-queue-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>redis</category>
      <category>bullmq</category>
      <category>queue</category>
      <category>node.js</category>
    </item>
    <item>
      <title><![CDATA[AI PR Review Validation Patterns]]></title>
      <description><![CDATA[Common patterns where AI code reviewers (Claude, Copilot, Codex) produce false]]></description>
      <link>https://brandonwie.dev/posts/ai-pr-review-validation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ai-pr-review-validation-patterns</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>ai</category>
      <category>code-review</category>
    </item>
    <item>
      <title><![CDATA[Gemini Asymmetric Embeddings]]></title>
      <description><![CDATA[Gemini's text-embedding-004 uses asymmetric embedding with task_type to encode queries and documents differently, producing better retrieval results than symmetric models.]]></description>
      <link>https://brandonwie.dev/posts/gemini-asymmetric-embeddings</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/gemini-asymmetric-embeddings</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>embeddings</category>
      <category>google</category>
    </item>
    <item>
      <title><![CDATA[RAG Hybrid Search Architecture]]></title>
      <description><![CDATA[Why single-method retrieval fails and how fusing dense, sparse, fuzzy, and managed search with Reciprocal Rank Fusion builds a retrieval pipeline that handles both semantic understanding and keyword precision.]]></description>
      <link>https://brandonwie.dev/posts/rag-hybrid-search-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/rag-hybrid-search-architecture</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai-ml</category>
      <category>rag</category>
      <category>search</category>
      <category>architecture</category>
    </item>
    <item>
      <title><![CDATA[pgvector HNSW Index in PostgreSQL]]></title>
      <description><![CDATA[You don't need a dedicated vector database for semantic search — pgvector with HNSW indexes handles under 100K vectors at over 95% recall, right inside PostgreSQL.]]></description>
      <link>https://brandonwie.dev/posts/pgvector-hnsw-postgresql</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/pgvector-hnsw-postgresql</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>database</category>
      <category>search</category>
      <category>postgresql</category>
    </item>
    <item>
      <title><![CDATA[EBS vs EFS: AWS Storage Comparison]]></title>
      <description><![CDATA[Understanding when to use EBS (block storage) vs EFS (network filesystem).]]></description>
      <link>https://brandonwie.dev/posts/ebs-vs-efs-storage</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ebs-vs-efs-storage</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>storage</category>
      <category>devops</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ECS Autoscaling Patterns]]></title>
      <description><![CDATA[Best practices for implementing ECS service autoscaling with migration task]]></description>
      <link>https://brandonwie.dev/posts/ecs-autoscaling-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ecs-autoscaling-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>autoscaling</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title><![CDATA[NAT Gateway Architecture]]></title>
      <description><![CDATA[Understanding NAT Gateway placement and VPC network flow.]]></description>
      <link>https://brandonwie.dev/posts/nat-gateway-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/nat-gateway-architecture</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>vpc</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[AWS Security Groups Fundamentals]]></title>
      <description><![CDATA[Security Groups are virtual firewalls for AWS resources, controlling inbound]]></description>
      <link>https://brandonwie.dev/posts/security-groups-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/security-groups-fundamentals</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>security</category>
      <category>networking</category>
    </item>
    <item>
      <title><![CDATA[Terraform Fundamentals]]></title>
      <description><![CDATA[Core Terraform concepts for AWS infrastructure management.]]></description>
      <link>https://brandonwie.dev/posts/terraform-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/terraform-fundamentals</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>terraform</category>
      <category>infrastructure-as-code</category>
    </item>
    <item>
      <title><![CDATA[Terraform RDS Credentials Management]]></title>
      <description><![CDATA[Managing RDS credentials securely using variables instead of hardcoding.]]></description>
      <link>https://brandonwie.dev/posts/terraform-rds-credentials</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/terraform-rds-credentials</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>terraform</category>
      <category>rds</category>
      <category>security</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[AWS WAF Implementation]]></title>
      <description><![CDATA[Web Application Firewall setup with allowlist approach.]]></description>
      <link>https://brandonwie.dev/posts/waf-implementation</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/waf-implementation</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>security</category>
      <category>waf</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Amplitude ETL Partitioning]]></title>
      <description><![CDATA[How Amplitude event data is partitioned when moving from raw to refined storage.]]></description>
      <link>https://brandonwie.dev/posts/amplitude-etl-partitioning</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/amplitude-etl-partitioning</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>amplitude</category>
      <category>spark</category>
      <category>partitioning</category>
    </item>
    <item>
      <title><![CDATA[Amplitude Export API Response Format]]></title>
      <description><![CDATA[The Amplitude Export API returns data in a **nested compression format** that is]]></description>
      <link>https://brandonwie.dev/posts/amplitude-export-api-format</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/amplitude-export-api-format</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>amplitude</category>
      <category>api</category>
      <category>data-format</category>
    </item>
    <item>
      <title><![CDATA[Backfill Stats Manifest on Early Exit]]></title>
      <description><![CDATA[When a job has an early exit path (e.g., "no work to do"), always save a]]></description>
      <link>https://brandonwie.dev/posts/backfill-stats-manifest-early-exit</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/backfill-stats-manifest-early-exit</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>slack</category>
    </item>
    <item>
      <title><![CDATA[Calendar EXDATE Behavior: Apple vs Google]]></title>
      <description><![CDATA[Understanding how Apple Calendar and Google Calendar handle recurring event]]></description>
      <link>https://brandonwie.dev/posts/calendar-exdate-behavior</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/calendar-exdate-behavior</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>calendar</category>
      <category>icalendar</category>
      <category>rfc5545</category>
    </item>
    <item>
      <title><![CDATA[Celery API-Side Dispatch Pattern]]></title>
      <description><![CDATA[Creating a send-only Celery client in an API service that dispatches tasks to a]]></description>
      <link>https://brandonwie.dev/posts/celery-api-side-dispatch</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/celery-api-side-dispatch</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>celery</category>
      <category>python</category>
      <category>async</category>
    </item>
    <item>
      <title><![CDATA[class-transformer Undefined Own-Property Bug]]></title>
      <description><![CDATA[When `plainToInstance()` creates class instances under ES2022+ TypeScript]]></description>
      <link>https://brandonwie.dev/posts/class-transformer-undefined-fields</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/class-transformer-undefined-fields</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typescript</category>
      <category>class-transformer</category>
      <category>gotcha</category>
    </item>
    <item>
      <title><![CDATA[CPU Cache Locality in Batch Field Extraction]]></title>
      <description><![CDATA[Multiple `.map()` calls over the same array force the CPU to reload each object]]></description>
      <link>https://brandonwie.dev/posts/cpu-cache-locality-batch-iteration</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/cpu-cache-locality-batch-iteration</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>optimization</category>
    </item>
    <item>
      <title><![CDATA[DataSource vs Repository Pattern]]></title>
      <description><![CDATA[Architectural decision guide for choosing between direct DataSource usage and]]></description>
      <link>https://brandonwie.dev/posts/datasource-vs-repository-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/datasource-vs-repository-pattern</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>architecture</category>
      <category>patterns</category>
      <category>typeorm</category>
      <category>nestjs</category>
    </item>
    <item>
      <title><![CDATA[ETL Data Separation Strategy]]></title>
      <description><![CDATA[Mixing regular ETL data with manually recovered backfill data in the same S3]]></description>
      <link>https://brandonwie.dev/posts/etl-data-separation</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/etl-data-separation</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>etl</category>
      <category>data-engineering</category>
      <category>s3</category>
      <category>architecture</category>
    </item>
    <item>
      <title><![CDATA[NestJS WebSockets Reference]]></title>
      <description><![CDATA[Complete reference for implementing WebSocket functionality in NestJS.]]></description>
      <link>https://brandonwie.dev/posts/nestjs-websockets</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/nestjs-websockets</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>nestjs</category>
      <category>websockets</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[pandas itertuples() vs iterrows()]]></title>
      <description><![CDATA[`iterrows()` is the most common way to iterate over DataFrame rows, but it]]></description>
      <link>https://brandonwie.dev/posts/pandas-itertuples-vs-iterrows</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/pandas-itertuples-vs-iterrows</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>python</category>
      <category>pandas</category>
      <category>performance</category>
    </item>
    <item>
      <title><![CDATA[PostgreSQL Advisory Locks with TypeORM]]></title>
      <description><![CDATA[Application-level locks managed by PostgreSQL for coordination.]]></description>
      <link>https://brandonwie.dev/posts/postgresql-advisory-locks</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/postgresql-advisory-locks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>postgresql</category>
      <category>database</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[PostgreSQL IN Clause Parameter Limits]]></title>
      <description><![CDATA[When querying by a large set of IDs using TypeORM's `In([...])` operator, the]]></description>
      <link>https://brandonwie.dev/posts/postgresql-in-clause-limits</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/postgresql-in-clause-limits</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>postgresql</category>
      <category>typeorm</category>
      <category>performance</category>
    </item>
    <item>
      <title><![CDATA[Deduplicating Functions with Keyword-Only Parameters]]></title>
      <description><![CDATA[Two modules contain near-identical functions with slight behavioral differences.]]></description>
      <link>https://brandonwie.dev/posts/python-function-dedup-keyword-params</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/python-function-dedup-keyword-params</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>python</category>
      <category>refactoring</category>
      <category>api-design</category>
    </item>
    <item>
      <title><![CDATA[Sentry N+1 Query Detection]]></title>
      <description><![CDATA[How Sentry detects N+1 queries at runtime, common false positives from parallel]]></description>
      <link>https://brandonwie.dev/posts/sentry-n-plus-one-detection</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/sentry-n-plus-one-detection</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>observability</category>
      <category>sentry</category>
    </item>
    <item>
      <title><![CDATA[Stale vs Orphan Blocks in Calendar Sync]]></title>
      <description><![CDATA[When syncing calendar data from Google Calendar API, two distinct cleanup]]></description>
      <link>https://brandonwie.dev/posts/stale-vs-orphan-blocks</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/stale-vs-orphan-blocks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>sync</category>
      <category>google-calendar</category>
    </item>
    <item>
      <title><![CDATA[Sync Token Invalidation Recovery (410 GONE)]]></title>
      <description><![CDATA[When Google Calendar API returns 410 GONE, the sync token is invalidated and a]]></description>
      <link>https://brandonwie.dev/posts/sync-token-invalidation-recovery</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/sync-token-invalidation-recovery</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>sync</category>
      <category>error-handling</category>
    </item>
    <item>
      <title><![CDATA[TypeORM CLI와 NestJS DataSource 충돌]]></title>
      <description><![CDATA[TypeORM CLI를 NestJS 프로젝트에서 사용할 때 발생하는 연결 충돌 문제와 해결 방법.]]></description>
      <link>https://brandonwie.dev/posts/typeorm-cli-nestjs-datasource</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/typeorm-cli-nestjs-datasource</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typeorm</category>
      <category>nestjs</category>
    </item>
    <item>
      <title><![CDATA[TypeScript Type Narrowing Over Assertions]]></title>
      <description><![CDATA[Prefer type narrowing over non-null assertions (`!`) and forced casting]]></description>
      <link>https://brandonwie.dev/posts/typescript-type-narrowing</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/typescript-type-narrowing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>typescript</category>
      <category>best-practices</category>
    </item>
    <item>
      <title><![CDATA[updatedAt Staleness Guard]]></title>
      <description><![CDATA[When receiving asynchronous updates (webhooks, message queues), compare the]]></description>
      <link>https://brandonwie.dev/posts/updatedAt-staleness-guard</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/updatedAt-staleness-guard</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>sync</category>
      <category>webhooks</category>
      <category>race-condition</category>
    </item>
    <item>
      <title><![CDATA[Webhook vs User Activity]]></title>
      <description><![CDATA[Webhooks from external services indicate **their** activity, not **your user's**]]></description>
      <link>https://brandonwie.dev/posts/webhook-vs-user-activity</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/webhook-vs-user-activity</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>webhooks</category>
      <category>architecture</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[Amplitude Export API Timezone Behavior]]></title>
      <description><![CDATA[How Amplitude Export API handles timezones and hour boundaries for event data]]></description>
      <link>https://brandonwie.dev/posts/amplitude-export-api-timezone</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/amplitude-export-api-timezone</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>data</category>
      <category>amplitude</category>
      <category>timezone</category>
      <category>api</category>
    </item>
    <item>
      <title><![CDATA[Airflow Celery Worker Log Server Configuration]]></title>
      <description><![CDATA[When using CeleryExecutor with workers on separate machines, the webserver needs]]></description>
      <link>https://brandonwie.dev/posts/airflow-celery-worker-log-server</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-celery-worker-log-server</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>celery</category>
      <category>logging</category>
    </item>
    <item>
      <title><![CDATA[Airflow CI/CD Concepts]]></title>
      <description><![CDATA[Understanding Airflow deployment and CI/CD concepts through a kitchen analogy.]]></description>
      <link>https://brandonwie.dev/posts/airflow-cicd-concepts</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-cicd-concepts</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>cicd</category>
      <category>docker</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Airflow DAG-Level Callbacks]]></title>
      <description><![CDATA[Airflow 2.x silently ignores `on_success_callback` at the DAG level. Only]]></description>
      <link>https://brandonwie.dev/posts/airflow-dag-level-callbacks</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-dag-level-callbacks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>callbacks</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Airflow DAG start_date and Manual Triggers]]></title>
      <description><![CDATA[When manually triggering a DAG, Airflow may skip task execution if the trigger]]></description>
      <link>https://brandonwie.dev/posts/airflow-dag-start-date</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-dag-start-date</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
    </item>
    <item>
      <title><![CDATA[Airflow Manual DAG Config Pattern]]></title>
      <description><![CDATA[Pattern for allowing manual DAG triggers with custom parameters while keeping]]></description>
      <link>https://brandonwie.dev/posts/airflow-manual-dag-config</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-manual-dag-config</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>dag</category>
      <category>testing</category>
    </item>
    <item>
      <title><![CDATA[Airflow Task Dependency Syntax]]></title>
      <description><![CDATA[The `>>` operator in Airflow sets task dependencies and returns the downstream]]></description>
      <link>https://brandonwie.dev/posts/airflow-task-dependency-syntax</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/airflow-task-dependency-syntax</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>python</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Bash set -e and Command Substitution]]></title>
      <description><![CDATA[When using `set -e` (exit on error), command substitution behaves unexpectedly]]></description>
      <link>https://brandonwie.dev/posts/bash-set-e-command-substitution</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/bash-set-e-command-substitution</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>bash</category>
      <category>shell-scripting</category>
    </item>
    <item>
      <title><![CDATA[boto3 S3 put_object() Body Parameter Encoding]]></title>
      <description><![CDATA[An ETL pipeline that uploaded JSON manifest files to S3 was failing with a]]></description>
      <link>https://brandonwie.dev/posts/boto3-s3-encoding</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/boto3-s3-encoding</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>s3</category>
      <category>boto3</category>
      <category>python</category>
    </item>
    <item>
      <title><![CDATA[Claude Code PostToolUse Hooks]]></title>
      <description><![CDATA[PostToolUse hooks fire after a tool completes. They receive JSON via stdin with]]></description>
      <link>https://brandonwie.dev/posts/claude-code-posttooluse-hooks</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/claude-code-posttooluse-hooks</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>claude-code</category>
      <category>hooks</category>
    </item>
    <item>
      <title><![CDATA[DAG Deployment Strategies]]></title>
      <description><![CDATA[Different approaches to deploying Airflow DAGs, with trade-offs analysis.]]></description>
      <link>https://brandonwie.dev/posts/dag-deployment-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/dag-deployment-strategies</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>deployment</category>
      <category>gitops</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Docker Compose CI/CD Patterns]]></title>
      <description><![CDATA[Patterns for using Docker Compose in CI/CD pipelines: separating dev and prod configurations, ECR integration, and deployment strategies.]]></description>
      <link>https://brandonwie.dev/posts/docker-compose-cicd-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/docker-compose-cicd-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>cicd</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ECR Credential Helper]]></title>
      <description><![CDATA[AWS's official solution for automatic ECR authentication. Instead of storing]]></description>
      <link>https://brandonwie.dev/posts/ecr-credential-helper</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ecr-credential-helper</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>docker</category>
      <category>ecr</category>
    </item>
    <item>
      <title><![CDATA[ECR Token Refresh Cron]]></title>
      <description><![CDATA[AWS ECR authentication tokens expire after 12 hours. For long-running Docker]]></description>
      <link>https://brandonwie.dev/posts/ecr-token-refresh-cron</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ecr-token-refresh-cron</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>ecr</category>
      <category>docker</category>
      <category>cron</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[ETL Schedule Timing]]></title>
      <description><![CDATA[How to choose the correct ETL schedule based on data arrival patterns.]]></description>
      <link>https://brandonwie.dev/posts/etl-schedule-timing</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/etl-schedule-timing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>airflow</category>
      <category>etl</category>
      <category>scheduling</category>
    </item>
    <item>
      <title><![CDATA[Linux Fundamentals]]></title>
      <description><![CDATA[1. [Cgroups (Control Groups)](#cgroups-control-groups)]]></description>
      <link>https://brandonwie.dev/posts/linux</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/linux</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title><![CDATA[Local S3 with MinIO]]></title>
      <description><![CDATA[MinIO is an S3-compatible object storage that runs locally via Docker.]]></description>
      <link>https://brandonwie.dev/posts/local-s3-minio</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/local-s3-minio</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>docker</category>
      <category>s3</category>
      <category>minio</category>
      <category>local-dev</category>
    </item>
    <item>
      <title><![CDATA[Python Tooling Stack]]></title>
      <description><![CDATA[Standard Python development tooling for all MOBA projects.]]></description>
      <link>https://brandonwie.dev/posts/python-tooling-stack</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/python-tooling-stack</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>python</category>
      <category>tooling</category>
    </item>
    <item>
      <title><![CDATA[S3 Path Normalization Pattern]]></title>
      <description><![CDATA[S3 key prefixes need consistent trailing slashes when building hierarchical]]></description>
      <link>https://brandonwie.dev/posts/s3-path-handling</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/s3-path-handling</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>aws</category>
      <category>s3</category>
      <category>python</category>
      <category>path-handling</category>
    </item>
    <item>
      <title><![CDATA[Terraform State Recovery]]></title>
      <description><![CDATA[Procedures for recovering from Terraform state drift when state file doesn't]]></description>
      <link>https://brandonwie.dev/posts/terraform-state-recovery</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/terraform-state-recovery</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>terraform</category>
      <category>aws</category>
      <category>disaster-recovery</category>
    </item>
    <item>
      <title><![CDATA[tmux Smart Session Auto-Start]]></title>
      <description><![CDATA[Auto-start tmux via an iTerm2 Profile Command (`tmux-smart-attach`) with numeric]]></description>
      <link>https://brandonwie.dev/posts/tmux-smart-session-auto-start</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/tmux-smart-session-auto-start</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>tmux</category>
      <category>zsh</category>
      <category>terminal</category>
      <category>iterm2</category>
    </item>
    <item>
      <title><![CDATA[uv.lock Best Practice]]></title>
      <description><![CDATA[Whether to commit `uv.lock` to version control.]]></description>
      <link>https://brandonwie.dev/posts/uv-lock-best-practice</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/uv-lock-best-practice</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>python</category>
      <category>uv</category>
    </item>
    <item>
      <title><![CDATA[Giscus SvelteKit Integration]]></title>
      <description><![CDATA[Adding a comment system to a statically generated SvelteKit blog without]]></description>
      <link>https://brandonwie.dev/posts/giscus-sveltekit-integration</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/giscus-sveltekit-integration</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>svelte</category>
      <category>comments</category>
    </item>
    <item>
      <title><![CDATA[Mobile Input UX]]></title>
      <description><![CDATA[Techniques for making custom-styled inputs work properly on mobile browsers.]]></description>
      <link>https://brandonwie.dev/posts/mobile-input-ux</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/mobile-input-ux</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>mobile</category>
      <category>css</category>
    </item>
    <item>
      <title><![CDATA[Paraglide-JS i18n for SvelteKit]]></title>
      <description><![CDATA[Adding Korean/English internationalization to a SvelteKit static blog without]]></description>
      <link>https://brandonwie.dev/posts/paraglide-i18n</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/paraglide-i18n</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>i18n</category>
      <category>svelte</category>
      <category>sveltekit</category>
    </item>
    <item>
      <title><![CDATA[Svelte 5 $effect Rune]]></title>
      <description><![CDATA[In Svelte 5, the reactive statement syntax (`$: { }`) from Svelte 4 is replaced]]></description>
      <link>https://brandonwie.dev/posts/svelte-effect-rune</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/svelte-effect-rune</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>frontend</category>
      <category>svelte</category>
      <category>svelte5</category>
      <category>reactivity</category>
    </item>
    <item>
      <title><![CDATA[Claude Code Expert Workflows]]></title>
      <description><![CDATA[Synthesized patterns from three complementary expert sources: Boris Cherny (tool]]></description>
      <link>https://brandonwie.dev/posts/claude-code-expert-workflows</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/claude-code-expert-workflows</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>workflows</category>
      <category>best-practices</category>
    </item>
    <item>
      <title><![CDATA[CSS Inline-Replaced Element Gap]]></title>
      <description><![CDATA[Elements like `<textarea>`, `<img>`, `<input>`, and `<video>` are]]></description>
      <link>https://brandonwie.dev/posts/css-inline-replaced-element-gap</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/css-inline-replaced-element-gap</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title><![CDATA[Documentation Patterns]]></title>
      <description><![CDATA[The **Buffer Pattern** preserves important discoveries during AI-assisted]]></description>
      <link>https://brandonwie.dev/posts/documentation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/documentation-patterns</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>documentation</category>
      <category>3b</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[macOS Keychain Multi-Account Behavior]]></title>
      <description><![CDATA[macOS Keychain allows multiple entries with the same service name but different]]></description>
      <link>https://brandonwie.dev/posts/macos-keychain-multi-account</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/macos-keychain-multi-account</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>macos</category>
      <category>keychain</category>
      <category>security</category>
      <category>multi-account</category>
    </item>
    <item>
      <title><![CDATA[Markdownlint Conventions]]></title>
      <description><![CDATA[Markdown files across the 3B knowledge base had inconsistent formatting: missing]]></description>
      <link>https://brandonwie.dev/posts/markdownlint-conventions</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/markdownlint-conventions</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>documentation</category>
      <category>markdown</category>
      <category>linting</category>
    </item>
    <item>
      <title><![CDATA[React Demo Pipeline Pattern]]></title>
      <description><![CDATA[Pattern for building a fully functional demo mode in a React dashboard when the]]></description>
      <link>https://brandonwie.dev/posts/react-demo-pipeline-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/react-demo-pipeline-pattern</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>demo-mode</category>
      <category>frontend</category>
      <category>pipeline</category>
    </item>
    <item>
      <title><![CDATA[shadcn/ui Setup with Vite + Tailwind]]></title>
      <description><![CDATA[Manual setup of shadcn/ui component primitives in a Vite + React + TypeScript +]]></description>
      <link>https://brandonwie.dev/posts/shadcn-ui-vite-tailwind-setup</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/shadcn-ui-vite-tailwind-setup</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>shadcn-ui</category>
      <category>tailwind</category>
      <category>vite</category>
      <category>frontend</category>
    </item>
    <item>
      <title><![CDATA[zsh Backtick Evaluation in Claude Code Skills]]></title>
      <description><![CDATA[Claude Code SKILL.md files can trigger zsh command substitution errors when]]></description>
      <link>https://brandonwie.dev/posts/zsh-backtick-eval-in-skills</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/zsh-backtick-eval-in-skills</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>zsh</category>
      <category>debugging</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar API: Recurring Event Updates]]></title>
      <description><![CDATA[Handling "this", "thisAndFollowing", and "all" updates for recurring events.]]></description>
      <link>https://brandonwie.dev/posts/google-calendar-recurring-events</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/google-calendar-recurring-events</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>calendar</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar Recurring Event Operations]]></title>
      <description><![CDATA[Implementation patterns for `all`, `this`, and `thisAndFollowing` recurring]]></description>
      <link>https://brandonwie.dev/posts/recurring-event-operations</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/recurring-event-operations</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>google-api</category>
      <category>calendar</category>
      <category>recurring-events</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[External Calendar Data Normalization]]></title>
      <description><![CDATA[External calendar data (Apple Calendar, GNOME Evolution, travel apps) often]]></description>
      <link>https://brandonwie.dev/posts/external-calendar-normalization</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/external-calendar-normalization</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>rrule</category>
      <category>parsing</category>
    </item>
    <item>
      <title><![CDATA[Partial Access Recurring Events]]></title>
      <description><![CDATA[When users are invited to recurring events from the middle of a series, Google]]></description>
      <link>https://brandonwie.dev/posts/partial-access-recurring-events</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/partial-access-recurring-events</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-calendar</category>
      <category>data-integrity</category>
      <category>edge-cases</category>
    </item>
    <item>
      <title><![CDATA[rrule BYDAY Timezone Correction]]></title>
      <description><![CDATA[The rrule JavaScript library interprets `BYDAY` weekday names in UTC, not the]]></description>
      <link>https://brandonwie.dev/posts/rrule-byday-timezone-correction</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/rrule-byday-timezone-correction</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>rrule</category>
      <category>timezone</category>
      <category>icalendar</category>
    </item>
    <item>
      <title><![CDATA[RRULE EXDATE Parsing with Timezone]]></title>
      <description><![CDATA[The `rrule` JavaScript library's `rrulestr()` function fails when:]]></description>
      <link>https://brandonwie.dev/posts/rrule-exdate-parsing</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/rrule-exdate-parsing</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
    </item>
    <item>
      <title><![CDATA[Lemon Squeezy Subscription Management]]></title>
      <description><![CDATA[Subscription lifecycle, cancellation, expiration, and reactivation.]]></description>
      <link>https://brandonwie.dev/posts/lemon-squeezy-subscriptions</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/lemon-squeezy-subscriptions</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>payments</category>
      <category>subscriptions</category>
      <category>work</category>
    </item>
    <item>
      <title><![CDATA[Binary Checksum Verification]]></title>
      <description><![CDATA[Verify downloaded binaries haven't been tampered with using SHA256 checksums.]]></description>
      <link>https://brandonwie.dev/posts/binary-checksum-verification</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/binary-checksum-verification</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>devops</category>
      <category>supply-chain</category>
    </item>
    <item>
      <title><![CDATA[IDOR Prevention via Required Parameters (Type-Level Enforcement)]]></title>
      <description><![CDATA[Insecure Direct Object Reference (IDOR) occurs when an API allows users to]]></description>
      <link>https://brandonwie.dev/posts/idor-prevention-type-level</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/idor-prevention-type-level</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>backend</category>
      <category>typescript</category>
    </item>
    <item>
      <title><![CDATA[Alembic with Async SQLAlchemy]]></title>
      <description><![CDATA[Configuring Alembic migrations to work with SQLAlchemy's async engine]]></description>
      <link>https://brandonwie.dev/posts/alembic-async-sqlalchemy</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/alembic-async-sqlalchemy</guid>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>alembic</category>
      <category>sqlalchemy</category>
      <category>python</category>
      <category>database</category>
    </item>
    <item>
      <title><![CDATA[Claude Code Multi-Profile HUD Setup]]></title>
      <description><![CDATA[Running Claude Code with multiple accounts requires careful HUD configuration to show correct per-account usage stats. Here's how to fix cross-profile data leaks.]]></description>
      <link>https://brandonwie.dev/posts/claude-code-multi-profile-hud</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/claude-code-multi-profile-hud</guid>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>claude-code</category>
      <category>hud</category>
      <category>multi-account</category>
      <category>devtools</category>
    </item>
    <item>
      <title><![CDATA[ECR/ECS Deployment Workflow]]></title>
      <description><![CDATA[Complete guide to container deployment using Amazon ECR and ECS.]]></description>
      <link>https://brandonwie.dev/posts/ecr-ecs-deployment-workflow</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ecr-ecs-deployment-workflow</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>ecr</category>
      <category>docker</category>
      <category>cicd</category>
    </item>
    <item>
      <title><![CDATA[AWS VPC Networking Fundamentals]]></title>
      <description><![CDATA[Comprehensive guide to AWS VPC networking: CIDR notation, subnet design, NAT Gateway placement, route tables, and complete Terraform examples.]]></description>
      <link>https://brandonwie.dev/posts/vpc-networking-fundamentals</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/vpc-networking-fundamentals</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>networking</category>
      <category>vpc</category>
      <category>terraform</category>
    </item>
    <item>
      <title><![CDATA[FastAPI Dependency Injection Patterns]]></title>
      <description><![CDATA[How to use Annotated types with FastAPI Depends() for reusable, type-safe dependency injection across routers.]]></description>
      <link>https://brandonwie.dev/posts/fastapi-dependency-injection-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/fastapi-dependency-injection-patterns</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>fastapi</category>
      <category>python</category>
    </item>
    <item>
      <title><![CDATA[Pessimistic Locking for Race Conditions]]></title>
      <description><![CDATA[Use SELECT FOR UPDATE to prevent race conditions in check-then-insert patterns, with TypeORM implementation and duplicate key safety nets.]]></description>
      <link>https://brandonwie.dev/posts/pessimistic-locking-race-conditions</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/pessimistic-locking-race-conditions</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>database</category>
      <category>concurrency</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[WebSocket Architecture in AWS ECS/ALB]]></title>
      <description><![CDATA[How WebSocket connections work with ALB, ECS, and Redis Pub/Sub for real-time notifications in containerized environments.]]></description>
      <link>https://brandonwie.dev/posts/websocket-architecture</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/websocket-architecture</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>websocket</category>
      <category>socket.io</category>
      <category>redis</category>
      <category>aws</category>
      <category>ecs</category>
      <category>alb</category>
    </item>
    <item>
      <title><![CDATA[OAuth 2.0 Implementation Patterns]]></title>
      <description><![CDATA[Practical patterns for implementing OAuth 2.0 flows in backend services.]]></description>
      <link>https://brandonwie.dev/posts/oauth2-implementation-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/oauth2-implementation-patterns</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>oauth</category>
      <category>api</category>
    </item>
    <item>
      <title><![CDATA[Understanding Traefik, Keycloak, and ForwardAuth]]></title>
      <description><![CDATA[How to add centralized authentication to Kubernetes services using Traefik ForwardAuth, Keycloak, and OAuth2-Proxy.]]></description>
      <link>https://brandonwie.dev/posts/traefik-keycloak-forwardauth</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/traefik-keycloak-forwardauth</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>traefik</category>
      <category>keycloak</category>
      <category>oauth2</category>
      <category>authentication</category>
    </item>
    <item>
      <title><![CDATA[Recharts Dark Theme Customization]]></title>
      <description><![CDATA[Techniques for styling Recharts charts to match a dark terminal theme with CSS]]></description>
      <link>https://brandonwie.dev/posts/recharts-dark-theme-customization</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/recharts-dark-theme-customization</guid>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <category>general</category>
      <category>react</category>
      <category>recharts</category>
      <category>charts</category>
      <category>frontend</category>
      <category>dark-theme</category>
    </item>
    <item>
      <title><![CDATA[AI Code Review Patterns]]></title>
      <description><![CDATA[Patterns observed when AI reviewers (Claude, Copilot, Codex) generate invalid or misleading feedback, and how to handle each one.]]></description>
      <link>https://brandonwie.dev/posts/ai-code-review-patterns</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ai-code-review-patterns</guid>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
      <category>code-review</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[Batch Processing Trade-offs]]></title>
      <description><![CDATA[When processing multiple entities that share database operations, there's a]]></description>
      <link>https://brandonwie.dev/posts/batch-processing-trade-offs</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/batch-processing-trade-offs</guid>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>performance</category>
      <category>architecture</category>
      <category>trade-offs</category>
    </item>
    <item>
      <title><![CDATA[ECS Auto-Scaling Deep Dive]]></title>
      <description><![CDATA[Comprehensive guide to ECS auto-scaling concepts, algorithms, and container]]></description>
      <link>https://brandonwie.dev/posts/ecs-autoscaling-deep-dive</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/ecs-autoscaling-deep-dive</guid>
      <pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate>
      <category>aws</category>
      <category>ecs</category>
      <category>autoscaling</category>
      <category>fargate</category>
    </item>
    <item>
      <title><![CDATA[GitHub PR Review API - Inline Comments]]></title>
      <description><![CDATA[How to create PR reviews with inline comments using the GitHub API via `gh` CLI.]]></description>
      <link>https://brandonwie.dev/posts/github-pr-review-api-inline-comments</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/github-pr-review-api-inline-comments</guid>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
      <category>github</category>
      <category>api</category>
      <category>pr-review</category>
    </item>
    <item>
      <title><![CDATA[Two-Phase Deletion Pattern]]></title>
      <description><![CDATA[A safe deletion pattern for systems without rollback capability where external]]></description>
      <link>https://brandonwie.dev/posts/two-phase-deletion-pattern</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/two-phase-deletion-pattern</guid>
      <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>architecture</category>
      <category>data-integrity</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[Infrastructure Hardening Checklist]]></title>
      <description><![CDATA[Comprehensive security hardening checklist for AWS infrastructure. Covers]]></description>
      <link>https://brandonwie.dev/posts/infrastructure-hardening-checklist</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/infrastructure-hardening-checklist</guid>
      <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>aws</category>
      <category>infrastructure</category>
      <category>checklist</category>
    </item>
    <item>
      <title><![CDATA[Google Calendar Sync Strategies]]></title>
      <description><![CDATA[Full sync vs incremental sync patterns and calendar segregation logic.]]></description>
      <link>https://brandonwie.dev/posts/google-calendar-sync-strategies</link>
      <guid isPermaLink="true">https://brandonwie.dev/posts/google-calendar-sync-strategies</guid>
      <pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate>
      <category>backend</category>
      <category>google-api</category>
      <category>sync</category>
      <category>calendar</category>
      <category>work</category>
    </item>
  </channel>
</rss>