<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Asmar Momand — Blog</title>
    <link>https://asmar.momand.dev/blog</link>
    <atom:link href="https://asmar.momand.dev/feed.xml" rel="self" type="application/rss+xml" />
    <description>Notes from the keyboard — software architecture, AI-first engineering, ADRs, and the systems I'm building.</description>
    <language>en</language>
    <generator>Next.js + Keystatic</generator>
    <item>
      <title>A newsletter without a newsletter provider</title>
      <link>https://asmar.momand.dev/blog/a-newsletter-without-a-newsletter-provider</link>
      <guid isPermaLink="true">https://asmar.momand.dev/blog/a-newsletter-without-a-newsletter-provider</guid>
      <pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate>
      <description>No free managed tier will email your list the moment you publish — that&apos;s the feature kept behind the paywall. So I didn&apos;t rent it. This site&apos;s newsletter is three small pieces I already run for free: a static form, a serverless function that holds the API key, and a CI job that broadcasts on publish.</description>
      <category>CI/CD</category><category>Serverless</category><category>Static sites</category><category>Cost engineering</category>
    </item>
    <item>
      <title>ULIDs over UUIDs: standardizing identifiers across 40 services</title>
      <link>https://asmar.momand.dev/blog/ulids-over-uuids-a-platform-identifier-standard</link>
      <guid isPermaLink="true">https://asmar.momand.dev/blog/ulids-over-uuids-a-platform-identifier-standard</guid>
      <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
      <description>An implicit decision left unenforced becomes 40 services split 60/40 between two incompatible identifier shapes. Here&apos;s the standard I wrote to close the door — and why ULID won.</description>
      <category>Architecture</category><category>PostgreSQL</category><category>Platform engineering</category><category>DDD</category>
    </item>
    <item>
      <title>ADR: Outbox over dual-write for cross-context events</title>
      <link>https://asmar.momand.dev/blog/adr-outbox-over-dual-write</link>
      <guid isPermaLink="true">https://asmar.momand.dev/blog/adr-outbox-over-dual-write</guid>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <description>Why every state-changing event in the Ghasi suite goes through a transactional outbox instead of a direct publish — and what that costs.</description>
      <category>Event-driven</category><category>DDD</category><category>Reliability</category><category>PostgreSQL</category>
    </item>
    <item>
      <title>Stop calling new Date() in your services</title>
      <link>https://asmar.momand.dev/blog/stop-calling-new-date-in-your-services</link>
      <guid isPermaLink="true">https://asmar.momand.dev/blog/stop-calling-new-date-in-your-services</guid>
      <pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate>
      <description>Time and randomness are infrastructure. When every service rolls its own clock port, you get six file paths and three interface names for one concern. The fix is one platform port — and the testability it unlocks.</description>
      <category>Testability</category><category>Hexagonal architecture</category><category>DDD</category><category>TypeScript</category>
    </item>
    <item>
      <title>AI-first is a posture, not a feature</title>
      <link>https://asmar.momand.dev/blog/ai-first-is-a-posture-not-a-feature</link>
      <guid isPermaLink="true">https://asmar.momand.dev/blog/ai-first-is-a-posture-not-a-feature</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <description>Most platforms bolt AI onto a non-AI core. Treating it as foundational architecture — a single governed gateway, provenance on every artifact — changes what you can promise.</description>
      <category>AI-first</category><category>Architecture</category><category>Governance</category><category>DDD</category>
    </item>
  </channel>
</rss>