<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Writing — M. Nadeem Siddique</title><description>Notes from building things at work and on the side.</description><link>https://purplecandy.dev/</link><item><title>Docs In, Integration Out</title><link>https://purplecandy.dev/writing/docs-in-integration-out/</link><guid isPermaLink="true">https://purplecandy.dev/writing/docs-in-integration-out/</guid><description>Give an AI agent your API docs or a rough idea, and get a tested, running integration on the same call. How five systems compose into a fully self serve integration builder.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><category>ai</category><category>integrations</category><category>architecture</category></item><item><title>Solving Event Loop Blocks in JSONata, for Any Input</title><link>https://purplecandy.dev/writing/jsonata-event-loop/</link><guid isPermaLink="true">https://purplecandy.dev/writing/jsonata-event-loop/</guid><description>You can&apos;t chunk an expression language. How we taught JSONata&apos;s own loops to yield, so authors keep full transformation power and the event loop keeps turning.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>performance</category><category>nodejs</category><category>debugging</category></item><item><title>The Token Refresh That Must Survive Its Caller</title><link>https://purplecandy.dev/writing/token-refresh-must-survive-its-caller/</link><guid isPermaLink="true">https://purplecandy.dev/writing/token-refresh-must-survive-its-caller/</guid><description>Why OAuth token refresh needs its own transaction boundary, and how to coordinate the refresh without a lock.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><category>architecture</category><category>oauth</category><category>concurrency</category></item><item><title>Letting Customers Define Their Own Data</title><link>https://purplecandy.dev/writing/letting-customers-define-their-own-data/</link><guid isPermaLink="true">https://purplecandy.dev/writing/letting-customers-define-their-own-data/</guid><description>How to add customer defined fields and first class custom entities to a SaaS product without dynamic DDL, without EAV, and without building a second schema engine.</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><category>architecture</category><category>data-modeling</category><category>postgres</category></item><item><title>Weeks to Hours: Building a Declarative Integration Engine</title><link>https://purplecandy.dev/writing/weeks-to-hours-declarative-integration-engine/</link><guid isPermaLink="true">https://purplecandy.dev/writing/weeks-to-hours-declarative-integration-engine/</guid><description>How we replaced hand written integrations with a plan interpreter, saved $200k in vendor contracts, and accidentally built the perfect target for AI.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><category>architecture</category><category>integrations</category><category>dsl</category></item><item><title>You, AI and a Close Deadline</title><link>https://purplecandy.dev/writing/you-ai-and-a-close-deadline/</link><guid isPermaLink="true">https://purplecandy.dev/writing/you-ai-and-a-close-deadline/</guid><description>My journey and insights from leveraging LLMs as a coding co-pilot under a tight deadline: the good, the bad, and the debugging nightmare.</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate><category>ai</category><category>llm</category><category>workflow</category><category>engineering</category></item><item><title>Better React: Predictability Principles</title><link>https://purplecandy.dev/writing/better-react-predictability-principles/</link><guid isPermaLink="true">https://purplecandy.dev/writing/better-react-predictability-principles/</guid><description>What makes a component predictable, and the principles for structuring state and props so anyone reading a component can tell, with confidence, what&apos;s happening and why.</description><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><category>react</category><category>frontend</category><category>principles</category></item><item><title>Building Plug &amp; Play Components</title><link>https://purplecandy.dev/writing/building-plug-and-play-components/</link><guid isPermaLink="true">https://purplecandy.dev/writing/building-plug-and-play-components/</guid><description>The frontend half of a custom fields engine: how to make one feature appear on any page without every team rewriting the integration. Three layers, three decouplings.</description><pubDate>Wed, 16 Apr 2025 00:00:00 GMT</pubDate><category>frontend</category><category>react</category><category>architecture</category><category>design-systems</category></item><item><title>A Performance Team of One</title><link>https://purplecandy.dev/writing/performance-team-of-one/</link><guid isPermaLink="true">https://purplecandy.dev/writing/performance-team-of-one/</guid><description>Solving performance during hypergrowth without a team: clear the floor first, then build invisible infrastructure that makes the default path fast.</description><pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate><category>performance</category><category>react</category><category>graphql</category><category>frontend</category></item><item><title>Custom Fields That Plug Into Any Entity</title><link>https://purplecandy.dev/writing/custom-fields-that-plug-into-any-entity/</link><guid isPermaLink="true">https://purplecandy.dev/writing/custom-fields-that-plug-into-any-entity/</guid><description>One engine, twenty plus entity types: the three table design, a polymorphic value store, faceted filtering in SQL, and the falsy-value bug that taught us type-aware reads.</description><pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate><category>architecture</category><category>data-modeling</category><category>postgres</category><category>graphql</category></item><item><title>A Lockless Rate Limiter on Redis</title><link>https://purplecandy.dev/writing/lockless-rate-limiter/</link><guid isPermaLink="true">https://purplecandy.dev/writing/lockless-rate-limiter/</guid><description>Sharing one API quota across many processes without a single lock: one atomic script, on demand refills, and telling callers exactly when to come back.</description><pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate><category>concurrency</category><category>redis</category><category>performance</category></item></channel></rss>