<?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"><channel><title><![CDATA[Sutrah.app Notes]]></title><description><![CDATA[Sutrah.app Notes]]></description><link>https://sutrah-app-notes.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 04 Nov 2026 14:04:43 GMT</lastBuildDate><atom:link href="https://sutrah-app-notes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Push beats polling for calendar blocks that have to move: how Sutrah keeps Outlook prayer blocks out of the way]]></title><description><![CDATA[A calendar that only syncs on a schedule is wrong for the hours between syncs.]]></description><link>https://sutrah-app-notes.hashnode.dev/push-beats-polling-for-calendar-blocks-that-have-to-move-how-sutrah-keeps-outlook-prayer-blocks-out-of-the-way</link><guid isPermaLink="true">https://sutrah-app-notes.hashnode.dev/push-beats-polling-for-calendar-blocks-that-have-to-move-how-sutrah-keeps-outlook-prayer-blocks-out-of-the-way</guid><category><![CDATA[Productivity]]></category><category><![CDATA[calendar]]></category><category><![CDATA[Microsoft Graph]]></category><category><![CDATA[outlook]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[Sutrah.app]]></dc:creator><pubDate>Sun, 01 Nov 2026 14:15:42 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://www.sutrah.app">Sutrah</a> is a free web app that writes the five daily prayers into Google Calendar or Outlook as real events and places each one in free time inside that prayer's window. The interesting engineering problem isn't the first placement. It's what happens at 2:40 pm when someone books a meeting right on top of the Asr block.</p>
<h2>The problem with scheduled syncs</h2>
<p>If a tool only re-checks your calendar every few hours, the block is wrong from the moment the meeting lands until the next run. For a prayer with a short window, that gap can be the whole window.</p>
<h2>Change notifications instead</h2>
<p>On Outlook, Sutrah subscribes to Microsoft Graph change notifications. When an event is added or moved, placement re-runs for that day and the prayer block moves to another gap inside its window. The <a href="https://www.sutrah.app/prayer-times-outlook">Outlook page</a> describes this, and the <a href="https://www.sutrah.app/prayer-times-google-calendar">Google Calendar page</a> covers the Google side, where blocks also move when the calendar changes.</p>
<p>There's one honest edge case: if the whole window really fills up, Sutrah says so instead of quietly dropping the prayer. Knowing Asr has no gap left is useful at 2:40 pm, not at Maghrib.</p>
<h2>What it needs to do this</h2>
<p>Reading free time means reading event times, so the permissions are calendar-only:</p>
<ul>
<li>Microsoft Graph: Calendars.ReadWrite, offline_access, and openid email profile.</li>
<li>Google: calendar.events.owned plus basic OpenID profile.</li>
<li>No mail, Drive, OneDrive or contacts permission is requested.</li>
</ul>
<p>The <a href="https://www.sutrah.app/for-it">IT brief</a> lists the exact scopes and redirect URIs for anyone reviewing it, and the <a href="https://www.sutrah.app/privacy">privacy page</a> covers what's stored.</p>
<h2>When push isn't possible</h2>
<p>Apple Calendar has no API for this, so Sutrah offers a pull-only <a href="https://www.sutrah.app/prayer-times-apple-calendar">subscription feed</a> there. The times arrive, but they don't dodge meetings. The same feed is the fallback when a workplace won't approve calendar access, and you can build one without an account on the <a href="https://www.sutrah.app/subscribe">subscribe page</a>.</p>
<p>Times are recalculated nightly from your location, calculation method and madhab, and the site suggests checking them against your local masjid. It's free, with no card and no paid tier.</p>
]]></content:encoded></item></channel></rss>