{"id":5709,"date":"2026-09-13T23:37:13","date_gmt":"2026-09-13T23:37:13","guid":{"rendered":"https:\/\/anasalassi.com\/blog\/sakenah-from-prayer-times-to-a-daily-islamic-companion\/"},"modified":"2026-09-13T23:37:13","modified_gmt":"2026-09-13T23:37:13","slug":"sakenah-from-prayer-times-to-a-daily-islamic-companion","status":"publish","type":"post","link":"https:\/\/anasalassi.com\/ar\/blog\/sakenah-from-prayer-times-to-a-daily-islamic-companion\/","title":{"rendered":"Sakenah: from prayer times to a daily Islamic companion"},"content":{"rendered":"<section class=\"aa-lf-sec aa-lf-open\" aria-labelledby=\"lf-why\" data-lf-reveal>\n<div class=\"aa-lf-split\">\n<div class=\"aa-lf-prose\">\n<p class=\"aa-kicker\">Why I built it<\/p>\n<h2 id=\"lf-why\" class=\"aa-lf-h2\">It started with something small<\/h2>\n<p class=\"aa-lf-first\">I didn\u2019t set out to build an Islamic app. I wanted prayer times I would actually open.<\/p>\n<p>Most of the apps I tried did the job, but they did a lot of other things too. Banners, feeds, features stacked on top of the one thing I needed several times a day: how long until the next prayer? I wanted to open something, see that answer straight away, and close it again. A calm screen, today\u2019s times, and nothing competing for my attention.<\/p>\n<p>So I built that for myself. And once something is on your phone every day, you start noticing what else you wish it did.<\/p>\n<\/p><\/div>\n<aside class=\"aa-lf-brief\" aria-label=\"The first brief\">\n<p class=\"aa-lf-brief__title\">The first brief<\/p>\n<ul role=\"list\">\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 6.5V12l3.5 2\"\/><\/svg><span>The next prayer, at a glance<\/span><\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\"\/><path d=\"M3 9.5h18M8 2.5v4M16 2.5v4\"\/><\/svg><span>Today\u2019s prayer times<\/span><\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.2 11.8a6 6 0 0 0-8.5-8.5L5 10v9h9z\"\/><path d=\"M16 8 3 21M17.5 15H9\"\/><\/svg><span>A calm screen<\/span><\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"m8 12.3 2.7 2.7L16.2 9.5\"\/><\/svg><span>Nothing else in the way<\/span><\/li>\n<\/ul>\n<\/aside><\/div>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-personal\" aria-labelledby=\"lf-personal\" data-lf-reveal>\n<div class=\"aa-lf-prose\">\n<h2 id=\"lf-personal\" class=\"aa-lf-h3\">The part that became personal<\/h2>\n<p>The honest reason Sakenah grew is that I wanted to read the Quran more consistently, and I kept finding small reasons not to.<\/p>\n<p>Some of them were ordinary. I would lose my place, or open a different app and not remember where I had stopped. Others were harder to admit. Sometimes I wasn\u2019t sure how a word should be pronounced, and that uncertainty was enough to make me slow down, and then stop. Listening to a recitation helped, but following along was its own difficulty: the reciter would move on while my eyes were still a line behind.<\/p>\n<p>None of this is unusual. But each one is a little friction, and friction is exactly what decides whether a good intention becomes a habit.<\/p>\n<\/p><\/div>\n<blockquote class=\"aa-lf-question\">\n<p class=\"aa-lf-question__lead\">That became the real question behind the product:<\/p>\n<p class=\"aa-lf-question__text\">How do I remove enough friction that I can pray on time, remember Allah, open the Quran, hear it recited correctly, follow it with my eyes \u2014 and come back tomorrow to exactly where I stopped?<\/p>\n<\/blockquote>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-reflect\" aria-label=\"A verse, and a reflection\">\n  <figure class=\"aa-lf-verse\" data-lf-reveal>\n  <blockquote class=\"aa-lf-verse__quote\" lang=\"ar\" dir=\"rtl\">\n    <p class=\"aa-lf-verse__text\"><span class=\"aa-lf-verse__orn\" aria-hidden=\"true\">\ufd3f<\/span>\u0648\u064e\u0642\u064e\u0627\u0644\u064e \u0671\u0644\u0631\u0651\u064e\u0633\u064f\u0648\u0644\u064f \u064a\u064e\u0640\u0670\u0631\u064e\u0628\u0651\u0650 \u0625\u0650\u0646\u0651\u064e \u0642\u064e\u0648\u0652\u0645\u0650\u0649 \u0671\u062a\u0651\u064e\u062e\u064e\u0630\u064f\u0648\u0627\u06df \u0647\u064e\u0640\u0670\u0630\u064e\u0627 \u0671\u0644\u0652\u0642\u064f\u0631\u0652\u0621\u064e\u0627\u0646\u064e \u0645\u064e\u0647\u0652\u062c\u064f\u0648\u0631\u064b\u0627<span class=\"aa-lf-verse__orn\" aria-hidden=\"true\">\ufd3e<\/span><\/p>\n  <\/blockquote>\n\t  <figcaption class=\"aa-lf-verse__ref\">\u0633\u0648\u0631\u0629 \u0627\u0644\u0641\u0631\u0642\u0627\u0646 \u2014 \u0627\u0644\u0622\u064a\u0629 30\t  <\/figcaption>\n<\/figure>\n\t<\/p>\n<div class=\"aa-lf-prose aa-lf-prose--center\" data-lf-reveal>\n<p>I\u2019m not a scholar, and I don\u2019t want to read more into this verse than I\u2019m qualified to. But I know what it does to me when I read it. It makes me ask whether the Quran is part of my days, or something I return to occasionally \u2014 in Ramadan, on a quiet Friday, when something goes wrong.<\/p>\n<p>I don\u2019t want it to be occasional. Building Sakenah was, in part, my attempt to close some of the distance between intending to read and actually reading: to make the first step small enough that there is no reason left to put it off.<\/p>\n<p class=\"aa-lf-hope\">And if others find it useful, I hope there is benefit in it beyond me \u2014 that Allah accepts it, and makes it a sadaqah jariyah for me, in my life and after my death.<\/p>\n<\/p><\/div>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-grow\" aria-labelledby=\"lf-grow\">\n<div class=\"aa-lf-head\" data-lf-reveal>\n<p class=\"aa-kicker\">How it grew<\/p>\n<h2 id=\"lf-grow\" class=\"aa-lf-h2\">From prayer times to a daily companion<\/h2>\n<p class=\"aa-lf-lede\">Sakenah grew the way tools you actually use tend to grow: one real need at a time, each one tested against my own day before it earned a place.<\/p>\n<\/p><\/div>\n<ol class=\"aa-lf-rail\" role=\"list\" data-lf-stagger>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 6.5V12l3.5 2\"\/><\/svg><\/span><br \/>\n<h3>Salah<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cWhen is the next prayer?\u201d<\/p>\n<p>The original question, and still the first thing on the home screen.<\/p>\n<\/li>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M6 18l-1.4 1.4M19.4 4.6 18 6\"\/><\/svg><\/span><br \/>\n<h3>Adhkar<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cMorning and evening adhkar, without searching.\u201d<\/p>\n<p>With counts that remember where I was.<\/p>\n<\/li>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M2.5 4h6a3.5 3.5 0 0 1 3.5 3.5V20a2.6 2.6 0 0 0-2.6-2.6H2.5z\"\/><path d=\"M21.5 4h-6A3.5 3.5 0 0 0 12 7.5V20a2.6 2.6 0 0 1 2.6-2.6h6.9z\"\/><\/svg><\/span><br \/>\n<h3>Quran<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cOpen the mushaf where I left it.\u201d<\/p>\n<p>All 114 surahs, bookmarks and Continue Reading.<\/p>\n<\/li>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M3.5 17v-5a8.5 8.5 0 0 1 17 0v5\"\/><path d=\"M20.5 18a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3.5 18a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2h-3z\"\/><\/svg><\/span><br \/>\n<h3>Recitation<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cHear it correctly, and follow along.\u201d<\/p>\n<p>Ayah by ayah, and word by word where the timing data is reliable.<\/p>\n<\/li>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><circle cx=\"12\" cy=\"12\" r=\"5.5\"\/><circle cx=\"12\" cy=\"12\" r=\"1.6\"\/><\/svg><\/span><br \/>\n<h3>Khatmah<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cTurn reading into a pace I can keep.\u201d<\/p>\n<p>A daily portion across the 604 pages of the mushaf.<\/p>\n<\/li>\n<li><span class=\"aa-lf-rail__ico\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"m15.8 8.2-2.1 5.5-5.5 2.1 2.1-5.5z\"\/><\/svg><\/span><br \/>\n<h3>Qibla &amp; Friday<\/h3>\n<p class=\"aa-lf-rail__q\">\u201cThe other questions an ordinary week asks.\u201d<\/p>\n<p>The direction of Makkah, and the Friday khutbah from the Two Holy Mosques.<\/p>\n<\/li>\n<\/ol>\n<p class=\"aa-lf-note\" data-lf-reveal>It still has one job at heart. Everything else is there because it removes a step between intention and action.<\/p>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-read\" aria-labelledby=\"lf-read\">\n<div class=\"aa-lf-read__grid\">\n<div class=\"aa-lf-read__media\" data-lf-reveal>\n      <br \/>\n      \n    <\/div>\n<div class=\"aa-lf-prose\" data-lf-reveal>\n<p class=\"aa-kicker\">The feature I built it for<\/p>\n<h2 id=\"lf-read\" class=\"aa-lf-h2\">Hearing the Quran, and following every word<\/h2>\n<p>Of everything in Sakenah, this is the part I use most, and the part I was most careful with.<\/p>\n<p>You open a surah, choose a reciter and press Listen. As the recitation plays, the current ayah is highlighted. For reciters where word-level timing data exists, the highlight moves word by word, so your eyes stay exactly where the reciter\u2019s voice is. When you stop, Sakenah remembers the ayah and your position in the audio, and Continue Reading takes you back there the next day.<\/p>\n<p>Around that are the controls you would expect from a proper audio player \u2014 previous and next ayah, seeking, playback speed and repeat \u2014 along with translations, word meanings and tafsir, for the days you want to understand and not only recite.<\/p>\n<div class=\"aa-lf-rule\">\n<p class=\"aa-lf-rule__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 21.5s7.5-3.6 7.5-9.5V5.5L12 2.5l-7.5 3V12c0 5.9 7.5 9.5 7.5 9.5z\"\/><\/svg>A rule I didn\u2019t bend<\/p>\n<p>Word timings are never generated or estimated. If a reciter\u2019s data only supports ayah-level timing, Sakenah follows the ayah and says so. A highlight that lands a word early or late would quietly teach the wrong thing, and I would rather show less than show something wrong.<\/p>\n<\/p><\/div>\n<p>The same principle applies to the text. The Quran is displayed exactly as the Quran Foundation delivers it, character for character. It is never typed by hand, reconstructed or \u201ccleaned up\u201d, and an automated check verifies all 114 surahs and 6,236 ayahs.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-today\" aria-labelledby=\"lf-today\">\n<div class=\"aa-lf-head\" data-lf-reveal>\n<p class=\"aa-kicker\">What\u2019s inside<\/p>\n<h2 id=\"lf-today\" class=\"aa-lf-h2\">What Sakenah includes today<\/h2>\n<p class=\"aa-lf-lede\">Version 2.1 is live. This is what it does, described plainly.<\/p>\n<\/p><\/div>\n<div class=\"aa-lf-bento\" data-lf-stagger>\n<article class=\"aa-lf-tile aa-lf-tile--salah\">\n<div class=\"aa-lf-tile__body\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 6.5V12l3.5 2\"\/><\/svg>Salah<\/p>\n<h3>The next prayer, and everything around it<\/h3>\n<ul role=\"list\">\n<li>Next prayer with a live countdown<\/li>\n<li>Daily prayer times<\/li>\n<li>Hijri and Gregorian dates<\/li>\n<li>A monthly prayer calendar<\/li>\n<li>Location detection, or choose a city yourself<\/li>\n<li>Saved cities<\/li>\n<li>Calculation method and Asr madhhab<\/li>\n<li>12- or 24-hour time<\/li>\n<\/ul><\/div>\n<p>      <br \/>\n    <\/article>\n<article class=\"aa-lf-tile aa-lf-tile--quran\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M2.5 4h6a3.5 3.5 0 0 1 3.5 3.5V20a2.6 2.6 0 0 0-2.6-2.6H2.5z\"\/><path d=\"M21.5 4h-6A3.5 3.5 0 0 0 12 7.5V20a2.6 2.6 0 0 1 2.6-2.6h6.9z\"\/><\/svg>Quran<\/p>\n<h3>A complete reader with recitation<\/h3>\n<ul role=\"list\" class=\"aa-lf-cols\">\n<li>All 114 surahs<\/li>\n<li>Deep links to any surah or ayah<\/li>\n<li>Multiple reciters<\/li>\n<li>Ayah synchronisation<\/li>\n<li>Word-by-word read-along where timing exists<\/li>\n<li>Previous and next ayah, seek, speed, repeat<\/li>\n<li>Translations and word meanings<\/li>\n<li>Tafsir<\/li>\n<li>Bookmarks and Continue Reading<\/li>\n<li>Khatmah planning with a daily portion<\/li>\n<li>Reading progress kept on your device<\/li>\n<\/ul>\n<\/article>\n<article class=\"aa-lf-tile aa-lf-tile--dhikr\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"4\"\/><path d=\"M12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M6 18l-1.4 1.4M19.4 4.6 18 6\"\/><\/svg>Adhkar<\/p>\n<h3>Morning, evening and after prayer<\/h3>\n<p>The adhkar as narrated, with counts that stay where you left them through the day.<\/p>\n<\/article>\n<article class=\"aa-lf-tile aa-lf-tile--tasbeeh\">\n      <\/p>\n<div class=\"aa-lf-tile__body\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"4.5\" r=\"2\"\/><circle cx=\"18.6\" cy=\"9.3\" r=\"2\"\/><circle cx=\"16.1\" cy=\"17\" r=\"2\"\/><circle cx=\"7.9\" cy=\"17\" r=\"2\"\/><circle cx=\"5.4\" cy=\"9.3\" r=\"2\"\/><\/svg>Tasbeeh<\/p>\n<h3>A quiet digital tasbeeh<\/h3>\n<ul role=\"list\">\n<li>Presets, or your own dhikr<\/li>\n<li>Targets of 33, 34, 100 or your own<\/li>\n<li>Undo and reset<\/li>\n<li>Optional sound and haptics<\/li>\n<li>Saved on your device<\/li>\n<\/ul><\/div>\n<\/article>\n<article class=\"aa-lf-tile aa-lf-tile--qibla\">\n<div class=\"aa-lf-tile__body\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"m15.8 8.2-2.1 5.5-5.5 2.1 2.1-5.5z\"\/><\/svg>Qibla<\/p>\n<h3>Direction you can trust<\/h3>\n<ul role=\"list\">\n<li>Geographic Qibla bearing from your location<\/li>\n<li>Distance to Makkah<\/li>\n<li>A live compass where the device supports it reliably<\/li>\n<li>Clear permission and sensor states<\/li>\n<li>A fixed, north-up direction when compass data isn\u2019t reliable<\/li>\n<\/ul><\/div>\n<p>      <br \/>\n    <\/article>\n<article class=\"aa-lf-tile aa-lf-tile--friday\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"2\"\/><path d=\"M16.2 7.8a6 6 0 0 1 0 8.4M7.8 16.2a6 6 0 0 1 0-8.4M19 5a10 10 0 0 1 0 14M5 19A10 10 0 0 1 5 5\"\/><\/svg>Friday<\/p>\n<h3>The khutbah from the Two Holy Mosques<\/h3>\n<p>A Friday card with the official streams from Masjid al-Haram and Masjid an-Nabawi. It comes forward around khutbah time.<\/p>\n<\/article>\n<article class=\"aa-lf-tile aa-lf-tile--app\">\n<p class=\"aa-lf-tile__label\"><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"6\" y=\"2.5\" width=\"12\" height=\"19\" rx=\"2.5\"\/><path d=\"M11 18.5h2\"\/><\/svg>App<\/p>\n<h3>Install it like an app<\/h3>\n<p>Installs on Android, with clear Add to Home Screen steps on iPhone and iPad. It opens full-screen, is built to keep working offline, and only updates when you choose to.<\/p>\n<\/article><\/div>\n<ul class=\"aa-lf-chips\" role=\"list\" aria-label=\"Principles\" data-lf-stagger>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"4\" y=\"10.5\" width=\"16\" height=\"11\" rx=\"2\"\/><path d=\"M8 10.5V7a4 4 0 0 1 8 0v3.5\"\/><\/svg>No account required<\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"6\" y=\"2.5\" width=\"12\" height=\"19\" rx=\"2.5\"\/><path d=\"M11 18.5h2\"\/><\/svg>Preferences stay on your device<\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M2.5 12h19M12 2.5a14.5 14.5 0 0 1 0 19M12 2.5a14.5 14.5 0 0 0 0 19\"\/><\/svg>Arabic-first, fully bilingual<\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.2 11.8a6 6 0 0 0-8.5-8.5L5 10v9h9z\"\/><path d=\"M16 8 3 21M17.5 15H9\"\/><\/svg>Light and mobile-first<\/li>\n<li><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"m8 12.3 2.7 2.7L16.2 9.5\"\/><\/svg>No streaks, points or rankings<\/li>\n<\/ul>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-decide\" aria-labelledby=\"lf-decide\">\n<div class=\"aa-lf-head\" data-lf-reveal>\n<p class=\"aa-kicker\">Decisions<\/p>\n<h2 id=\"lf-decide\" class=\"aa-lf-h2\">The product decisions behind it<\/h2>\n<\/p><\/div>\n<ol class=\"aa-lf-ledger\" role=\"list\" data-lf-stagger>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">01<\/span>No account<\/h3>\n<p>Nothing in Sakenah\u2019s core needs to know who you are. Preferences, bookmarks, Khatmah plans and tasbeeh counts are stored on your device. When you use your location, it is rounded to about a kilometre first, so a precise position is never sent or stored.<\/p>\n<\/li>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">02<\/span>No false precision<\/h3>\n<p>Prayer times show the city and the calculation method they are based on. The Qibla view treats the geographic bearing as the source of truth and the live compass as a layer on top: if the sensor is missing or unreliable, it says so rather than pointing confidently in the wrong direction.<\/p>\n<\/li>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">03<\/span>No invented recitation timing<\/h3>\n<p>Word highlighting appears only where the timing data supports it. Reciters without word-level data follow the ayah, and are labelled that way.<\/p>\n<\/li>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">04<\/span>Calm over engagement<\/h3>\n<p>There are no streaks, totals or rankings. Worship isn\u2019t a leaderboard, and I didn\u2019t want an app that makes you feel behind every time you open it.<\/p>\n<\/li>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">05<\/span>A web app you can install<\/h3>\n<p>As a PWA, one codebase serves Android, iPhone and desktop, installs without an app store, and uses a service worker so core features keep working offline. A new version waits until you accept it, so nothing changes under you in the middle of a recitation.<\/p>\n<\/li>\n<li>\n<h3><span class=\"aa-lf-ledger__n\">06<\/span>Arabic first, not translated<\/h3>\n<p>The right-to-left Arabic interface is the original. English is its own edition, with its own direction and wording, rather than a layer of translated labels.<\/p>\n<\/li>\n<\/ol>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-eng\" aria-labelledby=\"lf-eng\">\n<div class=\"aa-lf-eng__intro\" data-lf-reveal>\n<p class=\"aa-kicker\">Engineering<\/p>\n<h2 id=\"lf-eng\" class=\"aa-lf-h2\">Built to be relied on, not just demoed<\/h2>\n<p>Sakenah is written in plain JavaScript modules: no framework, no build step and no runtime dependencies. Each part of the app loads only when you open it, which keeps the first screen light on a phone.<\/p>\n<\/p><\/div>\n<dl class=\"aa-lf-specs\" data-lf-stagger>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m16 18 6-6-6-6M8 6l-6 6 6 6\"\/><\/svg>Front end<\/dt>\n<dd>Vanilla JavaScript ES modules, clean deep-link routing, views loaded on demand, and complete right-to-left and left-to-right layouts.<\/dd>\n<\/div>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m2 2 20 20M8.5 16.4a5 5 0 0 1 7 0M5 12.9a10 10 0 0 1 4.3-2.4M19 12.9a10 10 0 0 0-2.1-1.5M1.8 9.2A15 15 0 0 1 6 6.6M10.8 5.1A15 15 0 0 1 22.2 9.2M12 20h.01\"\/><\/svg>Offline<\/dt>\n<dd>A service worker, cached prayer calendars, a bounded cache for Quran data, and an update flow the user approves.<\/dd>\n<\/div>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 6.5V12l3.5 2\"\/><\/svg>Time<\/dt>\n<dd>Prayer times are resolved in the city\u2019s own time zone, whatever the device\u2019s clock is set to, so \u201ctoday\u201d is always the right day.<\/dd>\n<\/div>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2.5 2.5 7.2 12 12l9.5-4.8z\"\/><path d=\"m2.5 16.8 9.5 4.7 9.5-4.7M2.5 12l9.5 4.8 9.5-4.8\"\/><\/svg>\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a<\/dt>\n<dd>A prayer-times API, and a read-only, allowlisted proxy to the Quran Foundation API for the text, translations and recitation timing.<\/dd>\n<\/div>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"7.5\" rx=\"1.8\"\/><rect x=\"3\" y=\"13.5\" width=\"18\" height=\"7.5\" rx=\"1.8\"\/><path d=\"M7 6.8h.01M7 17.3h.01\"\/><\/svg>Server<\/dt>\n<dd>A Node service behind Nginx on a VPS, run by systemd and reachable only through Nginx.<\/dd>\n<\/div>\n<div>\n<dt><svg class=\"aa-ico\" viewbox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22 12h-4l-3 8.5L9 3.5 6 12H2\"\/><\/svg>Quality<\/dt>\n<dd>Unit and integration tests, browser tests for the features and the recitation, and a full verification of the Quran text.<\/dd>\n<\/div>\n<\/dl>\n<div class=\"aa-lf-proof\" data-lf-reveal>\n<p class=\"aa-lf-proof__title\">Before the latest release went live<\/p>\n<dl class=\"aa-lf-stats\">\n<div>\n<dt>Automated tests passing locally<\/dt>\n<dd><span data-lf-count=\"183\">183<\/span><\/dd>\n<\/div>\n<div>\n<dt>Production feature checks<\/dt>\n<dd><span data-lf-count=\"59\">59<\/span><small>\/59<\/small><\/dd>\n<\/div>\n<div>\n<dt>Quran and recitation checks<\/dt>\n<dd><span data-lf-count=\"30\">30<\/span><small>\/30<\/small><\/dd>\n<\/div>\n<div>\n<dt>Ayahs verified against the source<\/dt>\n<dd><span data-lf-count=\"6236\">6,236<\/span><\/dd>\n<\/div>\n<\/dl><\/div>\n<div class=\"aa-lf-prose aa-lf-story\" data-lf-reveal>\n<p>Those numbers matter less than the habit behind them. The first time I released version 2.1, production verification caught a real problem: a browser that had used the previous version could load the new page together with an old cached script, and the app stopped. I rolled back straight away, fixed the upgrade path so existing browsers refresh their cached files once, and released again only when every check passed.<\/p>\n<p>That\u2019s the part of the work nobody sees when it goes right. It\u2019s also the part I care about most.<\/p>\n<\/p><\/div>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-learn\" aria-labelledby=\"lf-learn\">\n<div class=\"aa-lf-head\" data-lf-reveal>\n<p class=\"aa-kicker\">What I learned<\/p>\n<h2 id=\"lf-learn\" class=\"aa-lf-h2\">Building for your own day is a demanding standard<\/h2>\n<\/p><\/div>\n<ol class=\"aa-lf-lessons\" role=\"list\" data-lf-stagger>\n<li>\n<h3>A real need is a good product manager<\/h3>\n<p>Every feature had to survive a simple test: would I open this tomorrow? Plenty of ideas didn\u2019t.<\/p>\n<\/li>\n<li>\n<h3>Trust lives in details nobody advertises<\/h3>\n<p>A highlighted word that\u2019s slightly late, a compass that points confidently the wrong way, one mark changed in the text. Each is easy to ship and hard to notice, and each is a good reason to stop trusting an app.<\/p>\n<\/li>\n<li>\n<h3>Calm is a design decision<\/h3>\n<p>Adding is easier than leaving out. Sakenah is quiet on purpose, and keeping it that way takes more discipline than building the next feature.<\/p>\n<\/li>\n<\/ol>\n<\/section>\n<section class=\"aa-lf-sec aa-lf-close\" aria-labelledby=\"lf-close\" data-lf-reveal>\n<p class=\"aa-lf-status aa-lf-status--lg\"><span class=\"aa-lf-status__dot\" aria-hidden=\"true\"><\/span>Live now \u00b7 Version 2.1<\/p>\n<h2 id=\"lf-close\" class=\"aa-lf-h2\">Sakenah is live<\/h2>\n<div class=\"aa-lf-prose aa-lf-prose--center\">\n<p>You can open Sakenah at <a href=\"https:\/\/sakenah.3dot.tech\/\" target=\"_blank\" rel=\"noopener noreferrer\">sakenah.3dot.tech<\/a>, add it to your home screen, and use it without signing up for anything.<\/p>\n<p>It will keep changing the same way it started: from using it every day and noticing what gets in the way. If you use it and something doesn\u2019t look right \u2014 a time, a label, a word in the recitation \u2014 I would genuinely like to <a href=\"\/ar\/contact\/\">hear about it<\/a>.<\/p>\n<p class=\"aa-lf-hope\">My hope for Sakenah is simple: that it helps someone pray on time, remember Allah a little more often, and open the Quran on a day they otherwise wouldn\u2019t have. If it does that for even a few people, it will have been worth building.<\/p>\n<\/p><\/div>\n<p class=\"aa-lf-close__actions\">\n    <a class=\"aa-btn aa-btn--primary\" href=\"https:\/\/sakenah.3dot.tech\/\" target=\"_blank\" rel=\"noopener noreferrer\">Open Sakenah<span class=\"aa-vh\"> (opens in a new tab)<\/span><\/a><br \/>\n    <a class=\"aa-btn aa-btn--ghost\" href=\"\/ar\/projects\/sakenah\/\">Read the case study<\/a>\n  <\/p>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>It began with prayer times I would actually open. It became a way to read the Quran more consistently, hear it recited correctly and follow every word.<\/p>","protected":false},"author":1,"featured_media":5707,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[49],"tags":[],"class_list":["post-5709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-product-building"],"acf":[],"_links":{"self":[{"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/posts\/5709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/comments?post=5709"}],"version-history":[{"count":0,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/posts\/5709\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/media\/5707"}],"wp:attachment":[{"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/media?parent=5709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/categories?post=5709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anasalassi.com\/ar\/wp-json\/wp\/v2\/tags?post=5709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}