آيات الأرقم
AyyatAlArqam
تَعَاهَدُوا الْقُرْآنَ
هذا العمل خالص لوجه الله. اللهم ثبتنا على ذلك. This work is purely for the sake of Allah
بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ
كل ما تم تحديثه وإضافته في آيات الأرقم — منصة تتبع حفظ القرآن للعائلات والحلقات
عرض ٤١–٦٠ من أصل ١٦٥ إصدار
المراسلات: the platform can finally say something. A super admin had four ways to reach a user and none of them was a message. The header ribbon is one line of at most 100 characters, identical for everybody, with no history and no read state. إعلانات المشرف reaches only groups you personally own or co-own — being super admin grants no access there, since `current_user_owns_group()` knows owners and co-owners and nothing else. `admin_message` on a role request answers a request the user made. «ردّ بالبريد» on a report leaves the platform entirely. Nothing could tell one user anything, and nothing longer than a ribbon line could be told to everyone.
الرسائل: group messages on the dashboard. A message posted to a group has pushed a notification to every member's phone since v3.4.0.0. Tapping it opens `/dashboard` — where the message it announced is nowhere to be found. Reading it meant المجموعات، then the group، then scrolling past its member grid: three clicks away from the screen the notification landed on.
The role decision falls back to email. v6.11.0 gave the verdict a Web Push, which closes the gap only for someone who had already enabled notifications — and most accounts never have. For everyone else the decision was exactly as silent as before: rendered on `/profile`, with nothing anywhere telling them to go and look.
A role decision tells the person who asked for it. Approving or rejecting a role-upgrade request wrote the row, promoted the account where relevant, and notified nobody: the verdict is rendered only in the role card on `/profile`, so the requester learned it by happening to open that page again. An approval could sit unseen indefinitely while the new permissions were already live — and the six push types that existed covered the daily wird, inactivity, goals, review and group messages, none of which is an answer to a request the user made.
`/admin/feedback`: somewhere to actually read the reports. v6.8.0 gave the platform a way to receive problem reports and shipped a `status` column with nothing able to set it; the email was the only interface, so a report that got filtered or deleted was reachable over SQL alone, and every row sat on `new` forever regardless of whether anyone had read it.
The public pages catch up with the platform. Seven pages audited against what actually shipped since v5.0.0; three were wrong, two were incomplete, two were already correct and left alone.
PWA catch-up after a long run of releases. An audit of what v6.6.0–v6.8.2 left behind on installed phones, rather than a feature.
«لوحة التحكم» becomes «لوحتي». The account menu listed لوحة التحكم and لوحة الإدارة two rows apart — two «لوحة» names for two unrelated places, which is what made the first one read wrong. The memorization dashboard is now لوحتي: it keeps the board metaphor and drops the collision, and the possessive says whose board it is.
The contact form actually sends. v6.8.0 recorded that `/contact` discarded everything typed into it — `handleSubmit` called `setSubmitted(true)` and returned, rendering a thank-you over a message that went nowhere — and left it standing. It now posts to the same `POST /api/feedback` route as the ⚑ button, so both land in one table and one inbox.
«أبلغ عن مشكلة» in the header, beside the language toggle. There was no way to tell us anything. `/contact` looked like one and is not: its `handleSubmit` calls `setSubmitted(true)` and returns — it renders a thank-you and discards the message. Every note anyone has ever sent through that form was thrown away at the moment it looked like it had arrived.
المواظبة comes down to the size of الأجزاء. It stood at 382px against its neighbour's 207px — near enough double, and the pair shared a row, so one card set the height of both and a band of empty card sat under الأجزاء.
البطاقات moves to the far left of the toolbar and both toggles get their names. The card-layout button had been parked beside the view switcher, where it read as a third view rather than as a control acting on the current one. It now sits at the far left beside التسميات — the two buttons that change the dashboard rather than navigate away from it, grouped together.
Dragging a card up scrolled the page down. Not a sign error: the auto-scroller was running at full speed downward for the *entire* drag, whichever way the hand moved. Measured with the pointer travelling from y=315 to y=29 — straight up the screen — while `scrollTop` climbed 1800 → 2070 at a steady ~440 px/s, which is the configured maximum.
A dragged card stops stuttering. Picking one up made it jitter between two positions — visibly flickering even with the hand completely still. Reproduced by holding a synthetic pointer at one fixed coordinate and sampling the order: it alternated between «juz, streak» and «streak, juz» indefinitely.
Dragging a card no longer leaves the page scrolling by itself, and the cards now move instead of teleporting.
The dashboard is yours to arrange. Eight cards had accumulated one release at a time — المواظبة and الأجزاء in v6.3.0/v6.4.0, برنامج الحفظ in v6.6.0 — each defensible on its own and collectively a wall to scroll past before reaching the surah grid, which is what the dashboard is actually for. Collapsing a card has been possible since v3.6.3.0, but a collapsed card still holds its place, still in an order nobody chose.
Type the ayah number instead of hunting for it. البقرة is 286 ayahs and the slider is a few hundred pixels wide, so every ayah is well under two pixels: setting it to exactly 25 was a matter of luck, and the five quick buttons only offer 0/25/50/75/100٪. The number was reachable by dragging only by accident.
برامج الحفظ: seven memorization programs, and a wird for today. The dashboard could say how much you had memorized and whether you were still turning up, but never what to memorize *this morning*. Every session started with the same unanswered question, and the app's answer was a grid of 114 surahs.
An ⓘ on every dashboard card. The four stat tiles say what they are — إجمالي الآيات المحفوظة needs no gloss — but the seven cards beneath them do not. توزيع الجودة never says the quality comes from the surah modal, المواظبة never says a day only counts when ayahs actually go up, and الأجزاء never says it counts by ayah rather than by surah. Each now carries a one-line explanation behind an ⓘ beside its collapse control, via a new `info` prop on `CollapsibleCard`.
Goals know what they are counting. Setting «حفظ الجزء الخامس» meant typing an ayah count nobody knows — جزء ٥ is 124 ayahs, and juz sizes run from 110 to 564, so there is no rule of thumb to fall back on. The form asked for a number the user had no way to produce.