<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Ali]]></title><description><![CDATA[My name is Ali and I am the developer of RelayGrid.dev. I am going to be documenting my work on RelayGrid. All the fun, hard work, and frustrations.]]></description><link>https://relaygrid.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!SCck!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F876aa827-3ab3-47ff-bdaa-83e76eec0f87_192x192.png</url><title>Ali</title><link>https://relaygrid.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 07 Aug 2026 04:24:27 GMT</lastBuildDate><atom:link href="https://relaygrid.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ali]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[relaygrid@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[relaygrid@substack.com]]></itunes:email><itunes:name><![CDATA[Ali]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ali]]></itunes:author><googleplay:owner><![CDATA[relaygrid@substack.com]]></googleplay:owner><googleplay:email><![CDATA[relaygrid@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ali]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Architecting RelayGrid: Lessons in Data Modeling and Scaling Notifications]]></title><description><![CDATA[To build a robust notification engine, I had to start with a few core questions: How do we handle different delivery mediums?]]></description><link>https://relaygrid.substack.com/p/architecting-relaygrid-lessons-in</link><guid isPermaLink="false">https://relaygrid.substack.com/p/architecting-relaygrid-lessons-in</guid><dc:creator><![CDATA[Ali]]></dc:creator><pubDate>Thu, 16 Jul 2026 21:48:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SCck!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F876aa827-3ab3-47ff-bdaa-83e76eec0f87_192x192.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>To build a robust notification engine, I had to start with a few core questions: How do we handle different delivery mediums? How do we manage failure states? and most importantly, how do we represent the state of a delivery?</p><p>By answering these questions, I began to shape the architecture of <strong>RelayGrid</strong>. In this post, I want to share some of the decisions I&#8217;ve made, the mistakes I&#8217;ve corrected, and how the system is evolving.</p><h3>Defining Channels and Templates</h3><p>In RelayGrid, a <strong>Channel</strong> is the mechanism used to deliver a notification. Whether it is Push, Email, or SMS, each medium is treated as a distinct channel. For instance, a company might use several different email identities for automated communications, such as noreply@company.com, contact@company.com, or support@company.com. In RelayGrid, each of these is represented as a unique channel.</p><p>To make sending these messages efficient, we use <strong>Templates</strong>. A template is a pre-configured bundle of data that prevents users from having to redefine settings for every single message. A template consists of:</p><ul><li><p>One or more attached channels</p></li><li><p>A subject line and body (with HTML/CSS for emails)</p></li><li><p>An optional Email layout with HTML/CSS support for branded notifications.</p></li></ul><p>By using dynamic attributes in a notification&#8217;s subject and body, users can inject personalized data into these templates, ensuring that every notification feels tailor-made for the recipient.</p><h3>The Pivot: Rethinking &#8220;Notification Users&#8221;</h3><p>One of the most important lessons I&#8217;ve learned while developing RelayGrid is how we model &#8220;Notification Users&#8221; (the recipients)</p><p>In my initial design, I tied a notification user to a specific channel. I quickly realized this was a very problematic architectural decision. For example, if an account had five different email channels for various use cases, a single end-user&#8217;s email address would have to be stored five separate times in the database. This created unnecessary data redundancy, introduced complexity trying to keep all the records in sync, and made management a nightmare for account admins.</p><p>I had to pivot. I realized that while a channel is specific, a user&#8217;s contact information is not. Today, I have decoupled them. A notification user contact information is attached to a <strong>contact type</strong> rather than the individual channel instance.  This keeps the database clean, reduces redundancy and complexity, and makes the system much easier to scale. </p><h2>What&#8217;s next?</h2><p>RelayGrid is under active development, and its architecture is evolving as new features are being developed and tested. As I uncover new edge cases and scaling challenges, the system shifts to accommodate the new requirements. Engineering is rarely about making the &#8220;perfect&#8221; first decision; it&#8217;s about building a system that is flexible enough to be corrected. </p><p>Currently, my focus is on implementing <strong>SMS </strong>deliveries.</p><p>If you want to follow the technical journey of building a multi-channel notification infrastructure SaaS, subscribe below to stay posted on my progress.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://relaygrid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[RelayGrid: My Journey Building a Multi-Channel Notification Platform]]></title><description><![CDATA[Why am I building this platform?]]></description><link>https://relaygrid.substack.com/p/relaygrid-my-journey-building-a-multi</link><guid isPermaLink="false">https://relaygrid.substack.com/p/relaygrid-my-journey-building-a-multi</guid><dc:creator><![CDATA[Ali]]></dc:creator><pubDate>Tue, 14 Jul 2026 17:46:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SCck!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F876aa827-3ab3-47ff-bdaa-83e76eec0f87_192x192.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://relaygrid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://relaygrid.substack.com/subscribe?"><span>Subscribe now</span></a></p><h2>Why am I building this platform?</h2><p>It started with a rant on Tech YouTube. I was watching a creator complain about the absolute chaos of Google&#8217;s notification system, and a dangerous thought entered my mind: How hard could it be to do this better? </p><p>Spoiler alert&#8230; IT IS HARD! </p><p>In my day job as a software engineer, I solve complex problems every day, but they are a completely different type of problems. The architecture required to handle real-time, scalable notifications comes with its own unique challenges and pitfalls. What started as a classic &#8220;hold my beer&#8221; moment, quickly turned into a deep dive into a domain I&#8217;ve never dealt with professionally.</p><p>I am using my evenings and weekends, sometimes nights, to learn and work on something new and exciting. I&#8217;ll be documenting my process, the wins, failures, and the lessons learned. Hell, I&#8217;m event learning about SMS, RCS, and telecom industry requirements now.</p><p>I&#8217;ll be sharing my experience and my learning here. Subscribe, if you&#8217;d like to follow along!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://relaygrid.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ali! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>