<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Don Shammah — Systems Engineering &amp; ADRs</title><description>Essays and Architecture Decision Records on distributed systems, event-driven backends, and Build Market.</description><link>https://donshammah.tech/</link><item><title>Architecting Non-Custodial Milestone Escrow on M-Pesa Daraja 2.0</title><link>https://donshammah.tech/writing/non-custodial-escrow-on-mpesa/</link><guid isPermaLink="true">https://donshammah.tech/writing/non-custodial-escrow-on-mpesa/</guid><description>How we combined bank trust accounts, composite idempotency anchors, and automated WHT/eTIMS waterfalls to protect construction capital in Kenya.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Designing Around Flaky Regulator Portals: Cache, Circuit Breaker, Stream, Operator</title><link>https://donshammah.tech/writing/designing-around-flaky-regulator-portals/</link><guid isPermaLink="true">https://donshammah.tech/writing/designing-around-flaky-regulator-portals/</guid><description>How Build Market verifies contractor licenses against 9 Kenyan statutory boards without ever blocking user onboarding when government portals go down.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Why We Acknowledge NATS Messages Only After the Database Transaction Commits</title><link>https://donshammah.tech/writing/why-we-ack-only-after-commit/</link><guid isPermaLink="true">https://donshammah.tech/writing/why-we-ack-only-after-commit/</guid><description>How ordering your broker ack() after your PostgreSQL commit—and designing every handler as an idempotent upsert—eliminates silent data loss and double-payouts.</description><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate></item><item><title>ADR-001: Clerk for Identity Authentication, PostgreSQL for Role Authority</title><link>https://donshammah.tech/decisions/adr-001-clerk-identity-db-authority/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-001-clerk-identity-db-authority/</guid><description>Session tokens establish who the actor is; PostgreSQL profile records establish what the actor is permitted to do.</description><pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate></item><item><title>ADR-002: Strict Layer Boundaries &amp; Unidirectional Import Flow</title><link>https://donshammah.tech/decisions/adr-002-layer-boundaries/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-002-layer-boundaries/</guid><description>HTTP route handlers and Server Actions are thin transport adapters that must never import Prisma directly.</description><pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate></item><item><title>ADR-003: Vertical Domain Slicing Over Horizontal Technical Layers</title><link>https://donshammah.tech/decisions/adr-003-vertical-domain-slicing/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-003-vertical-domain-slicing/</guid><description>Organize domain logic into 24 isolated vertical slices communicating only via public service contracts or NATS events.</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate></item><item><title>ADR-006: Class A–D Data Classification &amp; Idempotency Replay Sanitization</title><link>https://donshammah.tech/decisions/adr-006-data-classification-replay/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-006-data-classification-replay/</guid><description>Prevent Class A (Secrets) and Class B (Sensitive PII) fields from ever persisting in idempotency caches or structured logs.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate></item><item><title>ADR-010: Background Worker Daemon Isolation from Web Runtime</title><link>https://donshammah.tech/decisions/adr-010-worker-daemon-isolation/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-010-worker-daemon-isolation/</guid><description>Offload NATS JetStream consumers, BullMQ queues, Sharp image encoding, and BoQ PDF compilation to a standalone Node.js 24 daemon.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate></item><item><title>ADR-ADMIN-001: Capability-Based Admin Authorization &amp; Tiered Step-Up Freshness</title><link>https://donshammah.tech/decisions/adr-admin-001-capability-auth/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-admin-001-capability-auth/</guid><description>Why administrative mutations resolve permissions from a database AdminProfile on every request and require step-up re-authentication.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate></item><item><title>ADR-ADMIN-008: Declarative Audit Logging Inside safeAction</title><link>https://donshammah.tech/decisions/adr-admin-008-declarative-audit-log/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-admin-008-declarative-audit-log/</guid><description>Eliminate manual audit-log omission bugs by making audit metadata a required declarative property of high-risk action definitions.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate></item><item><title>ADR-ADMIN-009: Strangler-Fig Migrations via Typed Feature Flags with Expiry Governance</title><link>https://donshammah.tech/decisions/adr-admin-009-strangler-fig-flags/</link><guid isPermaLink="true">https://donshammah.tech/decisions/adr-admin-009-strangler-fig-flags/</guid><description>Migrate legacy administrative verticals behind typed feature flags enforced by automated CI expiration checks.</description><pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate></item></channel></rss>