<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Notes to Self</title>
        <link>https://ryansaperstein.com/blog</link>
        <description>Thoughts on software engineering, learning in public, and everything in between.</description>
        <lastBuildDate>Sun, 14 Jun 2026 21:53:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>© 2026 Ryan Saperstein</copyright>
        <item>
            <title><![CDATA[Benefit of the Doubt]]></title>
            <link>https://ryansaperstein.com/blog/benefit-of-the-doubt</link>
            <guid isPermaLink="false">https://ryansaperstein.com/blog/benefit-of-the-doubt</guid>
            <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Six months in, and the patterns I've stopped taking on faith.]]></description>
            <author>Ryan Saperstein</author>
            <category>personal</category>
            <category>career</category>
            <category>new grad</category>
        </item>
        <item>
            <title><![CDATA[The Anatomy of Push Notifications: How They Really Work]]></title>
            <link>https://ryansaperstein.com/blog/the-anatomy-of-push-notifications-how-they-really-work</link>
            <guid isPermaLink="false">https://ryansaperstein.com/blog/the-anatomy-of-push-notifications-how-they-really-work</guid>
            <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Ever wondered how push notifications really work? This post breaks down the anatomy of push notifications, exploring everything from FCM and Apple Push to the backend systems that keep them running.]]></description>
            <author>Ryan Saperstein</author>
            <category>react native</category>
            <category>mobile apps</category>
            <category>push notifications</category>
            <category>backend development</category>
        </item>
        <item>
            <title><![CDATA[One Schema, Four Languages: Solving API Type Drift]]></title>
            <link>https://ryansaperstein.com/blog/one-schema-four-languages-solving-api-type-drift</link>
            <guid isPermaLink="false">https://ryansaperstein.com/blog/one-schema-four-languages-solving-api-type-drift</guid>
            <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Define your API once in Phoenix and generate TypeScript, Python, Go, and OpenAPI]]></description>
            <author>Ryan Saperstein</author>
            <category>phoenix</category>
            <category>rust</category>
            <category>programming languages</category>
            <category>web dev</category>
            <category>code generation</category>
        </item>
        <item>
            <title><![CDATA[Why am I making a blog?]]></title>
            <link>https://ryansaperstein.com/blog/why-am-i-making-a-blog</link>
            <guid isPermaLink="false">https://ryansaperstein.com/blog/why-am-i-making-a-blog</guid>
            <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The obligatory first post: why I'm writing, what I'm building, and where this is headed.]]></description>
            <author>Ryan Saperstein</author>
            <category>personal</category>
            <category>meta</category>
        </item>
    </channel>
</rss>