<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>lifeiscontent.net</title><description>Engineering notes, component work, and writing from Aaron Reisman.</description><link>https://lifeiscontent.net/</link><language>en-us</language><item><title>Auth that doesn&apos;t trap your users</title><link>https://lifeiscontent.net/blog-postings/auth-that-doesnt-trap-your-users/</link><guid isPermaLink="true">https://lifeiscontent.net/blog-postings/auth-that-doesnt-trap-your-users/</guid><description>An account is only as strong as the weakest way back into it. How to design sign-in, 2FA, and recovery so a hacked inbox or a hijacked phone number does not take everything with it.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><category>security</category><category>authentication</category><category>passkeys</category></item><item><title>How MasonryKit is built</title><link>https://lifeiscontent.net/blog-postings/how-masonrykit-is-built/</link><guid isPermaLink="true">https://lifeiscontent.net/blog-postings/how-masonrykit-is-built/</guid><description>How I split MasonryKit, a TypeScript library for masonry layouts, into three packages: pure layout math, DOM helpers, and a React hook. Plus the patterns in each layer worth borrowing for your own libraries.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><category>architecture</category><category>components</category><category>react</category><category>dx</category></item><item><title>The component manifesto</title><link>https://lifeiscontent.net/blog-postings/the-component-manifesto/</link><guid isPermaLink="true">https://lifeiscontent.net/blog-postings/the-component-manifesto/</guid><description>How I think about building component systems. Six principles, plus the practical patterns that go with them.</description><pubDate>Sun, 13 Jul 2025 00:00:00 GMT</pubDate><category>components</category><category>architecture</category><category>react</category><category>dx</category></item><item><title>Elegant error handling in Phoenix LiveView with Ash</title><link>https://lifeiscontent.net/blog-postings/elegant-error-handling-in-phoenix-liveview-with-ash/</link><guid isPermaLink="true">https://lifeiscontent.net/blog-postings/elegant-error-handling-in-phoenix-liveview-with-ash/</guid><description>How to build 404, 403, and 500 pages in Phoenix LiveView that do not feel like afterthoughts. Uses Ash exceptions and the built-in Phoenix conventions so the failure paths read like the rest of your product.</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><category>phoenix</category><category>liveview</category><category>elixir</category><category>ash</category><category>ux</category></item><item><title>Understanding protocols in Elixir: a comprehensive guide</title><link>https://lifeiscontent.net/blog-postings/understanding-protocols-in-elixir-a-comprehensive-guide/</link><guid isPermaLink="true">https://lifeiscontent.net/blog-postings/understanding-protocols-in-elixir-a-comprehensive-guide/</guid><description>How Elixir protocols make polymorphism feel like design work. Less ceremony, more clarity, and a path away from giant conditionals.</description><pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate><category>elixir</category><category>protocols</category><category>fp</category><category>polymorphism</category></item></channel></rss>