قرآن ريلز — Quran Reels ⭐

المستودع: https://github.com/Ansygroup/quran-reels (عام · main) · النشر: Vercel · الدفع المستقبلي: scripts/gh_push.sh
صانع فيديو قرآن مجاني وفوري — نسخة مطوّرة بالكامل من quranreels.tech تعمل داخل المتصفح بدون خوادم معالجة وبدون قوائم انتظار وبدون حدود يومية.
🔗 الفكرة في سطر واحد: اختر الآيات ← شاهد المعاينة الحية ← اضغط «إنشاء» ← حمّل ملف MP4 عمودي 1080×1920 خلال ثوانٍ.
🌐 منشور الآن: https://quran-reels-tau.vercel.app
✨ المزايا (مقارنة بالأصل)
| الأصل | هذه النسخة | |
|---|---|---|
| الإنشاء | طابور خادم 1–3 دقائق + 10 فيديوهات/يوم + 30 ثانية تبريد | فوري داخل المتصفح بلا حدود وبدون تسجيل |
| المعاينة | غير متوفرة | معاينة حية أثناء التصميم (تشغيل/تقديم/تنقل بين الآيات) |
| الخصوصية | رفع للخادم | الصوت والصور لا تغادر جهازك (رفع خلفية محلي) |
| الأدوات | 24 أداة | 32 أداة تعمل دون إنترنت حيث أمكن |
| التصدير | MP4 من الخادم | MediaRecorder داخل المتصفح: MP4/WebM حسب دعم المتصفح، مع تقدير الأبعاد 9:16 / 1:1 / 16:9 |
🎬 الصانع
- 47 قارئًا (كل ayah mp3 من everyayah عبر
/proxyموحّد المصدر — مطلوب لالتقاط الصوت في التصدير) - 114 سورة + نطاق آيات يدوي أو «رسائل سريعة» (الصبر، السكينة، الرزق، التوبة… 324 مرجعًا متحققًا)
- ترجمة داخل الفيديو بـ8 لغات (إنجليزية، فرنسية، تركية، إندونيسية، أردية، إسبانية، إيطالية) + عربي مبسّط
- 14 خلفية (10 صور مولّدة + 4 تدرّجات) + رفع صورة من جهازك (محلي فقط)
- أنماط بطاقة (card/glow/banner) × 4 ألوان ذهبي/زمردي/فضي/وردي، عدّ حجم الخط، علامة مائية، إهداء «صدقة جارية» بثلاثة أنماط، إيقاف الحركة، شارة عنوان السورة، شريط تقدّم، ترجمة قابلة للإخفاء
- معاينة حقيقية: صوت كل آية + رسم Canvas بنفس كود التصدير (لا مفاجآت)
- تصدير لحظي:
canvas.captureStream+MediaRecorderمع شريط تقدّم وإمكانية الإلغاء، ثم تحميل/مشاركة/فيديو فوري
🧰 الأدوات الـ32
مواقيت الصلاة (12 طريقة + تحديد موقع دقيق بتوقيت المنطقة) · القبلة (بوصلة + SVG + خريطة) · التاريخ الهجري/الميلادي · أذكار الصباح والمساء (حصن المسلم كامل — 132 فئة) · المسبحة · أسماء الله الحسنى · آية اليوم · آيات بالموضوع · حلقة التلاوة · خطة الختمة · الختمة الجماعية برابط قابل للمشاركة · مخارج الحروف · إذاعة القرآن (بث مباشر) · الأحاديث (النووية/القدسية مضمّنة + البخاري ومسلم وأبو داود والترمذي والنسائي وابن ماجه والموطأ بتحميل كسول) · تخريج الحديث · مصمّم البطاقات PNG · حاسبة الزكاة · المواريث (شاملة فرع واردث ووصية ووصية مطلقة) · أسماء المولودين (1017 اسمًا) · ألوان E · التقويم الإسلامي · عدّاد المناسبات · عدّاد الإفطار · تنبيهات الأذان (إشعارات + جرس) · أعمال اليوم · متتبع الصيام · قضاء الصلاة · حاسبة الكفارة · تعلم الصلاة · المساجد القريبة (OpenStreetMap) · الدعاء المختار
🏗️ البنية
quran-reels/
├── server.py # خادم محلي: ثابت + /proxy (قائمة بيضاء) + /api/ip + /api/app-config
├── vercel.json # إعدادات Vercel: outputDirectory=public + إعادة توجيه /proxy → /api/proxy + كاش
├── .vercelignore # ما لا يُرفع عند النشر
├── api/ # دوال Serverless (Node) — مرآة كاملة لـ server.py
│ ├── proxy.js # نفس عقد /proxy: 400/403/502 + كاش 6 ساعات + ACAO *
│ ├── ip.js # نفس عقد /api/ip مع نفس البديل الافتراضي (القاهرة)
│ └── app-config.js # إعدادات عامة (Supabase URL + المفتاح العام) من متغيرات البيئة
└── public/
├── index.html # الصفحة الكاملة (SEO + JSON-LD + FAQ)
├── css/style.css # نظام تصميم RTL (تاجوال/أميري/أميري قرآن)
├── js/
│ ├── data.js # القراء، الترجمات، الخلفيات، FAMOUS، الأدوات…
│ ├── core.js # أدوات + حساب المواقيت (PrayTimes) + القبلة + الهجري + الراوتر
│ ├── quran.js # تحميل المصحف + الاختيارات + فهرس البحث
│ ├── reel.js # رسم الفيديو (Canvas) + AyahPlayer + ReelRecorder
│ ├── creator.js # واجهة الصانع وتدفق التصدير
│ ├── tools.js # إطار الأدوات المساعدة
│ ├── tools-a/b/c.js # الأدوات الـ32
│ └── app.js # الإقلاع والصفحة الرئيسية
├── data/ # المصحف (2.1MB) + 7 ترجمات + أذكار + أسماء + أحاديث
├── fonts/ # Amiri / AmiriQuran / Scheherazade / Tajawal
└── img/backgrounds/ # 10 خلفيات مولّدة (بلا نصوص)
🚀 التشغيل
cd quran-reels
PORT=8787 python3 server.py
# ثم افتح http://localhost:8787
- لا توجد تبعيات (Python 3 مكتبة فقط + Node للفحص الاختياري).
/proxy?u=يقبل فقط: everyayah.com, api.alquran.cloud, cdn.jsdelivr.net, raw.githubusercontent.com, qurango.net, overpass-api.de, overpass.osm.ch, api.aladhan.com, nominatim.openstreetmap.org.PORTاختياري (افتراضي 8787) ويجب أن يُشغَّل على0.0.0.0ليعمل خلف وكيل المعاينة.
🌐 النشر على Vercel + Supabase
Vercel (الحساب متصل — المصادقة محفوظة داخل المشروع في .vcfg ولا تحتاج موافقة جديدة):
# مرة واحدة لكل بيئة عمل جديدة (إن لزم): npm i -g vercel أو استخدم npx
npx vercel -Q "$PWD/.vcfg" deploy --prod --yes --scope ansygroups-projects
- الإعدادات في
vercel.json: مجلد الخرج =public، و/proxyيُعاد توجيهه إلىapi/proxy، وصفحات بدون امتداد تفتح التطبيق، وكاش CDN يوم للملفات الثابتة و6 ساعات للـproxy، ورؤوسnosniff/Referrer-Policy. - متغيرات البيئة في المشروع (production + preview):
SUPABASE_URL·SUPABASE_ANON_KEY— تقرأهاapi/app-config.jsويستهلكها المتصفح.
- نطاق مخصص لاحقًا: أضِفه من لوحة Vercel ثم حدّث وسوم SEO إليه.
تحصينات مطبَّقة (2026-10-27):
api/proxy.js+ مرآتهserver.py: سقف حجم25MB · حدّ120 طلب/دقيقة/IP · دعمRange(تنقّل الصوت بـ206) · إعادة فحص مضيفي كل تحويل (حتى3) · كاش6س + كاش دافئ من الذاكرة./api/ip: يقرأ رؤوسx-vercel-ip-*من حافة Vercel أولًا (بلا اعتماد خارجي وبلا rate-limit) ثم ipapi.co ثم بديل القاهرة.- Supabase: صلاحيات أعمدة محدودة (
UPDATEعلىdone/planفقط) + قيود (طول الاسم≤24،done≤365، تنسيق معرّف) + العميل يكتب عبر PATCH ثم INSERT (لا upsert). البقيّة المقصودة: المفتاح العام يسمح بقراءة لوحة الختمة كاملة (بيانات تقدّم منخفضة الحساسية) — الحل الجذري عند الحاجة: Supabase Auth. - معرّفات خطط أقوى (16 محرفًا عشوائيًا عبر
crypto).
PWA / وضع دون إنترنت:
public/sw.js+manifest.json+img/icon.svg: يُخزّن الهيكل والبيانات الأساسية عند أول زيارة؛ التنقّل والأدوات تعمل دون إنترنت، و/proxy+/apiشبكة دائمًا (لا يُخزَّن صوت). الإصدار الحاليqr-v1— عند تغيير ملفات الهيكل ارفع الرقم فيsw.jsلتجديد الكاش.
Supabase — الختمة الجماعية المشتركة (متزامنة بين الأجهزة):
- مشروع
quran-reelsبجدولتيkhatma_plansوkhatma_progressمع RLS (تقدّم كل فرد في صف مستقل). - أداة «ختمة جماعية» تقرأ
/api/app-config؛ عند غيابها تعمل بدون سحابة بهدوء (تراجع صامت). - رابط المشاركة يحمل الخطة؛ التقدّم يُدفع عند «أنهيت اليوم» ويُسحب عند فتح الرابط على أي جهاز.
👤 الحساب + النشر التلقائي (الأتمتة) — الجديد
تجربة المستخدم (تعمل فورًا): زر «🔑 دخول» → رابط سحري للبريد أو «المتابعة بجوجل» → صفحة #/account فيها ربط المنصات بضغطة OAuth واحدة، جدول النشر، ومولّد البوستات، و«الأتمتة» اليومية. زر «🤖 جدولة للنشر» في نتيجة التصدير يرفع الفيديو إلى حسابك ويفتح نافذة الجدولة. الزائر يبقى حرًا — كل شيء (الإنشاء والأدوات) يعمل بلا تسجيل.
كيف تُفعِّل النشر الفعلي (إعدادات المطوّر — مرة واحدة لكل منصة):
| المنصة | متغيرات Vercel (Secrets) | أين تنشئ التطبيق | رابط إعادة التوجيه السجلّي |
|---|---|---|---|
| يوتيوب (ويُفعِّل جوجل الدخول لاحقًا) | GOOGLE_CLIENT_ID · GOOGLE_CLIENT_SECRET |
Google Cloud Console → OAuth consent → Credentials | https://quran-reels-tau.vercel.app/api/oauth/callback |
| فيسبوك + إنستغرام | META_APP_ID · META_APP_SECRET |
developers.facebook.com → My Apps | نفس الرابط أعلاه |
| تيك توك | TIKTOK_CLIENT_KEY · TIKTOK_CLIENT_SECRET |
developers.tiktok.com | نفس الرابط |
| X | X_CLIENT_ID · X_CLIENT_SECRET |
developer.x.com | نفس الرابط |
- رابط إعادة التوجيه واحد لكل المنصات:
/api/oauth/callback(المنصة تُرمَّز داخلstate). - دخول جوجل: إعداد Supabase Dashboard → Authentication → Providers → Google (نفس عميل جوجل تقريبًا؛ سجّل redirect:
https://<ref>.supabase.co/auth/v1/callback) — البريد السحري يعمل بلا أي إعداد (SMTP المدمج؛ حدّه الافتراضي 2 رسائل لكل نافذة وقت — يُرفع من الداشبورد أو عبر SMTP خاص عند الحاجة). - الأتمتة: Vercel Cron يوميًا
15 4 * * *UTC (≈06:15 القاهرة) ينشر المهام المستحقة عبرCRON_SECRET— خطة Vercel المجانية تكفي (فيديو تلقائي/يوم). النشر الفوري متاح دائمًا من زر «انشر الآن». - التخزين: فيديوهات الجدولة تُرفع إلى Supabase Storage bucket
reels(عام — لحاجة المنصات لجلب الرابط) بحدّ 50MB/ملف؛ حدّ الـ1GB المجاني يكفي مئات الريلز. - الأمان: التوكنات تُشفَّر AES-256-GCM بمفتاح
TOKEN_ENC_KEY(خادم فقط)، JWTs تُتحقق ES256 عبر JWKS، الجداول محمية RLS بملكية المستخدم، ولا تظهر أي توكنات في الاستجابات. .env.secretsفي جذر المشروع (مُستبعد من الرفع): نسخة محلية منTOKEN_ENC_KEYوCRON_SECRET— فقدانهما يعني إعادة ربط المنصات (لا ضرر).- حدّ Vercel: خطة Hobby تسمح بـ12 دالة/نشرة — المجموع الحالي 11. عند الإضافة ادمج المسارات (نمط
api/x.js+ استعلامات?op=كما هو هنا). - واقع المنصات (بصدق): رفع يوتيوب مباشر (كوتا ~6 فيديو/يوم افتراضيًا، تُرفع بطلب) · إنستغرام يتطلب حساب Business + مراجعة تطبيق Meta · تيك توك مراجعة تطبيق (وضع الاختبار ينشر للمنشئين فقط) · X قد يتطلب خطة API مدفوعة لرفع الفيديو. كل ذلك أطراف خارجية — الكود جاهز ويعمل فور منح الموافقة.
- الباقات (مجاني/برو/مدى الحياة) معروضة كواجهة — الدفع الإلكتروني خطوة قادمة عند طلبك.
✅ الاختبارات
- حزمة الاختبارات الدائمة داخل المشروع:
tests/run.js(Playwright) — تُشغَّل ضد الإنتاج أو الخادم المحلي:
cd tests
npm i playwright && npx playwright install chromium-headless-shell
npx playwright install-deps chromium-headless-shell # مكتبات النظام (مرة واحدة)
node run.js # محلي: 127.0.0.1:8787
BASE=https://quran-reels-tau.vercel.app node run.js # الإنتاج
SKIP_EXPORT=1 node run.js # بلا قسم التصدير (~أسرع)
node tools_smoke.js # دخان فتح الـ32 أداة (~5 ث)
node tools_interact.js # تفاعل فعلي لكل أداة (نقر·select·input·checkbox)
node correctness_test.js # صحة الحسابات مقابل Aladhan (30 فحصًا)
# الثلاثة الأخيرة تقبل BASE=… للإنتاج أيضًا
ما تغطيه: الإقلاع + وسوم SEO وJSON-LD وrobots/sitemap + معاينة وتصدير MP4 فعلي + فتح الـ32 أداة بلا أخطاء + تفاعلات عميقة (مسبحة/زكاة/ختمة فردية/ختمة جماعية مع حالة السحابة/مواقيت/قبلة/أذكار/أحاديث/إذاعة/اختبار مخارج) + قائمة الجوال.
Lighthouse (موبايل مُحاكى): أداء 91 · وصولية 100 · أفضل الممارسات 100 · SEO 100 (FCP 1.0s · LCP 1.5s · CLS 0.07 · صفر فشل)
مدقّق W3C (validator.nu): 0 أخطاء · 0 تحذير — تسلسل عناوين دلالي كامل (بما شامل عنوانَي
sr-onlyلقسم الأداة وv-tagآية اليوم) — وللصفحات الأربع الجديدة/ar/*: 0/0 لكل منها.طبقة فهرسة (جولة كمل#8): كانت كل روابط التطبيق
#/…غير قابلة للفهرسة و sitemap = رابط واحد، فبُنيت صفحات هبوط ثابتة بلا سكربتات معناها غنيّ وJSON-LD وFAQ داخلي مترابط:/ar/quran-video-maker/·/ar/islamic-tools/(شبكة الـ32 أداة) ·/ar/prayer-times/·/ar/qibla-direction/— sitemap الآن 11 مسارًا، وروابط داخلية من تذييل الرئيسية إليها، ورؤوس أمان/caching ممتدّة لـ/ar/(.*)، وLH للصفحة الأولى 98/100/100/100.توسعة المحتوى وGEO (كمل#10 — «الرقم واحد»): +6 صفحات على كلمات المنافسين الحقيقية (
quran-video-tiktok·quran-video-with-translation·short-quran-verses-video·adhkar·tasbeeh·zakat-calculator) — كلها W3C 0/0 ومولّدة عبرscripts/build_lp.jsالقابل لإعادة الاستخدام ·/llms.txtبحقائق للاقتباس من محركات الذكاء · robots.txt يسمح صراحةً بـ12+ وكيل ذكاء (GPTBot·PerplexityBot·ClaudeBot·Google-Extended…) · IndexNow أُعيد إيداعه بـ11 رابطًا HTTP 200 · تقرير المنافسين الكامل فيdocs/competitors.md(20 فاعلًا + مقارنة صريحة + أهداف قابلة للقياس).وسم التحقق من Google
google-site-verificationمنشور في الرئيسية (خطوة GSC: تحقق ← إرسال sitemap ← طلب فهرسة الـ12 مسارًا).خادم MCP (كمل#11 — «الذكاء يرشحك»):
POST /api/mcp— خادم Streamable HTTP بروتوكولي2025-06-18/2025-03-26بلا مفاتيح ولا جلسات (JSON-RPC · دفعات · CORS) و6 أدوات تجعل محركات الذكاء تنداء الموقع:quran_reel_maker_info·get_prayer_times(9 طرق + توقيت IANA آمن DST) ·get_qibla·get_hijri_date(أم القرى) ·get_verse(عثماني ≤10) ·create_reel(رابط/?s=…&from=…&to=…يفتح الصانع معبأًا) · اكتشاف/.well-known/mcp.json· وثائق/developers/mcp/(W3C 0/0) · مختبرtests/mcp_test.js28/28.السجلّ الرسمي MCP (كمل#24د — منشور ✓):
app.vercel.quran-reels-tau/quran-reels-mcp@1.0.0في registry.modelcontextprotocol.io (status=active) بمصادقة HTTP عبر/.well-known/mcp-registry-auth(Ed25519 — بلا حساب ولا متصفح)، والـremotesتشير إلىhttps://quran-reels-tau.vercel.app/api/mcp— يُستهلك منه GitHub MCP Registry وكل العملاء الراغبون في السجلّ الرسمي · إعادة النشر:mcp-publisher publish.الدفعة الكبرى (كمل#12 — «كلهم»): 58 صفحة جديدة عبر
scripts/build_k12.js= قسم إنجليزي/en/(6 صفحات مزدوجة اللغة معhreflangعلى 6 أزواج عربي↔إنجليزي) + فهرس القرّاء و47 صفحة قارئ (/ar/reciters/+/ar/reciter/<slug>/) بأزرار/?r=<folder>تفتح المولّد مُهيّأً بصوت القارئ (تعريب عميق فيapplyDeepLink/handlePending+ وسيط اختياري في أداة MCPcreate_reel) + صفحات الثقة (/about·/terms·/privacy·/contactبنموذج يعمل على RPC دفاعيsubmit_contactبجدول RLS بلا قراءة) · فواتير موحّدة بالروابط الثقة في كل الصفحات · Sitemap 12→70 · llms.txt محدّث · W3C 70 صفحة 0/0 · مختبرtests/pages12_test.js21/21 · IndexNow 70@200.المدونة والموسمية (كمل#13):
scripts/build_blog.js→ فهرس/blog/+ 8 مقالات على كلمات الأصل الحقيقية (٣٠ فكرة · هل توجد أداة مجانية؟ · جدول مقارنة مع quranreels.tech/tashghil/quranvideomaker ·7 أخطاء · الجدولة والأتمتة · خطة رمضان1448 أم القرى:1 رمضان≈8 فبراير2027 · محتوى الجمعة · أول فيديو في5 دقائق) — كل مقال بـArticle+BreadcrumbList+FAQPageJSON-LD و<time>وقراءة معلنة · رابط «مقالات» في فواتير الموقع كلّه (قوالب×3 + الجذر + الثابتة) · Sitemap 70→79 · llms.txt قسم المدونة · W3C 79×0/0 · مختبرtests/blog_test.js12/12 (يشمل فحص CJK وروابط داخلية حيّة ومسارات sitemap الدقيقة) · IndexNow 79@200.المراقبة + كلمة-بكلمة + الحزمة + المؤجَّل (كمل#14 — «كلهم»): أسلوب «كلمة-بكلمة» الرابع في صانع الريلز (
reel.js _drawWords: إبراز الكلمة الجارية بقرص ذهبي موزون بالحروف على زمن التلاوة الحقيقي — صوت مفكّك أو تقدير — مع مطابقة سطور_fitAyahحرفيًا، واختبار S3 في run.js) · مراقبة أسبوعية:npm run monitor(scripts/monitor_site.js+lib/monitor.js— كل مداخل sitemap بحالة 200 + robots/llms/علامة GSC/تذييل المدونة + diff منافسين بقوائم جديدة/محذوفة + استعلام Bing RSS للفهرسة وتقرير Markdown يومي فيdocs/monitor/) + Vercel Cron إثنين 06:30UTC (/api/cron/monitor) · بريد تأكيد التواصل:api/contact.jsيمرّ على RPC ثم يرسل تأكيدًا للمراسل ونسخة للمسؤول عبرlib/mailer.js(Resend، بلا مفتاح = no-op) مع مسار احتياطي مباشر في النموذج · عيب OAuth مُصحَّح:redirect_uriللمنصات الأربع كانت لمسارات غير موجودة → موحَّد على/api/oauth/callback· حزمة اقتباسات خارجيةdocs/backlinks.md(ورقة حقائق +8 أهداف بروابطهم +3 قوالب رسائل + خطة أسبوعية) · محاضر الإعداد:docs/{github,domain,oauth,payments,smtp}-setup.md+ مسودةsql/credits-draft.sql(غير مُطبَّقة) +scripts/rebase_url.jsلتبديل النطاق بأمر واحد بعد ضبط DNS · مختبر pages12 21→24.GSC وسم التحقق (كمل#15): الرمز
IHmoe5QFrC77PbZdh2O0MeZFLIKwg-saA50td32AcQoمثبَّت الآن في 79/79 صفحات — أُضيفت الناقصة الأربع (ar/quran-video-maker·ar/islamic-tools·ar/prayer-times·ar/qibla-direction) بنفس موضع القالب · المراقبة تفحص الآن مطابقة القيمة الدقيقة لا مجرد الوجود (lib/monitor EXPECTED_VERIF) · اختبار دائم في pages12 (GSC token exact on home) · الخطوة التالية: GSC → Verify → سجل Sitemap (79) → طلب الفهرسة · ملف التحققgoogleb789508316de731f.html(أسلوب رفع الملف — 53 بايت حرفيًا في الجذر) مع حارس في pages12 (24→25).صفحات المنصّات (كمل#17):
quran-video-instagram·quran-video-whatsapp— بنصّ الأصل الحرفي (عنوانهما ووصفهما مأخوذان من صفحتيهما المنشورتين في quranreels.tech) +quran-video-facebookبكلماتنا (الأصل لا يملك صفحة فيسبوك — تحقّقت من خريطته الـ90) — كل صفحة بـWebPage+FAQPageJSON-LD وروابط متقاطعة (تيك توك ↔ المنصّات) · إصلاح رابط ميّت:/ar/quran-reels-for-dawah/كان في صفحة الترجمة ولا وجود له ← استُبدل بستاتس واتساب · Sitemap 79→82 · llms.txt +3 · W3C 5 صفحات معدَّلة 0/0 · pages12 25→27 (يشمل جولة 82 رابطًا self-canonical) · IndexNow 200×3 · monitor 82/82.صفحات الموسم والفئات (كمل#18): 21 صفحة جديدة — سلسلة «كم باقي» (hub + رمضان2027/الفطر/الأضحى/عرفة/رجب/شعبان/الجمعة: تواريخ أم القرى بنصّ الأصل مع تدرّج «قد يختلف يومًا بالرؤية» + عدّاد حيّ
id="kbc"داخل كل صفحة، والجمعة يحسب نفسها أسبوعيًا في المتصفح) + التهنئة بالاسم (hub + عيدان + جمعة + رمضان — عناوين الأصل مع وصف مُكيَّف لإهدائنا أسفل الفيديو بدل «بطاقة الافتتاح» التي ليست عندنا) + 7 فئات أدوات (islamic-tools/{prayer-and-place,quran-discovery,quran-learning,dhikr,hadith-and-learning,calculators-and-tracking,family-and-life}بعناوين ووصفات الأصل وأدواتنا موزّعة) +/ar/quran-word-highlight/بكلماتنا (slug الأصل معطّل 404 فملكِلناه) · إشارات الميزة: سؤال FAQ الجذر الـ16 فيdata.js(يعيد بناء run.js) + صف في جدول مقارنة المدونة (مع تصريح صريح بأن للمنافس أيضًا «كلمة بكلمة») + llms · build_lp 9→30 · Sitemap 82→103 · pages12 27→29 (فحص الكلمة المفتاحية + فحص العدّاد) · run.js 87/0 · blog 12/12 · correctness30 · smoke32 · mcp28 · interact32 · W3C 23×0/0 (validator.nu) · Lighthouse 91/98 (الرئيسية/المصصّم — بلا انحدار عن خط الأساس مع تشتّت طبيعي 79–95، وأُضيفpreloadلـstyle.cssلتقليل render-blocking) · IndexNow 21@200/202 · monitor 103/103.استكمال خريطة الأصل + تجديد التصميم (كمل#19 «الكل»): 51 صفحة جديدة تُغلق كل الفجوات المتبقّية من sitemap الأصل (90 رابطًا — لم يبقَ منها إلا ما هو مغطّى بمسار آخر): 24 صفحة أدوات مفردة بنصوص الأصل (
qibla·hijri-date·islamic-calendar·ayat-bil-mawdoo·daily-ayah·quran-radio·quran-looper·quran-khatma·group-khatma(يُصلح رابطًا ميّتًا كان في كمل#18) ·hisn-almuslim·asma-allah-husna·hadith·hadith-checker·how-to-pray·mawarith·kaffara·qada·sawm·baby-names·nearby-mosques·minshawi-rare·makharij·tahfeez·quran-quizباختبار حقيقي8 أسئلة داخل الصفحة ·crypto-zakatبحاسبة يدوية + تنبيه علمي ·halal-product-checker— بكلماتنا لأن «الباركود والصورة» ليسا عندنا) + 13 صفحة صانع متخصّصة (no-watermark·no-music·free-maker·quran-video-ramadan·quran-reels-ai·quran-translation-video·quran-tafsir-video(صفحة حدود صريحة) ·khushoo·sadaqa-jariya·quran-word-highlight-video+yasser-dossary/mishary-rashid(=alafasy)/best-quran-recitersبصفحات قرّاء حقيقية47) +adhkar/{sabah,masaa,nawm}+guides/quran-reels-guide-2026+compare/quran-video-makers(بدون ادّعاء «7» — جدولنا المُتحقَّق فقط) + نسختاur/وid/(lang/dir صحيحة) + جذرية:/faq/و**/content-sources/** (شفافية المصادر) و**/developers/+docs/en+integrations/n8n** (MCP/JSON-RPC حقيقي بلا مفتاح) مع redirect/privacy-policy→/privacy(308) · أوصاف الميزات الغائبة عُدِّلت بصدق (بوصلة بلا توهّج أخضر · بلا «مشي» · بلا عمر هجري · بلا صورة حديث · بلا مجسّم3D…) · بناء القالب:base/lang/dirاختيارية (30→81 صفحة مولّدة) · Sitemap 103→154 · pages12 29→30 (+فحص ur/id lang+GSC) · تجديد تصميم عابر عبرstyle.css+ قالبي lp/blog (hero بتدرّج ذهبي · hover/borders · focus-visible · selection · reduced-motion) مع إصلاح CLS ناتج عنtext-wrap:balance(LH: المصصّم89→97 بعد الإزالة) · W3C 90×0/0 · run 87/0 · blog12 · correctness30 · smoke32 · mcp28 · interact32 · LH الرئيسية88–91 (خط الأساس91) · IndexNow 51@200×3 · monitor 154/154.محرّك المقالات + 100 مقال + صور AI + تعميق الباك (كمل#20 «engine100 · ai · deepen»): محرّك
scripts/build_posts.jsيقرأposts/library{,_b}.js(بنوك محتوى 8 عناقيد: video13 · reciters12 · prayer13 · hifz13 · azkar13 · seasons12 · family12 · publishing12) +posts/index{,_b}.js(مواصفات100 مقال فريد: slug/عنوان ب sufix «| قرآن ريلز»/وصف/كلمات مفتاحية/مقدمة/3 نقاط/تطبيق/FAQ×2-3/روابط داخلية≥2) → 100 مقال على/articles/<slug>/+ hub/articles/: Article+BreadcrumbList+FAQPage JSON-LD · crumb «الرئيسية ← المكتبة» ·<time>عربي · دقائق القراءة (كلمات/180) · ترابط مركّب (2 من بنك العنقود + «اقرأ أيضًا» +3 بطاقات ذات صلة + أداة العنقود + cluster links) · 8 صور AI رائدة للعناقيد فيpublic/img/articles/<slug>.jpg(hero+og تلقائيًا، والباقي og-cover) · الفوترات كلها أضافت «المكتبة» (قالب lp + قالب blog +64 صفحة ثابتة + محرّك المقالات نفسه) · Sitemap 154→255 · llms.txt +قسم «مكتبة المقالات» · مختبر pages12 154→255 · محلي كامل أخضر: run 87/0 · blog 12/12 · correctness 30 · smoke 32 · interact 32 · api 0 · mcp 28 · الحجم مُنسَب عمدًا: «مليون مقال» مستحيل فيزيائيًّا ويعرّض الموقع لـ scaled-content-abuse (ask_user: engine100) — المحرّك جاهز لتمديد مئات المقالات القادمة ببنوك العناقيد نفسها.GitHub (كمل#16): المستودع العام https://github.com/Ansygroup/quran-reels مرفوع بـ18 التزامًا ومتحقق من التطاقب (sha محلي = بعيد) · فرع
masterأُعيد تسميتهmain· التوكن في.vcfg/gh_token(600، متجاهل للـgit، لا يُطبع أبدًا) +.vcfg/gh_repo·scripts/gh_push.shيعيد إضافة origin ويدفع بأمر واحد (مقاوم لمسح.git/config) · توثيق الحالة فيdocs/github-setup.md.Lighthouse على مسارات الأدوات:
#/tools= 95/100/100/100 ·#/tool/prayer= 94/100/100/100 — صفر فشل في كل المسارات.سلسلة E2E REST دائمة
tests/e2e_rest.py: 13/13 على البناء النهائي (منح·JWKS·OAuth 401/302·تخزين رفع+عام·RLS ختمة·جدولة·نشر 502 بلا ربط·أتمتة·قائمة ربط).دخان الأدوات الـ32
tests/tools_smoke.js: يفتح كل أداة ويتحقق الرندر + غياب أخطاء الصفحة + عدم التجاوز الأفقي — 32/32 في ~5 ثوانٍ على المحلي والإنتاج.عطل تجميد مُصلَّح (كشفه الدخان):
hijriPartsكان يُنشئIntl.DateTimeFormatلكل استدعاء، فحلقةhijriToGreg(×900 داخل أداة الرزنامة) كانت تُجمّد الخيط الرئيسي لعشرات الثواني (أداةcalendarعالقة) — الآن المُنسّق واحد مخزّن فيcore.js.اختبار الصحة
tests/correctness_test.js— 30/30 محليًا وإنتاجًا: مرجع خارجي مباشر (Aladhan) لحسابات اليوم: الهجري ↔gToH+ roundtrip · قبلة القاهرة/لندن/جاكرتا/نيويورك ±1° · مواقيت أم القرى (القاهرة) ↔method=4بفارق 0–2 دقيقة · الزكاة عبر DOM (٢٫٥٪ + نصاب ٨٥غ + حكمان) · أدوات نصية (toAr·fmtTime·normAr).عطل هجري صامت مُصلَّح (كشفه اختبار الصحة): إعادة التسمية في جولة كمل#6 تركت
raw: fmt.format(date)—ReferenceErrorيبتلعهcatch، فكانت كل التواريخ الهجري تعرض افتراضيًا «١ محرم ١٤٤٨ هـ» والاختبارات تمرّ لأنها تفحص الرندر فقط — الآن_HIJRI_FMTفي المسار الصحيح.عطل DST مُصلَّح: ثابت
tzفي جدول المدن كان يُخطئ ساعة كاملة أثناء التوقيت الصيفي (القاهرةtz:2مقابلAfrica/Cairo= +3 اليوم) — الآن لكل مدينة منطقة IANA (z) تُشتق إزاحتها لليوم الحالي عبرtzFromNameعند كل قراءة (مسارات: محفوظ/جهاز/IP/اختيار المدينة).تفاعل الأدوات
tests/tools_interact.js— 32/32 محليًا وإنتاجًا: يتمرّس حتى ٤ حركات فعلية لكل أداة (نقر زر/رابط · تغيير select · إدخال آمن · تبديل checkbox) مع حارس تجميد ومنظّف حالة (Escape/hash/صوت) — الأدوات العرضية الخالصة (iftar/calendar/countdown) مُوثّقة كعرضية في الكود.ملاحظة نطاق: إعدادات المشروع تحوي
quran-reels.ansygroup.comكـalias (يظهر في أمر النشر) لكن DNS لا يحلّه بعد — النطاق المرجعيquran-reels-tau.vercel.appسليم.أداء الإقلاع:
deferلـ12 سكربت، تنفيذات الأدوات الثلاثة تُجلب عند أول فتح أداة (مقتناة في SHELL للأوفلاين)، خلفية الصفحة الرئيسية webp، كاش سنة للخطوط/الخلفيات/JS/CSS عبر?v=3.النتائج الأخيرة (بناء كمل#7): chromium PROD 86/0 · LOCAL 81/0 · api 15/15 · الصحة 30/30 · تفاعل 32/32 · دخان 32/32 · LH 91/100/100/100 (firefox/webkit: 85/80 و85/80 على بناء
0d21c5cمعSKIP_EXPORT=1: MediaRecorder مفقود/معطّل في headless لهما — قيد بيئة موثّق) · api_test يشمل: الأوفلاين عبر Service Worker، صف سحابة إنتاجي، قسم S9 للحساب/الأتمتة/عقود API — رفض الزائر401، حارس زر جوجل: المزوّد غير المُفعّل يعطي تنبيهًا بدل صفحة خطأ، رابط «النشر التلقائي» في القائمة، وFAQ = 15 مطابقة للـJSON-LD.PWA كامل للتثبيت: أيقونات
icon-192.png/icon-512.png(+maskable) ومُشار إليها بـ?v=2لكسر كاش CDN، وإصدار SW =qr-v3.رؤوس أمنية لكل
/api/*:nosniff+ Referrer-Policy +Permissions-Policy(geo/self — كاميرا/ميكروفون ممنوعان).محلل رموز الجلسة
QRAuth.parseAuthHash: يتحمل#access_token=و#/…#access_token=المزدوج و?access_token=(مُختبَر بثلاثة أشكال).مسار الرابط السحري: الإرسال مقبول للنطاقات الحقيقية (دُرّب بـ429 بعد قبوله)؛ صفحة التحقق
token_hashتتطلب رمزًا واردًا من البريد فعلًا (جُرّبت بصلاحيات القاعدة ورُفضت بـotp_expiredكما هو متوقع) — إعدادsite_urlصار على الإنتاج.مستودع git محلي (80 ملفًا،
.gitignoreيحمي.env*/.vcfg/.vercel) — أول commit شامل كل شيء.أداء معاينة الشبكات: صورة
og-coverأعيد ضغطها 2167KB→95KB (1200×630 JPEG) ومُحدَّثة في og/twitter + JSON-LD مع?v=2— ومُتحقَّد أن كل مسارات SW (21) تعيد 200 وسجلات الإنتاج خالية من الأخطاء.زر تثبيت التطبيق PWA: يظهر بحدوث
beforeinstallpromptويخفي بـappinstalled(فحصان جديدان في S9).CSP صارم على HTML:
script-src 'self'(لا سكربتات داخلية/معالجاتonclick— أُعيد توجيه زر الإنشاء إلى JS)، connect/media pin للمصادر الحقيقية (Supabase/everyayah/overpass/jsdelivr/qurango)،frame-ancestors 'none'+X-Frame-Options: DENY+ Referrer-Policy — والاثنان والثمانون فحصًا تمرّ دون أي انتهاك.تكامل iOS:
apple-touch-iconمن PNG-192 +theme-colorموجود.sql/schema.sql: نسخة مخطط كاملة (5 جداول + RLS + 14 سياسة + 6 فهارس، من الكتالوج الحي) للاستعادة — بلا أي سر.حارس توافق: رسالة عربية واضحة إن غاب MediaRecorder بدل خطأ تقني.
تدقيق أداء: SHELL = 2.8MB فقط (الترجمات الـ12MB عند الطلب)، brotli مُفعّل، 21 مسار SW كلها 200.
اختبار متصفح مضاعف:
PW_BROWSER=firefox node run.js(chromium افتراضي) — Firefox أخضر 85/80 بـSKIP_EXPORT=1لأنMediaRecorderيعلّق في Firefox headless (سُجّل بملء قيد بيئة في run.js؛ تصدير MP4 مُختبَر على chromium).لربطه بـGitHub لاحقًا (بمُشتركك أنت — لا تُلصق التوكن هنا أبدًا):
gh auth login # أو استخدم PAT عبر GH_TOKEN gh repo create quran-reels --private --source=. --push # أو يدويًا: # git remote add origin https://github.com/<user>/quran-reels.git # git push -u origin mainفحص عقود الوحدات
api_test.js: 15/15 (ACAO · كاش · Range206 · 405 · rate-limit429 · X-Cache HIT · ip · app-config).جدولة Vercel مؤكَّدة:
vercel crons ls→/api/cron/publish·15 4 * * *(يوميًا).E2E كامل بحساب حقيقي (يدوي، خارج المجموعة): منح جلسة → رفع فيزيو للتخزين (200 + رابط عام) → إدراج مهمة بـRLS → جدولة عبر API → نشر بلا ربط ⇒
failedبرسالة عربية مُدارة → أتمتة upsert → واجهة بحساب مسجّل 8/8 (بطاقة المستخدم، قوائم، نافذة الجدولة، توليد البوست، خروج ينظّف الجلسة) — وكل البيانات نُظّفت بعدها (0 صف).ملاحظة بيئة العمل: كل رد من المستخدم ينظّف
node_modulesوذاكرة المتصفح — أعدnpm i playwright && npx playwright install chromium-headless-shell(+install-depsإن لزم) قبل أي تشغيل جديد.التحقق من بيانات الملفات: فحص مطابقة الـ44 ملفًا بين النشرة المحلية والإنتاج (HEAD 200 للكل)، وعقد دوال Vercel بـ13 فحص (
api_test.jsسابقًا)، وإثبات مزامنة السحابة بجهازين على الإنتاج.
📝 ملاحظات
التصدير يلتقط الصوت الحي من مشغّل WebAudio (
MediaStreamDestination) — يجب مرور الصوت عبر نفس الأصل (/proxy) لتجاوز قيود CORS.الموقع منشور على
quran-reels-tau.vercel.app(كل وسوم SEO وrobots/sitemap عليه). عند ربط نطاق مخصّص لاحقًا: بدّل النطاق فيindex.html(canonical/og/JSON-LD) وrobots.txt/sitemap.xmlثم أعد النشر.الاختبارات:
tests/run.js(التشغيلان أعلاه خضراء: PROD 65/0 · LOCAL 64/0) — حزمة دائمة داخل المشروع بدل الملفات المؤقتة السابقة.ملاحظات بيئة العمل: مجلدات التبعيات (
node_modules، ذاكرة المتصفح، CLI) تُنظَّف مع كل رسالة — أعد تثبيتها بالأوامر أعلاه عند الحاجة؛ ملفات المشروع والبيانات تبقى كما هي.200 مقالًا + مكتبة إنجليزية + GEO + فيديوهات حقيقية (كمل#21 «كلهم»): (أ) التوسعة 100→200:
posts/library_c.jsأضاف 24 قسمًا (بنوك المحتوى6→9 لكل العناقيد الثمانية) ·posts/index_c.js+posts/index_d.js= 100 مواصفة جديدة (video · reciters · prayer · hifz · azkar · seasons · family · publishing = 25 لكل عننقود) مع فحص CJK وروابط ميتة أغلق9 عيوب كتابة · (ب) المكتبة الإنجليزية:posts/en.js15 مقالًا إنجليزيًا أصليًا (مواضيع متصلة بأقراها العربية) +scripts/build_posts_en.js→/en/articles/<slug>/+ hub/en/articles/(Article+Breadcrumb+FAQ LD · hreflang متقابل ar↔en + x-default · صور hero مشتركة عند توفّرها) · فوترات الصفحاتlang=enأُعيدت إلى/en/articles/· (ج) GEO: Article LD حصل على timeRequired + keywords + isPartOf · الرئيسية +WebSite + Organization LD (4 كتل JSON-LD صالحة) · llms.txt: 200 دليلًا (25×8) + قسم المكتبة الإنجليزية + بند حقائق جديد (خريطة 371) · (د) فيديوهات MP4 حقيقية:scripts/export_videos.jsيقود الموقع نفسه عبر Playwright (/?s=&from=&to=&r=→#btnCreate→ انتظار#btnDownload→ تنزيل) → 8 مقاطع عمودية 1080×1920 بلا علامة مائية (3.6–16.7MB) فيdeliverables/videos/+ README ببيانات يوتيوب جاهزة (عنوان ووصف ووسوم لكل مقطع · روابط لمقالاته · قواعد الرفع Shorts) · Sitemap 255→371 (+116 بلا تكرار) · pages12 ينتظر 371 · محلي: 371/371 كلها 200 + canonical متطابق · correctness 30 · blog 12 · smoke 32 · interact 32 · api 0 · W3C 372 ملفًا → أخطاء0 (إصلاح تدرّج عناوين/faq/) · خادم8787 أُعيد تشغيله من جذر المستودع (كان يعمل دون مسارات API محليًا).400 مقالًا + 40 إنجليزيًا + فيديوهات40 + APK (كمل#22 «كلهم» + «APK للجوال»): (أ) المكتبة200→400:
posts/library_d.js(+24 بنك محتوى) +posts/index_e/f/g/h.js(52+52+52+44 = 200 مواصفة جديدة) → 8 عناقيد × 50 =400 فريدة، إغلاق29 رابطًا ميتًا عبر خرائط href عالمية (DEAD=0)،build_posts.js→ 400 مقالًا + hub، خريطة الموقع 371→571 · (ب) فيديوهات40/40: مكتبةvideo_recipes_c.js(32 وصفة) + إصلاحات انتظار Playwright (60–150s، صيغة3 معاملات لـ waitForFunction) → 40 ملف MP4 عمودية1080×1920 =494MB + README 40 صفًا ببيانات يوتيوب · (ج) الإنجليزية15→40:posts/en_b.js(+25 دليلًا كاملًا) + معالجة 22 وقوع{t}حرفية فيbuild_posts_en.js(تطبيع قبل العرض HTML+JSON-LD) + hub يعرض400 · 40 زوجًا ar↔en hreflang متبادلًا · صفحة/en/tools/الجديدة زوجًا لـ/ar/islamic-tools/(x-default→/) · تذييل k12 EN يوصّل الأدوات · خريطة الموقع 571→597 (+26) · pages12 ينتظر 597 · llms: 400 عربي +40 EN +597 رابطًا · W3C محليًا0 أخطاء على42 ملف EN · (د) backlinksdocs/backlinks.md: أقسام §12–15 (حزمة روابط400 · أصول النشر والفيديو · خريطة مجتمعات8 عناقيد · قياس اقتباس GEO وتتبّع) + ورقة الحقائق §0 محدّثة للأرقام الحقيقية · (هـ) APK للجوال: Bubblewrap TWA →deliverables/app/quran-reels.apk(1.07MB) +quran-reels.aab— حزمةapp.quranreels.twa· minSdk24 · التسمية «قرآن ريلز — صانع ريلز قرآني» · يفتح الموقع الحيّ · شهادة التوقيع مطابقة للـkeystore المحفوظ فيdeliverables/app/build/android.keystore(كلمة السر داخل.vcfg/apk_keystore_pw— لا تُشارك) · إعادة البناء:scripts/make_apk.py.500 مقالًا + 100 إنجليزي + فيديوهات80 + ختمة جماعية مُتحقَّق منها (كمل#23 «كلهم»): (أ) المكتبة400→500:
posts/index_i.js(+58) +posts/index_j.js(+42) = 100 مواصفة جديدة (video15 · reciters16 · prayer14 · azkar13 · hifz11 · seasons10 · family10 · publishing11) → 500 فريدة، روابط ميتة0، contract0 ·build_posts.js→ 500 مقالًا + hub · (ب) الإنجليزية40→100:posts/en_c.js+en_d.js= 60 دليلًا جديدًا (slug==arTwin) → بناء 100 مقال EN + 100 زوج ar↔en hreflang ·{t}صفر · (ج) فيديوهات40→80:scripts/video_recipes_d.js(+40 وصفة) + ربطBATCH=d→ 80 MP4 (785MB) + README 80 صفًا (تشخيص مسار65:1 الممتد160ث استُبدل بمطلع التغابن47ث) · (د) المزايا (تحقّق لا بناء): auth Google+magic link موجودان ومربوطان (QRAuth+#/account+ login overlay)، الروابط السحرية حيّة إنتاجيًا، ختمة جماعية Supabase تعمل ببيانات حقيقية (khatma_plans/progress + RLS مُختبَرة200)، وGoogle provider بانتظار تفعيلهم في لوحة Supabase (الواجهة تُظهر تنبيهًا صريحًا عند التعطّل) · (هـ) تجهيز النشر:deliverables/youtube/(upload-pack CSV+JSON لـ80 + CHECKLIST) +deliverables/app/store/(PLAY-LISTING + 6 لقطات1080×1920) · أرقام: sitemap 597→757 · pages12 757 · llms 500/100/757 · backlinks §0 محدّث · W3C محليًا 0 أخطاء/160 · monitor 757/757 بحالة200 · IndexNow160@200 · محلي: run0/0 · correctness30 · blog12 · smoke32 · interact32 · api0 · إنتاج: run0/0 · pages12 30/30@757 · mcp28 · correctness30 · blog12 · smoke32 · interact32 · api0 · LH 89/98 (a11y94/100 · bp100 · seo100).10,000 مقال + 136 بوابة + IndexNow9,636 (كمل#24 «التسع آلاف»): (أ) التوليد: 8 ملفات
posts/gen_data_*.js(video185 · reciters178 · prayer154 · hifz162 · azkar170 · seasons132 · family170 · publishing221 = 1,362 موضوعًا في136 مجموعة) بفحصscripts/scan_content.jsv3 (CJK/سيليري/يوناني/لاتيني موسّع + نطاق مكمّل + فحص بعد كل كتابة أغلق عيوب «ƪ/ Frauen/过去» وملتصقات الأرقام20) +scripts/gen_engine.jsالمحرك المتدرّج: صيغ × مواضيع × صفات مؤهّلة (سياق12×جمهور5 · قائمة سماح خاصة بالنشر) مع بوابات تشابه: تفرّد slugs وعناوين وأوصاف عالميًّا · تنقية فتحات العميقة بتطابق الكلمات · منع صفات غير منطقية → 9,500 مقالة بالضبط (1,000 عميق + 8,500 منهجية) +500 قديمة = 10,000 · (ب) البناء:build_posts.jsمُرقّى (تحميل القديم+الجديد · قسم ثالث للعميق · بطاقة SVG مضمّنة بديل الهيرو بلا ملفات إضافية · CSS خارجي خفّض279→200MB · ح1 بلا لاحقة · فترينة المجموعة في breadcrumb+LD+روابط) → 10,000 صفحة + hub رئيسي (8×17 شرائح) +136 بوابة محور · vnu 0 أخطاء على عيّنات الأنواع الستة · (ج) الفهرسة:build_sitemap.js→ sitemap 757→10,393 بالضبط (kept257+articles10,000+hubs136 · EN101 محفوظة) · pages12 → سحب10,393 بحوض16 عيّنة + عدّاد10393 · llms.txt محدّث + llms-full.txt جديد (2.39MB · 10,136 بندًا وصفيًّا) · (د) النشر: حدّ CLI (100MB/15k ملف) يمنع الرفع المباشر → استُخدم ربط Git موجود (push → نشر تلقائي) → deploy quran-reels-npyd2cnjk جاهز · IndexNow 9,636 (9,500+136) @200 · (هـ) الصور هجين: SVG مضمّن للجميع + عاملgen_ai_images.js(pollinations · حدّ مجاني صورة/45ث → بوابة47ث · عميق أولًا · 500 مخطط) يعمل في الخلفية ويُعاد البناء بعد اكتماله · (و) روابط:docs/backlinks.md§16–18 (حزمة10k · حملة1,000 عميق بمصفوفة8 عناقيد · قياس وصيانة) + §0 محدّثة (10,000/10,393/136) · (ز) الأرقام: محلي run0/0 · correctness30 · blog12 · smoke32 · interact32 · api0 · إنتاج: run0/0 · pages12 30/30@10,393 · mcp28 · correctness30 · blog12 · smoke32 · interact32 · api0 · sitemap10,393 · pool16 كلها200+canonical.تتمة كمل#24 (2026-10-29 «الحاوية الجديدة + كاشف البطاقات»): (أ) الاستعادة: الحاوية أُعيد تجهيزها (.git → a54a4b9 · ~2,969 مجلد مقالة و-out/*.json ضاعت بحدّ لقطة10,000 ملف) → جلب من GitHub و«reset --hard fc69b086» أعاد 10,137 مجلد + 9 ملفات خرج + 13 صورة سليمة · سجلّ العامل صار في
~/ai_images.log(يدوم عبر الرسائل) · JRE21+vnu.jar نُقلا إلى/home/user/tools/· chromium deps ثُبّتت (sudo apt) · هوية git أُعيد ضبطها · (ب) كاشف بطاقات pollinations: حدّ «صورة/45ث» يُعيد بطاقة JPEG صفراء («Free limit reached») بحالة 400/402 — رُفضت 13 بطاقة تسلّلت كنجاح (فحص md5 مزدوج + حظر التكرارات + تصاعد نوم46→300ث + قراءة retry-after) · الصور الحقيقية14 (8 قديمة +5 أمس +1 بعدها) والباقي يُستكمل دفعةً عبر الرسائل · (ج) a11y: من90-93 إلى100: تسطير روابط.crumbو.foot-bottom(فحص link-in-text-block) → LH إنتاج: articles100/100/100/100 · عميق100/100/100/100 · بوابة97/100/100/100 · الرئيسية a11y100 (perf72-95 تذبذب قياس — المولّر98 كما كان) · (د) فحوص إضافية: vnu23 عيّنة=0 أخطاء (JRE21 دائم) · pages12 بعد الاستعادة30/30 · مراقبة10,393/10,393 سابقًا · IndexNow9,636@200.