<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rao Mubashir Ali</title>
    <description>The latest articles on DEV Community by Rao Mubashir Ali (@rao_mubashirali_f267f321).</description>
    <link>https://dev.to/rao_mubashirali_f267f321</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4189714%2Fe6a23f2b-acfa-43ce-86e1-f973d38d5288.jpg</url>
      <title>DEV Community: Rao Mubashir Ali</title>
      <link>https://dev.to/rao_mubashirali_f267f321</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rao_mubashirali_f267f321"/>
    <language>en</language>
    <item>
      <title>I built a free qaza namaz tracker because I kept losing count of missed prayers</title>
      <dc:creator>Rao Mubashir Ali</dc:creator>
      <pubDate>Sat, 17 Oct 2026 02:38:19 +0000</pubDate>
      <link>https://dev.to/rao_mubashirali_f267f321/i-built-a-free-qaza-namaz-tracker-because-i-kept-losing-count-of-missed-prayers-89f</link>
      <guid>https://dev.to/rao_mubashirali_f267f321/i-built-a-free-qaza-namaz-tracker-because-i-kept-losing-count-of-missed-prayers-89f</guid>
      <description>&lt;p&gt;If you're Muslim, you probably know the feeling. At some point you missed prayers, maybe for months or years, and now you want to make them up (qaza). The hard part isn't praying them. It's keeping count.&lt;/p&gt;

&lt;p&gt;I tried a note on my phone, then a spreadsheet, then a paper tally. All of them broke the same way: I'd forget to update them, and after a few weeks I had no idea what the real number was. So I built a simple &lt;a href="https://yaadenamaz.com/account/" rel="noopener noreferrer"&gt;namaz and qaza tracker&lt;/a&gt; into my site, &lt;a href="https://yaadenamaz.com" rel="noopener noreferrer"&gt;Yaad-e-Namaz&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tick each namaz&lt;/strong&gt; as you pray it, five a day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missed ones turn into qaza automatically.&lt;/strong&gt; You don't have to remember to add them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make-ups count down.&lt;/strong&gt; Every qaza you pray brings the total down, so you can actually see progress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start from an estimate.&lt;/strong&gt; Most people don't know their exact number, so you can enter a rough starting count and work from there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reminders on WhatsApp.&lt;/strong&gt; This turned out to be the feature people care about most. A notification on a prayer app is easy to swipe away. A WhatsApp message from a contact feels like someone checking in. More on that here: &lt;a href="https://yaadenamaz.com/whatsapp-namaz-reminders/" rel="noopener noreferrer"&gt;WhatsApp namaz reminders&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The core idea is tiny
&lt;/h2&gt;

&lt;p&gt;Under the hood, it's just a counter per prayer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PRAYERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fajr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;zuhr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;maghrib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;isha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// at the end of each day, anything not ticked becomes qaza&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;closeDay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;PRAYERS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// praying a make-up brings the count down&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;prayQaza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;qaza&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The real work was everything around it: making the daily tick take one tap, keeping counts per prayer instead of one big number (Fajr is usually the one people miss most), and making the total feel motivating instead of guilt-inducing.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few design choices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Per-prayer counts, not one total.&lt;/strong&gt; "You owe 1,200 prayers" is crushing. "You have 240 Fajr left" is something you can plan around.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A simple routine.&lt;/strong&gt; A common suggestion is to pray one qaza with each daily prayer, so five a day. At that pace the counter visibly drops every week, which keeps people going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy first.&lt;/strong&gt; This is personal. The data is private to your account, there are no ads, and you can &lt;a href="https://yaadenamaz.com/delete-account/" rel="noopener noreferrer"&gt;delete your account&lt;/a&gt; any time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No account needed for everything else.&lt;/strong&gt; Prayer times, &lt;a href="https://yaadenamaz.com/qibla/" rel="noopener noreferrer"&gt;Qibla&lt;/a&gt;, the &lt;a href="https://yaadenamaz.com/quran/" rel="noopener noreferrer"&gt;Quran&lt;/a&gt; and &lt;a href="https://yaadenamaz.com/hadith/" rel="noopener noreferrer"&gt;hadith&lt;/a&gt; all work without signing in. You only need an account for the tracker and WhatsApp reminders, because those have to remember things about you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's free: &lt;a href="https://yaadenamaz.com/account/" rel="noopener noreferrer"&gt;yaadenamaz.com/account&lt;/a&gt;. If you've built habit trackers before, I'd love to hear what worked for you. And if you use it, tell me what's annoying so I can fix it.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I built a Qibla compass that runs in the phone browser (no app install)</title>
      <dc:creator>Rao Mubashir Ali</dc:creator>
      <pubDate>Sat, 17 Oct 2026 02:32:33 +0000</pubDate>
      <link>https://dev.to/rao_mubashirali_f267f321/how-i-built-a-qibla-compass-that-runs-in-the-phone-browser-no-app-install-ocl</link>
      <guid>https://dev.to/rao_mubashirali_f267f321/how-i-built-a-qibla-compass-that-runs-in-the-phone-browser-no-app-install-ocl</guid>
      <description>&lt;p&gt;I run &lt;a href="https://yaadenamaz.com" rel="noopener noreferrer"&gt;Yaad-e-Namaz&lt;/a&gt;, a free prayer times site with no ads. The page people use the most by far is the &lt;a href="https://yaadenamaz.com/qibla/" rel="noopener noreferrer"&gt;Qibla finder&lt;/a&gt;, which shows Muslims the direction of the Kaaba in Makkah. I wanted it to work straight in the phone browser, without asking anyone to install an app. Here's how it works and what tripped me up.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The math: great-circle bearing
&lt;/h2&gt;

&lt;p&gt;The Qibla isn't "the direction on a flat map". It's the start of the shortest path over the globe to the Kaaba (21.4225° N, 39.8262° E). That's a standard initial bearing calculation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;KAABA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;21.4225&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;39.8262&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;qiblaBearing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;φ1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;φ2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;KAABA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Δλ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;KAABA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Δλ&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;φ2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;φ1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;φ2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;
            &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;φ1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;φ2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Δλ&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;deg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atan2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// degrees from true north&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why the answer surprises people. From New York the Qibla is about 58° (north-east), not south-east, because the shortest route curves up over the North Atlantic.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reading the phone's heading
&lt;/h2&gt;

&lt;p&gt;The browser gives you orientation through &lt;code&gt;DeviceOrientationEvent&lt;/code&gt;, but every platform does it a little differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;iPhone (Safari):&lt;/strong&gt; you must call &lt;code&gt;DeviceOrientationEvent.requestPermission()&lt;/code&gt; from a button tap, then read &lt;code&gt;event.webkitCompassHeading&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android (Chrome):&lt;/strong&gt; listen to &lt;code&gt;deviceorientationabsolute&lt;/code&gt; and use &lt;code&gt;360 - event.alpha&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The arrow on screen is then just &lt;code&gt;qiblaBearing - heading&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Magnetic north vs true north
&lt;/h2&gt;

&lt;p&gt;Phone compasses measure magnetic north, but the bearing above is from true north. The gap (magnetic declination) is only a few degrees in Pakistan but can be much more in other places, so the page corrects for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The real problem: compasses lie indoors
&lt;/h2&gt;

&lt;p&gt;Most complaints I got were "the Qibla keeps changing". That's almost never the code. Phone magnetometers get thrown off by metal, speakers, laptops and magnetic cases. What helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Showing a "move your phone in a figure-8" calibration hint&lt;/li&gt;
&lt;li&gt;Smoothing the heading so the arrow doesn't jitter&lt;/li&gt;
&lt;li&gt;Adding a fixed fallback: a page for every city with the exact angle and distance, e.g. &lt;a href="https://yaadenamaz.com/qibla/lahore/" rel="noopener noreferrer"&gt;Qibla in Lahore&lt;/a&gt; (260°) or &lt;a href="https://yaadenamaz.com/qibla/london/" rel="noopener noreferrer"&gt;Qibla in London&lt;/a&gt; (119°). People can line that up with a landmark once and stop relying on the sensor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those city pages turned out to be great for SEO too, since people search "qibla direction + city" a lot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://yaadenamaz.com/qibla/" rel="noopener noreferrer"&gt;yaadenamaz.com/qibla&lt;/a&gt; on your phone and tap the button. I'd love feedback, especially on sensor accuracy across different Android phones.&lt;/p&gt;

&lt;p&gt;The same site also has &lt;a href="https://yaadenamaz.com/prayer-times/" rel="noopener noreferrer"&gt;prayer times&lt;/a&gt;, the &lt;a href="https://yaadenamaz.com/quran/" rel="noopener noreferrer"&gt;Quran with Urdu and English&lt;/a&gt;, &lt;a href="https://yaadenamaz.com/hadith/" rel="noopener noreferrer"&gt;hadith&lt;/a&gt; and a free &lt;a href="https://yaadenamaz.com/prayer-times-widget/" rel="noopener noreferrer"&gt;prayer times widget&lt;/a&gt; you can embed on your own site.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
