<?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: Yunus Khan</title>
    <description>The latest articles on DEV Community by Yunus Khan (@yunus_khan_d64b04c980b819).</description>
    <link>https://dev.to/yunus_khan_d64b04c980b819</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%2F4034913%2F7ea23c77-306e-4a57-818d-e7a5d71356e8.png</url>
      <title>DEV Community: Yunus Khan</title>
      <link>https://dev.to/yunus_khan_d64b04c980b819</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yunus_khan_d64b04c980b819"/>
    <language>en</language>
    <item>
      <title>How I Built an Offline-First Qibla Compass for a PWA Without an Internet Connection</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sun, 09 Aug 2026 12:14:35 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/how-i-built-an-offline-first-qibla-compass-for-a-pwa-without-an-internet-connection-d29</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/how-i-built-an-offline-first-qibla-compass-for-a-pwa-without-an-internet-connection-d29</guid>
      <description>&lt;p&gt;When you're travelling, one of the simplest problems can become surprisingly difficult: finding the Qibla direction without an internet connection.&lt;/p&gt;

&lt;p&gt;I wanted to solve this problem while building SabrTime, an Islamic PWA focused on making everyday worship tools available with minimal dependencies, no mandatory login, and an offline-first experience.&lt;/p&gt;

&lt;p&gt;The result was an offline-capable Qibla compass that can calculate the direction toward the Kaaba using the device's location and orientation sensors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Offline Qibla Matters&lt;/strong&gt;&lt;br&gt;
Most web applications assume that the user has an active internet connection.&lt;/p&gt;

&lt;p&gt;That isn't always true.&lt;/p&gt;

&lt;p&gt;A person may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Travelling by airplane&lt;/li&gt;
&lt;li&gt;In an area with poor network coverage&lt;/li&gt;
&lt;li&gt;Abroad without mobile data&lt;/li&gt;
&lt;li&gt;Inside a building with unreliable connectivity&lt;/li&gt;
&lt;li&gt;Using airplane mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Qibla tool shouldn't necessarily stop being useful just because the network disappears.&lt;/p&gt;

&lt;p&gt;This led me to an important design principle:&lt;/p&gt;

&lt;p&gt;«Calculate what can be calculated locally, and use the network only when it is actually necessary.»&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Basic Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Qibla calculation itself doesn't require a server.&lt;/p&gt;

&lt;p&gt;The basic flow is:&lt;/p&gt;

&lt;p&gt;Device Location&lt;br&gt;
      ↓&lt;br&gt;
Latitude + Longitude&lt;br&gt;
      ↓&lt;br&gt;
Calculate Bearing to Kaaba&lt;br&gt;
      ↓&lt;br&gt;
Device Orientation Sensor&lt;br&gt;
      ↓&lt;br&gt;
Calculate Relative Direction&lt;br&gt;
      ↓&lt;br&gt;
Display Qibla Compass&lt;/p&gt;

&lt;p&gt;The Kaaba's geographic coordinates are fixed, so the application can calculate the bearing locally once it knows the user's latitude and longitude.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calculating the Bearing to the Kaaba&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is determining the initial bearing between the user's location and the Kaaba.&lt;/p&gt;

&lt;p&gt;For two points on Earth, we can use the following formula:&lt;/p&gt;

&lt;p&gt;const lat1 = userLatitude * Math.PI / 180;&lt;br&gt;
const lat2 = kaabaLatitude * Math.PI / 180;&lt;/p&gt;

&lt;p&gt;const deltaLon =&lt;br&gt;
  (kaabaLongitude - userLongitude) * Math.PI / 180;&lt;/p&gt;

&lt;p&gt;const y = Math.sin(deltaLon) * Math.cos(lat2);&lt;/p&gt;

&lt;p&gt;const x =&lt;br&gt;
  Math.cos(lat1) * Math.sin(lat2) -&lt;br&gt;
  Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);&lt;/p&gt;

&lt;p&gt;let bearing = Math.atan2(y, x);&lt;/p&gt;

&lt;p&gt;bearing = bearing * 180 / Math.PI;&lt;br&gt;
bearing = (bearing + 360) % 360;&lt;/p&gt;

&lt;p&gt;The resulting value represents the initial compass bearing toward the Kaaba.&lt;/p&gt;

&lt;p&gt;This is useful because the calculation happens entirely on the device.&lt;/p&gt;

&lt;p&gt;There is no need to send the user's coordinates to a remote API simply to calculate a direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting the User's Location&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The browser's Geolocation API can provide the user's current coordinates.&lt;/p&gt;

&lt;p&gt;A simplified implementation looks like this:&lt;/p&gt;

&lt;p&gt;navigator.geolocation.getCurrentPosition(&lt;br&gt;
  (position) =&amp;gt; {&lt;br&gt;
    const latitude = position.coords.latitude;&lt;br&gt;
    const longitude = position.coords.longitude;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;calculateQibla(latitude, longitude);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;},&lt;br&gt;
  (error) =&amp;gt; {&lt;br&gt;
    console.error("Unable to get location:", error);&lt;br&gt;
  }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Of course, a production application needs to handle permission denial, unavailable location data, low accuracy, and other edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Device Orientation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Knowing the Qibla bearing isn't enough for a compass interface.&lt;/p&gt;

&lt;p&gt;We also need to know which direction the device is facing.&lt;/p&gt;

&lt;p&gt;Modern browsers can expose device orientation information through sensor APIs, although implementation details and permission requirements can vary between browsers and operating systems.&lt;/p&gt;

&lt;p&gt;The basic concept is:&lt;/p&gt;

&lt;p&gt;Qibla Bearing&lt;br&gt;
      -&lt;br&gt;
Device Heading&lt;br&gt;
      =&lt;br&gt;
Relative Qibla Direction&lt;/p&gt;

&lt;p&gt;For example, if the Qibla bearing is 280° and the device is currently facing 250°:&lt;/p&gt;

&lt;p&gt;280° - 250° = 30°&lt;/p&gt;

&lt;p&gt;The UI can then tell the user that the Qibla is approximately 30° to the right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Difficult Part: Sensors Are Messy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This sounds straightforward until you actually test it on physical devices.&lt;/p&gt;

&lt;p&gt;A compass isn't perfectly stable.&lt;/p&gt;

&lt;p&gt;The readings can be affected by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Magnetic interference&lt;/li&gt;
&lt;li&gt;Metal objects&lt;/li&gt;
&lt;li&gt;Device hardware&lt;/li&gt;
&lt;li&gt;Sensor noise&lt;/li&gt;
&lt;li&gt;Indoor environments&lt;/li&gt;
&lt;li&gt;Browser differences&lt;/li&gt;
&lt;li&gt;Device calibration&lt;/li&gt;
&lt;li&gt;Rapid device movement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So a good compass interface shouldn't simply trust one sensor reading.&lt;/p&gt;

&lt;p&gt;Instead, the application needs to smooth readings and provide clear visual feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling Sensor Noise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One simple approach is to maintain a rolling set of readings and smooth the result.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;const readings = [];&lt;/p&gt;

&lt;p&gt;function smoothHeading(newHeading) {&lt;br&gt;
  readings.push(newHeading);&lt;/p&gt;

&lt;p&gt;if (readings.length &amp;gt; 10) {&lt;br&gt;
    readings.shift();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;return readings.reduce((sum, value) =&amp;gt; sum + value, 0)&lt;br&gt;
    / readings.length;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is only a basic example. Circular values such as 359° and 1° require special handling because a normal arithmetic average can produce incorrect results.&lt;/p&gt;

&lt;p&gt;That's an important lesson when working with compass data:&lt;/p&gt;

&lt;p&gt;Angles aren't ordinary numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building It as a PWA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next challenge was making the experience work even when connectivity disappears.&lt;/p&gt;

&lt;p&gt;A Progressive Web App can cache the application's static resources so that previously loaded functionality remains available offline.&lt;/p&gt;

&lt;p&gt;The architecture becomes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          ┌───────────────┐
          │    PWA UI     │
          └───────┬───────┘
                  │
    ┌─────────────┴─────────────┐
    ↓                           ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Local calculations           Cached resources&lt;br&gt;
        ↓                           ↓&lt;br&gt;
 Qibla bearing                Offline interface&lt;br&gt;
        ↓&lt;br&gt;
 Device sensors&lt;br&gt;
        ↓&lt;br&gt;
 Qibla direction&lt;/p&gt;

&lt;p&gt;The key idea is that the compass calculation doesn't need a continuous internet connection.&lt;/p&gt;

&lt;p&gt;Privacy Was Another Design Goal&lt;/p&gt;

&lt;p&gt;Location data is sensitive.&lt;/p&gt;

&lt;p&gt;For an Islamic utility like a Qibla compass, I wanted the architecture to minimize unnecessary data transmission.&lt;/p&gt;

&lt;p&gt;If the calculation can happen locally, there is little reason to send the user's exact coordinates to a remote server merely to determine a bearing.&lt;/p&gt;

&lt;p&gt;This is one reason I prefer a privacy-first, client-side approach wherever practical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What About Airplane Mode?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where the offline-first approach becomes particularly useful.&lt;/p&gt;

&lt;p&gt;With network connectivity disabled, a PWA can still provide functionality that doesn't depend on an external server.&lt;/p&gt;

&lt;p&gt;The important distinction is:&lt;/p&gt;

&lt;p&gt;Offline does not mean “everything works without hardware or permissions.”&lt;/p&gt;

&lt;p&gt;The application may still require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previously cached application resources&lt;/li&gt;
&lt;li&gt;Location permission&lt;/li&gt;
&lt;li&gt;Device location capability&lt;/li&gt;
&lt;li&gt;Orientation sensors&lt;/li&gt;
&lt;li&gt;Browser support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to remove the unnecessary dependency on the internet, not to magically bypass device requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing on Real Devices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest lessons from this project was that browser-based sensor applications should be tested on actual phones.&lt;/p&gt;

&lt;p&gt;A feature can appear perfect in desktop development tools but behave differently on a physical device.&lt;/p&gt;

&lt;p&gt;I recommend testing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;With Wi-Fi enabled&lt;/li&gt;
&lt;li&gt;With mobile data disabled&lt;/li&gt;
&lt;li&gt;In airplane mode&lt;/li&gt;
&lt;li&gt;Indoors&lt;/li&gt;
&lt;li&gt;Outdoors&lt;/li&gt;
&lt;li&gt;After rotating the device&lt;/li&gt;
&lt;li&gt;On multiple browsers where possible&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This catches problems that aren't obvious during normal development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this feature taught me that an offline-first web application isn't simply about adding a service worker.&lt;/p&gt;

&lt;p&gt;It requires thinking about the entire dependency chain.&lt;/p&gt;

&lt;p&gt;For every feature, ask:&lt;/p&gt;

&lt;p&gt;«Does this actually need the internet?»&lt;/p&gt;

&lt;p&gt;If the answer is no, move the computation to the client whenever practical.&lt;/p&gt;

&lt;p&gt;For a Qibla compass, this means location + mathematical calculation + device sensors can do most of the work locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SabrTime Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built this approach into SabrTime, an Islamic PWA that includes prayer tools, Qibla, Islamic resources, and other everyday worship utilities.&lt;/p&gt;

&lt;p&gt;You can explore the project here:&lt;/p&gt;

&lt;p&gt;SabrTime: &lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also documented the Qibla approach in more detail in this article:&lt;/p&gt;

&lt;p&gt;Airplane Mode Qibla Compass: &lt;a href="https://sabrtime.in/blog/airplane-mode-qibla-compass.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/airplane-mode-qibla-compass.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in the broader problem of maintaining useful Islamic tools while travelling, I also wrote about "missed prayers and Qaza" (&lt;a href="https://sabrtime.in/blog/missed-prayers-qaza-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/missed-prayers-qaza-guide.html&lt;/a&gt;) and practical guidance around making up missed Salah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The web doesn't always need to depend on the cloud.&lt;/p&gt;

&lt;p&gt;For many utility applications, calculations can happen directly on the user's device. This can improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline reliability&lt;/li&gt;
&lt;li&gt;Privacy&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Resilience&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Qibla compass was a good example of this principle.&lt;/p&gt;

&lt;p&gt;Instead of asking a server:&lt;/p&gt;

&lt;p&gt;«“Where is the Qibla from this location?”»&lt;/p&gt;

&lt;p&gt;the phone can calculate the answer itself.&lt;/p&gt;

&lt;p&gt;That small architectural decision makes the feature much more useful when the user is travelling — precisely when a Qibla compass may be needed most.&lt;/p&gt;

&lt;p&gt;I'm continuing to experiment with offline-first and privacy-focused web development while building SabrTime, and I'll be sharing more of the technical lessons from the project.&lt;/p&gt;

</description>
      <category>qiblacompass</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What Google Search Console Is Teaching Me as a Solo Developer</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sat, 01 Aug 2026 07:29:13 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/what-google-search-console-is-teaching-me-as-a-solo-developer-42h7</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/what-google-search-console-is-teaching-me-as-a-solo-developer-42h7</guid>
      <description>&lt;p&gt;When I launched SabrTime, I expected Google to discover my pages quickly.&lt;/p&gt;

&lt;p&gt;That didn't happen.&lt;br&gt;
Today, only 13 pages of my website are indexed,people are already discovering my content through Search.&lt;br&gt;
Instead of chasing shortcuts, I've started trusting the data.&lt;/p&gt;

&lt;p&gt;My Search Console Snapshot&lt;br&gt;
Over the last few months, I've seen:&lt;br&gt;
✅ 13 pages indexed&lt;br&gt;
📈 Search impressions growing month after month&lt;br&gt;
🔍 Hundreds of search queries triggering my pages&lt;br&gt;
🌍 Visitors finding content from different countries&lt;br&gt;
📱 Most traffic coming from mobile devices&lt;/p&gt;

&lt;p&gt;That was enough to convince me that SEO is a long-term investment.&lt;/p&gt;

&lt;p&gt;Lesson 1: Impressions Matter Before Clicks&lt;br&gt;
One thing I misunderstood was impressions.&lt;br&gt;
At first, I only cared about clicks.&lt;br&gt;
Now I pay close attention to impressions because they tell me Google is beginning to understand my website—even if users aren't clicking yet.&lt;br&gt;
Every impression is a sign that my content is entering the search ecosystem.&lt;/p&gt;

&lt;p&gt;Lesson 2: Unexpected Keywords Are Opportunities&lt;br&gt;
Some of my pages started appearing for search queries I never intentionally targeted.&lt;br&gt;
That helped me discover new content ideas and improve existing pages around topics users were already searching for.&lt;br&gt;
Instead of guessing what people want, I now let Search Console guide my content strategy.&lt;/p&gt;

&lt;p&gt;Lesson 3: Technical SEO Matters&lt;br&gt;
While reviewing Search Console, I found several technical issues that needed attention:&lt;br&gt;
Improving internal links&lt;br&gt;
Fixing indexing problems&lt;br&gt;
Updating meta titles and descriptions&lt;br&gt;
Making pages easier for Google to crawl&lt;br&gt;
None of these changes created overnight success, but together they improved the health of my website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5duap05z9yogdgrwm2t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5duap05z9yogdgrwm2t.jpg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lesson 4: Publishing Consistently Beats Publishing Perfectly&lt;br&gt;
Rather than waiting for the "perfect" article, I focused on publishing useful content consistently.&lt;br&gt;
Every quality page becomes another opportunity for Google to understand what your website is about.&lt;/p&gt;

&lt;p&gt;What I'm Working Toward&lt;br&gt;
My next goals are simple:&lt;br&gt;
Increase indexed pages beyond 13&lt;br&gt;
Continue improving Core Web Vitals&lt;br&gt;
Earn relevant backlinks naturally&lt;br&gt;
Publish content people genuinely find useful&lt;br&gt;
SEO isn't about gaming the algorithm.&lt;br&gt;
It's about building something worth discovering.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
I'm still at the beginning of my SEO journey, but Google Search Console has completely changed how I think about building websites.&lt;br&gt;
The data has helped me stop guessing and start making better decisions.&lt;br&gt;
If you're also building a website, what has Google Search Console taught you?&lt;/p&gt;

&lt;p&gt;About My Project&lt;br&gt;
I'm applying these lessons while building SabrTime, a privacy-focused Islamic web app with prayer times, Qibla direction, duas, an ibadah tracker, tasbeeh, and other daily Islamic tools.&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://sabrtime.in%E2%81%A0%EF%BF%BD" rel="noopener noreferrer"&gt;https://sabrtime.in⁠�&lt;/a&gt; &lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>google</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hello Dev Community! I'm Yunus Khan</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sat, 18 Jul 2026 08:13:34 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/hello-dev-community-im-yunus-khan-185c</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/hello-dev-community-im-yunus-khan-185c</guid>
      <description>&lt;p&gt;👋 Assalamu Alaikum and hello everyone! 👋&lt;/p&gt;

&lt;p&gt;My name is Yunus Khan, an independent developer from India who enjoys building products that solve real problems and make technology more meaningful.&lt;/p&gt;

&lt;p&gt;My current passion project is SabrTime—a free Islamic web app designed to help Muslims stay connected with their faith through modern technology.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d8o8863lax5xinukzx4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d8o8863lax5xinukzx4.jpg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Try SabrTime: &lt;a href="https://sabrtime.in" rel="noopener noreferrer"&gt;https://sabrtime.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌙 What is SabrTime?&lt;/p&gt;

&lt;p&gt;SabrTime is more than just a prayer app. It's an all-in-one spiritual companion featuring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕌 Accurate Prayer Times&lt;/li&gt;
&lt;li&gt;🧭 Qibla Compass&lt;/li&gt;
&lt;li&gt;📿 Digital Tasbeeh Counter&lt;/li&gt;
&lt;li&gt;🤲 Mood-Based Duas&lt;/li&gt;
&lt;li&gt;📖 Prayer &amp;amp; Dua Library&lt;/li&gt;
&lt;li&gt;📅 Islamic Calendar&lt;/li&gt;
&lt;li&gt;📈 Ibadah &amp;amp; Streak Tracker&lt;/li&gt;
&lt;li&gt;🧠 Islamic Quiz&lt;/li&gt;
&lt;li&gt;🌍 Multi-language support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm constantly adding new features and improving the experience based on community feedback.&lt;/p&gt;

&lt;p&gt;The project is also open source, and I'd love to hear your suggestions or contributions.&lt;/p&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/Kyunus175/sabrtime" rel="noopener noreferrer"&gt;https://github.com/Kyunus175/sabrtime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 What I'll Share Here&lt;/p&gt;

&lt;p&gt;On Dev.to, I'll write about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My web development journey&lt;/li&gt;
&lt;li&gt;Building and scaling SabrTime&lt;/li&gt;
&lt;li&gt;JavaScript, HTML, CSS, Firebase, and PWAs&lt;/li&gt;
&lt;li&gt;SEO and performance optimization&lt;/li&gt;
&lt;li&gt;Lessons learned while developing as a solo developer&lt;/li&gt;
&lt;li&gt;Open-source experiments and side projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm excited to learn from this amazing community, share my experiences, and connect with developers from around the world.&lt;/p&gt;

&lt;p&gt;Thank you for reading my first post! If you have any feedback about SabrTime or ideas for future features, I'd love to hear them in the comments.&lt;/p&gt;

&lt;p&gt;🌐 Website: &lt;a href="https://sabrtime.in" rel="noopener noreferrer"&gt;https://sabrtime.in&lt;/a&gt;&lt;br&gt;
⭐ GitHub: &lt;a href="https://github.com/Kyunus175/sabrtime" rel="noopener noreferrer"&gt;https://github.com/Kyunus175/sabrtime&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #javascript #pwa #opensource #indiedev #devjourney
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
