<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Yaseen Khatib — Field Notes</title>
    <link>https://yaseenkhatib.streamerosai.com/blog</link>
    <atom:link href="https://yaseenkhatib.streamerosai.com/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Yaseen Khatib — Senior Full-Stack Developer (MERN) building production AI systems: Agentic RAG, LLM orchestration, and five solo-shipped products. Open to remote, hybrid, or on-site roles.</description>
    <language>en</language>
    <item>
      <title>Optimistic React UIs that don't drift from the server</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/optimistic-react-uis-that-dont-drift-from-the-server/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/optimistic-react-uis-that-dont-drift-from-the-server/</guid>
      <pubDate>Mon, 27 Jul 2026 10:00:00 GMT</pubDate>
      <description>How I ship optimistic UI in React without state drift: versioned writes, idempotency keys, React Query/Zustand patterns, and the rollback math.</description>
    </item>
    <item>
      <title>When useMemo actually helps in React 19, and how to measure it</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/when-usememo-actually-helps-in-react-19-and-how-to-measure-it/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/when-usememo-actually-helps-in-react-19-and-how-to-measure-it/</guid>
      <pubDate>Fri, 24 Jul 2026 10:00:00 GMT</pubDate>
      <description>A blunt, practical guide to useMemo in React 19: where it genuinely helps, where it’s noise, and how to profile renders before you cargo‑cult memoization.</description>
    </item>
    <item>
      <title>Stop mixing render and domain state in React dashboards</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/stop-mixing-render-and-domain-state-in-react-dashboards/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/stop-mixing-render-and-domain-state-in-react-dashboards/</guid>
      <pubDate>Wed, 22 Jul 2026 10:00:00 GMT</pubDate>
      <description>A pragmatic split for large React 18 dashboards: keep server/domain data out of UI stores, cut re-renders and payloads with a thin serialization adapter.</description>
    </item>
    <item>
      <title>How I Went From My First Dev Job to Building AI Systems</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/my-journey-web-developer-to-ai-engineer/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/my-journey-web-developer-to-ai-engineer/</guid>
      <pubDate>Mon, 20 Jul 2026 10:00:00 GMT</pubDate>
      <description>Five years, honestly told: an ASP.NET healthcare backend in 2021, full-stack MERN through the ChatGPT shift, nights of embeddings homework, and finally shipping five AI products solo. The journey, without the gloss.</description>
    </item>
    <item>
      <title>Tauri + sqlx + SQLite: migrations and WAL for local apps</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/tauri-sqlx-sqlite-migrations-and-wal-for-local-apps/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/tauri-sqlx-sqlite-migrations-and-wal-for-local-apps/</guid>
      <pubDate>Mon, 20 Jul 2026 10:00:00 GMT</pubDate>
      <description>Practical guide to embedding SQLite in Tauri with sqlx: file location, compile-time migrations, WAL pragmas, and failure modes for single-user datastores.</description>
    </item>
    <item>
      <title>Zero Network Leakage in CI: Deny-by-Default Egress Harness</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-network-leakage-in-ci-deny-by-default-egress-harness/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-network-leakage-in-ci-deny-by-default-egress-harness/</guid>
      <pubDate>Fri, 17 Jul 2026 10:00:00 GMT</pubDate>
      <description>A practical, cross-platform harness to prove your desktop app makes zero outbound network calls in CI by default—block, log, count, and assert.</description>
    </item>
    <item>
      <title>Unifying Twitch and YouTube Live Chat: Ordered, De-duplicated</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/unifying-twitch-and-youtube-live-chat-ordered-de-duplicated/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/unifying-twitch-and-youtube-live-chat-ordered-de-duplicated/</guid>
      <pubDate>Thu, 16 Jul 2026 10:00:00 GMT</pubDate>
      <description>Build a single, ordered, de-duplicated event stream from Twitch IRC and YouTube Live Chat with Hybrid Logical Clocks, watermarks, and idempotent delivery.</description>
    </item>
    <item>
      <title>On-Device Twitch IRC in Rust: Reconnect State Machine + Backoff</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/on-device-twitch-irc-in-rust-reconnect-state-machine-backoff/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/on-device-twitch-irc-in-rust-reconnect-state-machine-backoff/</guid>
      <pubDate>Wed, 15 Jul 2026 10:00:00 GMT</pubDate>
      <description>Build a fully local Twitch chat ingestor in Rust with a resilient WebSocket reconnect loop, exponential backoff with jitter, and a pragmatic state machine that survives flaky networks.</description>
    </item>
    <item>
      <title>Serverless local-first settings sync over LAN with Automerge + mDNS</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/serverless-local-first-settings-sync-over-lan-with-automerge-mdns/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/serverless-local-first-settings-sync-over-lan-with-automerge-mdns/</guid>
      <pubDate>Tue, 14 Jul 2026 10:00:00 GMT</pubDate>
      <description>Replicate user settings across devices on the same LAN without servers by combining Automerge CRDT sync messages with mDNS peer discovery and a tiny TCP transport.</description>
    </item>
    <item>
      <title>Encrypt Tauri local storage at rest with age + OS keychain</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/encrypt-tauri-local-storage-at-rest-with-age-os-keychain/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/encrypt-tauri-local-storage-at-rest-with-age-os-keychain/</guid>
      <pubDate>Mon, 13 Jul 2026 10:00:00 GMT</pubDate>
      <description>A zero-cloud, cross‑platform pattern to encrypt Tauri local storage at rest using age (X25519) and the OS keychain for seamless key management.</description>
    </item>
    <item>
      <title>Zero-Account Auth: Device-Bound Identity + Capability Tokens</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-account-auth-device-bound-identity-capability-tokens/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-account-auth-device-bound-identity-capability-tokens/</guid>
      <pubDate>Sun, 12 Jul 2026 10:00:00 GMT</pubDate>
      <description>Build secure apps without accounts or an auth server: bind identity to device keys, mint PASETO capability tokens, and enforce DPoP for stateless, least-privilege access.</description>
    </item>
    <item>
      <title>Kill Async Deadlocks in Tauri with Tokio Task Dumps + Tracing</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/kill-async-deadlocks-in-tauri-with-tokio-task-dumps-tracing/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/kill-async-deadlocks-in-tauri-with-tokio-task-dumps-tracing/</guid>
      <pubDate>Sat, 11 Jul 2026 10:00:00 GMT</pubDate>
      <description>A field guide to diagnosing and terminating async deadlocks in production Tauri apps using Tokio task dumps, tokio-console, and end-to-end tracing spans.</description>
    </item>
    <item>
      <title>Zero-copy scene caches with memmap2: instant loads, no RSS bloat</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-copy-scene-caches-with-memmap2-instant-loads-no-rss-bloat/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-copy-scene-caches-with-memmap2-instant-loads-no-rss-bloat/</guid>
      <pubDate>Fri, 10 Jul 2026 10:00:00 GMT</pubDate>
      <description>Use memory-mapped files to load massive scene assets instantly and safely without duplicating data in heap and page cache. Concrete Rust patterns inside.</description>
    </item>
    <item>
      <title>Flamegraphs over Tauri IPC: from Rust event to React paint</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/flamegraphs-over-tauri-ipc-from-rust-event-to-react-paint/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/flamegraphs-over-tauri-ipc-from-rust-event-to-react-paint/</guid>
      <pubDate>Thu, 09 Jul 2026 10:00:00 GMT</pubDate>
      <description>A practical, end-to-end method to profile Tauri apps: correlate Rust spans with React paints, align clocks, and read a single cross-IPC flamegraph.</description>
    </item>
    <item>
      <title>SIMD sentiment scoring in Rust via WASM workers (no UI jank)</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/simd-sentiment-scoring-in-rust-via-wasm-workers-no-ui-jank/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/simd-sentiment-scoring-in-rust-via-wasm-workers-no-ui-jank/</guid>
      <pubDate>Wed, 08 Jul 2026 10:00:00 GMT</pubDate>
      <description>Build a SIMD-accelerated sentiment scorer in Rust, ship it as WebAssembly, and keep chat analysis off the UI thread without hurting battery or FPS.</description>
    </item>
    <item>
      <title>I Shipped 5 Products in 12 Months — Solo, Unfunded, and Faster Than Most Teams Ship One</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/shipped-5-products-solo-12-months/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/shipped-5-products-solo-12-months/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>Five production systems — a Rust desktop cockpit, a workflow engine, a local-first AI finance agent, and two autonomous pipelines — designed, built, and shipped by one engineer. Here's the operating model.</description>
    </item>
    <item>
      <title>Vision Over Syntax: I Design the Entire Product in My Head Before the First Commit</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/vision-over-syntax-architecture-first/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/vision-over-syntax-architecture-first/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>Syntax is solved; vision is not. How architecture-first thinking — data contracts, trust boundaries, and deliberate refusals — is the real engineering skill in the AI era, shown through shipped products.</description>
    </item>
    <item>
      <title>One Architect + Claude + MCP = A Full Engineering Squad: The Operating Model I'd Install at Your Company</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/one-architect-claude-mcp-full-squad/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/one-architect-claude-mcp-full-squad/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>The exact three-layer operating model — architect, Claude Code, MCP-wired systems — that lets one engineer ship like a squad, and the 30-day plan for installing it inside a real company.</description>
    </item>
    <item>
      <title>Your Company Is Overpaying for AI by 80% — I Built a Live Simulator That Proves It</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/ai-finops-playbook-stop-burning-money/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/ai-finops-playbook-stop-burning-money/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>Most production AI traffic is simple or repetitive, yet it's billed at frontier-model prices. The cache → flash → frontier cascade that fixes the economics, with a live interactive cost simulator.</description>
    </item>
    <item>
      <title>My Networking Runs Itself: The LinkedIn Pipeline That Grew My Reach While I Slept</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/linkedin-pipeline-job-search-runs-itself/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/linkedin-pipeline-job-search-runs-itself/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>How I engineered consistency: an autonomous GitHub Actions pipeline that turns real work into scheduled LinkedIn posts, tracks state in Git, costs $0 to run — and what the same pattern automates inside a company.</description>
    </item>
    <item>
      <title>The $0 Content Engine: My Blog Writes, Commits, and Deploys Itself Twice a Week</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-dollar-content-engine/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-dollar-content-engine/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>A cron-scheduled pipeline drafts articles with Gemini, writes MDX, commits to Git, and redeploys the static site — no CMS, no server, no database, no bill. The architecture of refusing infrastructure.</description>
    </item>
    <item>
      <title>I Built an AI Money Agent That's Structurally Incapable of Touching the Money</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/sable-ai-agent-never-touches-money/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/sable-ai-agent-never-touches-money/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>Sable is a local-first AI financial agent: all data in on-device SQLite, no cloud backend, and a Review &amp; Confirm boundary where the model proposes but only a human commits. The trust architecture, explained.</description>
    </item>
    <item>
      <title>Everyone Said 'Just Use Electron.' I Wrote streamerOS in Rust — Here's What That Bought</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/streameros-rust-over-electron/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/streameros-rust-over-electron/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>streamerOS runs on the most contested consumer PC there is — game, encoder, OBS, chat. Why a Rust + Tauri core, on-device chat ingestion, and a MessagePack IPC bridge were the product decision, not a preference.</description>
    </item>
    <item>
      <title>The 94% Decision: One Architecture Call That Made IntegrateX Feel Instant</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/the-94-percent-decision-integratex/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/the-94-percent-decision-integratex/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>Persisting React Flow's UI objects nearly sank the product. Drawing a serialization boundary between view and domain cut payloads 94% — the reasoning behind the call, and how to audit your own product for it.</description>
    </item>
    <item>
      <title>Hire My Head, Not My Hands: What 5 Solo Products Prove That a Résumé Can't</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/hire-my-head-not-my-hands/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/hire-my-head-not-my-hands/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>AI made hands abundant; heads stayed scarce. The closing argument of the Founder's Log series — the architectural judgment pattern across five shipped products, addressed to the person deciding whether to interview me.</description>
    </item>
    <item>
      <title>Shrink streamerOS Rust binaries: opt=z, fat LTO, panic=abort</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/shrink-streameros-rust-binaries-optz-fat-lto-panicabort/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/shrink-streameros-rust-binaries-optz-fat-lto-panicabort/</guid>
      <pubDate>Tue, 07 Jul 2026 10:00:00 GMT</pubDate>
      <description>A practical, measured look at how opt-level=z, fat LTO, and panic=abort shrink Rust binaries for production systems like streamerOS—and the trade-offs.</description>
    </item>
    <item>
      <title>Rust structured concurrency: cap media decoders w/ tokio JoinSet</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/rust-structured-concurrency-cap-media-decoders-w-tokio-joinset/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/rust-structured-concurrency-cap-media-decoders-w-tokio-joinset/</guid>
      <pubDate>Mon, 06 Jul 2026 10:00:00 GMT</pubDate>
      <description>Use tokio JoinSet and semaphores to bound parallel media decoders, enforce backpressure, and build cancellation-safe ffmpeg workers with structured concurrency.</description>
    </item>
    <item>
      <title>Pinning a 1.8% Idle CPU: Evented vs Polling in Tauri Tray Apps</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/pinning-a-18-idle-cpu-evented-vs-polling-in-tauri-tray-apps/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/pinning-a-18-idle-cpu-evented-vs-polling-in-tauri-tray-apps/</guid>
      <pubDate>Sun, 05 Jul 2026 10:00:00 GMT</pubDate>
      <description>A ruthless, code-first look at hitting a ~1.8% idle CPU budget in long‑running Tauri tray apps by replacing polling with event‑driven plumbing.</description>
    </item>
    <item>
      <title>Crossbeam SPSC ring buffers for 60 FPS Rust audio meters</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/crossbeam-spsc-ring-buffers-for-60-fps-rust-audio-meters/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/crossbeam-spsc-ring-buffers-for-60-fps-rust-audio-meters/</guid>
      <pubDate>Sat, 04 Jul 2026 10:00:00 GMT</pubDate>
      <description>Build a zero-allocation, lock-free SPSC ring buffer with crossbeam to stream audio metering data to a 60 FPS UI in Rust without contention.</description>
    </item>
    <item>
      <title>A reproducible RAM-regression workflow in Rust with dhat + heaptrack</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/a-reproducible-ram-regression-workflow-in-rust-with-dhat-heaptrack/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/a-reproducible-ram-regression-workflow-in-rust-with-dhat-heaptrack/</guid>
      <pubDate>Fri, 03 Jul 2026 10:00:00 GMT</pubDate>
      <description>A practical, deterministic workflow to catch and bisect memory regressions in a Rust media pipeline using dhat for budgets and heaptrack for call stacks.</description>
    </item>
    <item>
      <title>Halving Tauri v2 IPC: Batch Events + rmp-serde MessagePack</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/halving-tauri-v2-ipc-batch-events-rmp-serde-messagepack/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/halving-tauri-v2-ipc-batch-events-rmp-serde-messagepack/</guid>
      <pubDate>Thu, 02 Jul 2026 10:00:00 GMT</pubDate>
      <description>Cut Tauri v2 Rust↔WebView IPC overhead by batching events and serializing with rmp-serde MessagePack, with concrete code for both sides.</description>
    </item>
    <item>
      <title>serde_json to simd-json in streamerOS IPC: hot-path deserialization</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/serdejson-to-simd-json-in-streameros-ipc-hot-path-deserialization/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/serdejson-to-simd-json-in-streameros-ipc-hot-path-deserialization/</guid>
      <pubDate>Wed, 01 Jul 2026 10:00:00 GMT</pubDate>
      <description>We replaced serde_json with simd-json in streamerOS’s IPC layer and benchmarked the deserialize hot path, showing where SIMD wins and where it doesn’t.</description>
    </item>
    <item>
      <title>Tauri Rust Backpressure: Bounded vs Unbounded Channels for Chat Floods</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/tauri-rust-backpressure-bounded-vs-unbounded-channels-for-chat-floods/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/tauri-rust-backpressure-bounded-vs-unbounded-channels-for-chat-floods/</guid>
      <pubDate>Tue, 30 Jun 2026 10:00:00 GMT</pubDate>
      <description>Design a Tauri Rust core that survives chat floods without memory blowups using bounded channels, drop-oldest semantics, and time-based batching.</description>
    </item>
    <item>
      <title>Zero-copy Twitch IRC parsing in Rust with Bytes + nom at 5k/s</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-copy-twitch-irc-parsing-in-rust-with-bytes-nom-at-5ks/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-copy-twitch-irc-parsing-in-rust-with-bytes-nom-at-5ks/</guid>
      <pubDate>Mon, 29 Jun 2026 10:00:00 GMT</pubDate>
      <description>Build a zero-copy Twitch IRC parser in Rust using bytes::Bytes and nom to sustain 5,000+ messages/sec without heap churn or unnecessary allocations.</description>
    </item>
    <item>
      <title>Rust arena allocation to keep streamerOS under 152 MB for 12h</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/rust-arena-allocation-to-keep-streameros-under-152-mb-for-12h/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/rust-arena-allocation-to-keep-streameros-under-152-mb-for-12h/</guid>
      <pubDate>Sun, 28 Jun 2026 10:00:00 GMT</pubDate>
      <description>Practical, code-first arena allocation patterns in Rust that kept our live-streaming OS under 152 MB RAM for 12-hour broadcasts with zero leaks.</description>
    </item>
    <item>
      <title>Tauri v2 + tokio-console: 1.8% CPU with 4 concurrent streams</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/tauri-v2-tokio-console-18-cpu-with-4-concurrent-streams/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/tauri-v2-tokio-console-18-cpu-with-4-concurrent-streams/</guid>
      <pubDate>Sat, 27 Jun 2026 10:00:00 GMT</pubDate>
      <description>A field-tested workflow to profile and tune a Tauri v2 Rust backend using tokio-console, slashing wake storms and sustaining 1.8% CPU across 4 streams.</description>
    </item>
    <item>
      <title>Agentic Workflows vs. Copilots: Autocomplete vs. Autonomy</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/agentic-workflows-vs-copilots/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/agentic-workflows-vs-copilots/</guid>
      <pubDate>Tue, 16 Jun 2026 10:00:00 GMT</pubDate>
      <description>A copilot completes your line; an agent executes your task. Why the difference is categorical — not incremental — and why it separates a 10% speedup from a 10x one.</description>
    </item>
    <item>
      <title>Custom Serialization Adapters: 94% Payload Compression</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/custom-serialization-adapters/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/custom-serialization-adapters/</guid>
      <pubDate>Mon, 15 Jun 2026 10:00:00 GMT</pubDate>
      <description>Rich UI objects make terrible database records. The Serialization Adapter pattern that separates render model from transport record — and cut IntegrateX payloads by 94%.</description>
    </item>
    <item>
      <title>Vector Embeddings in Production: Custom Search for RAG</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/vector-embeddings-in-production/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/vector-embeddings-in-production/</guid>
      <pubDate>Sun, 14 Jun 2026 10:00:00 GMT</pubDate>
      <description>Demo vector search is one query; production RAG is a pipeline. Chunking strategy, metadata-filtered hybrid search, and index freshness — the architecture behind the Police RAG system.</description>
    </item>
    <item>
      <title>Redis Caching Strategies That Don't Serve Stale Data</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/advanced-redis-caching-strategies/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/advanced-redis-caching-strategies/</guid>
      <pubDate>Sat, 13 Jun 2026 10:00:00 GMT</pubDate>
      <description>On a busy portal I learned Redis caching strategies live or die on details: one interceptor boundary, cache-aside vs write-through, TTL jitter, stampede guards.</description>
    </item>
    <item>
      <title>WebSocket Telemetry at Scale: Real-Time Streaming Architectures</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/websocket-telemetry-at-scale/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/websocket-telemetry-at-scale/</guid>
      <pubDate>Fri, 12 Jun 2026 10:00:00 GMT</pubDate>
      <description>A single WebSocket server is a weekend project; streaming to thousands across instances is architecture. Redis pub/sub backplanes, room-scoped subscriptions, and source-side coalescing.</description>
    </item>
    <item>
      <title>MongoDB Aggregation Pipelines: Stage Order Is the Win</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/optimizing-mongodb-aggregation/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/optimizing-mongodb-aggregation/</guid>
      <pubDate>Thu, 11 Jun 2026 10:00:00 GMT</pubDate>
      <description>Profiling a clinical workflow API taught me MongoDB aggregation lives or dies on stage order: $match first on indexes, $lookup treated as the join it is, then read explain.</description>
    </item>
    <item>
      <title>Budgeting the Claude Context Window Before It Truncates You</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/mastering-claude-architecture-context-windows-output-limits/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/mastering-claude-architecture-context-windows-output-limits/</guid>
      <pubDate>Wed, 10 Jun 2026 10:00:00 GMT</pubDate>
      <description>The Claude context window is one token budget shared by prompt, tools, thinking, and reply. I count tokens and guard it in code so a reply never truncates.</description>
    </item>
    <item>
      <title>Role-Based Access Control Patterns for Node.js APIs</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/role-based-access-control-patterns/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/role-based-access-control-patterns/</guid>
      <pubDate>Wed, 10 Jun 2026 10:00:00 GMT</pubDate>
      <description>Authorization bugs don't crash — they let the wrong person succeed. Enforcing RBAC at the middleware layer with JWT claims, fine-grained permissions, and deny-by-default.</description>
    </item>
    <item>
      <title>XML-Tag Structural Prompting: Claude's Deterministic Shell</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/xml-tag-structural-prompting-deterministic-shell/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/xml-tag-structural-prompting-deterministic-shell/</guid>
      <pubDate>Tue, 09 Jun 2026 10:00:00 GMT</pubDate>
      <description>Flat prompts make Claude guess which text is a command, context, or untrusted input. Use XML tags to anchor attention, quarantine injection, and make output parseable.</description>
    </item>
    <item>
      <title>Context Hygiene: Mastering /clear and /compact in Claude Code</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/claude-code-context-hygiene-clear-compact/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/claude-code-context-hygiene-clear-compact/</guid>
      <pubDate>Tue, 09 Jun 2026 10:00:00 GMT</pubDate>
      <description>Claude re-sends the whole conversation every turn, so a messy context window is a recurring bill. How /clear and /compact cut token spend by ~85%.</description>
    </item>
    <item>
      <title>Redux Toolkit Architectures for Massive Enterprise State</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/redux-toolkit-architectures/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/redux-toolkit-architectures/</guid>
      <pubDate>Tue, 09 Jun 2026 10:00:00 GMT</pubDate>
      <description>RTK made Redux's boilerplate reputation obsolete. Structuring feature slices, normalizing with entity adapters, offloading server state to RTK Query — and when not to reach for it.</description>
    </item>
    <item>
      <title>Structured JSON Outputs from Claude with Type-Safe Zod Contracts</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/json-structured-outputs-type-safe-zod/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/json-structured-outputs-type-safe-zod/</guid>
      <pubDate>Mon, 08 Jun 2026 10:00:00 GMT</pubDate>
      <description>Parsing Claude's prose with regex breaks pipelines. Force type-safe JSON with tool use, then validate it at the boundary with a Zod contract that doubles as your type.</description>
    </item>
    <item>
      <title>The AI-Native Portfolio: Landing Lead Roles by Shipping the System</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/ai-native-portfolio-landing-lead-roles/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/ai-native-portfolio-landing-lead-roles/</guid>
      <pubDate>Mon, 08 Jun 2026 10:00:00 GMT</pubDate>
      <description>A portfolio that lists 'used ChatGPT' reads junior. One that demonstrates systems architecture — RAG, agents, guardrails, latency budgets — reads like the lead they're trying to hire. Here's how to build the second one.</description>
    </item>
    <item>
      <title>How I Stop RAG Hallucination With a Grounding Contract</title>
      <link>https://yaseenkhatib.streamerosai.com/blog/zero-hallucination-rag-grounding-contract/</link>
      <guid isPermaLink="true">https://yaseenkhatib.streamerosai.com/blog/zero-hallucination-rag-grounding-contract/</guid>
      <pubDate>Mon, 08 Jun 2026 10:00:00 GMT</pubDate>
      <description>Retrieval never stopped hallucination on my streamerOS agent — a grounding contract did: a retrieval score floor, a strict prompt, and required attribution.</description>
    </item>
  </channel>
</rss>
