关于 Quran Reels MCP
Quran Reels 是在浏览器中制作《古兰经》竖屏视频的工具,面向制作经文短视频的用户。它支持实时预览、多种诵读者和翻译,并可在本地导出视频。
主要功能
- 01浏览 114 个章节并选择经文
- 0247 位诵读者和 8 种翻译语言
- 03设计时实时预览
- 04自定义背景、卡片样式和字幕
- 05导出 MP4 或 WebM 视频
适用场景
- 01制作带诵读音频的经文短视频
- 02为经文添加翻译和自定义视觉样式
- 03预览并导出竖屏经文视频
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://quran-reels-tau.vercel.app/api/mcpclaude mcp add --transport http app-vercel-quran-reels-tau-quran-reels https://quran-reels-tau.vercel.app/api/mcp{"mcpServers":{"app-vercel-quran-reels-tau-quran-reels":{"type":"http","url":"https://quran-reels-tau.vercel.app/api/mcp"}}}在 Cursor 中打开{"servers":{"app-vercel-quran-reels-tau-quran-reels":{"type":"http","url":"https://quran-reels-tau.vercel.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"app-vercel-quran-reels-tau-quran-reels":{"type":"http","url":"https://quran-reels-tau.vercel.app/api/mcp"}}}{"mcpServers":{"app-vercel-quran-reels-tau-quran-reels":{"serverUrl":"https://quran-reels-tau.vercel.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
قرآن ريلز — 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؛ عند غيابها تعمل بدون سحابة بهدوء (تراجع صامت). - رابط المشاركة يحمل الخطة؛ التقدّم يُدفع عند «أنهيت اليوم» ويُسحب عند فتح الرابط على أي جهاز.
👤 账户 + 自动发布(自动化)——新功能
用户体验(开箱即用):点击「🔑 登录」→ 邮箱魔法链接或「使用 Google 继续」→ 进入 #/account 页面,可一键通过 OAuth 关联平台、查看发布日程表、使用帖子生成器,以及设置每日「自动化」。导出结果中的「🤖 安排发布」按钮会将视频上传到你的账户,并打开排期窗口。访客仍可自由使用——所有功能(创作和工具)无需注册即可使用。
如何启用实际发布(开发者设置——每个平台只需设置一次):
| 平台 | Vercel 环境变量(Secrets) | 应用创建位置 | 注册重定向网址 |
|---|---|---|---|
| YouTube(之后也会启用 Google 登录) | GOOGLE_CLIENT_ID · GOOGLE_CLIENT_SECRET | Google Cloud Console → OAuth consent → Credentials | https://quran-reels-tau.vercel.app/api/oauth/callback |
| Facebook + Instagram | META_APP_ID · META_APP_SECRET | developers.facebook.com → My Apps | 同上 |
| TikTok | TIKTOK_CLIENT_KEY · TIKTOK_CLIENT_SECRET | developers.tiktok.com | 同上 |
| X | X_CLIENT_ID · X_CLIENT_SECRET | developer.x.com | 同上 |
- 所有平台共用一个重定向网址:
/api/oauth/callback(平台信息编码在state中)。 - Google 登录:在 Supabase Dashboard → Authentication → Providers → Google 中设置(使用同一个 Google 客户端即可;注册重定向网址:
https://<ref>.supabase.co/auth/v1/callback)——魔法邮件无需任何设置即可使用(内置 SMTP;默认上限为每个时间窗口 2 封邮件——可在控制面板中提高,或按需使用自定义 SMTP)。 - 自动化:Vercel Cron 每天按
15 4 * * *UTC 运行(≈ 开罗时间 06:15),通过CRON_SECRET发布到期任务——Vercel 免费计划足够使用(每天自动发布 1 个视频)。始终可以点击「立即发布」按钮即时发布。 - 存储:排期视频会上传到 Supabase Storage bucket
reels(公开——平台需要获取链接),每个文件上限为 50MB;免费的 1GB 存储空间足够存放数百个 Reels。 - 安全性:令牌使用密钥
TOKEN_ENC_KEY通过 AES-256-GCM 加密(仅限服务端),JWT 使用 JWKS 通过 ES256 验证,数据表通过 RLS 按用户所有权进行保护,响应中不会显示任何令牌。 - 项目根目录中的
.env.secrets(已排除在提交之外)保存TOKEN_ENC_KEY和CRON_SECRET的本地副本——丢失后只需重新关联平台(无其他影响)。 - Vercel 限制:Hobby 计划每次部署最多允许 12 个函数——当前总数为 11。添加函数时,请合并路由(采用此处的
api/x.js+?op=查询参数模式)。 - 平台实际情况(如实说明):YouTube 可直接上传(默认配额约为每天 6 个视频,可申请提高)· Instagram 要求使用 Business 账户并通过 Meta 应用审核 · TikTok 需要应用审核(测试模式仅向创作者发布)· 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标题)——4 个新页面/ar/*也各自都是 0/0。 -
索引层(Kamal #8):此前应用的所有
#/…链接都无法被索引,sitemap 也只有 1 个链接,因此构建了无脚本、内容丰富并带有 JSON-LD 和内部 FAQ 链接的静态落地页:/ar/quran-video-maker/·/ar/islamic-tools/(32 个工具的网格)·/ar/prayer-times/·/ar/qibla-direction/— sitemap 现有 11 条路径,主页页脚已添加指向这些页面的内部链接,/ar/(.*)已配置扩展的安全/缓存响应头,首页 LH 98/100/100/100。 -
内容扩展与 GEO(Kamal #10 —「排名第一」):新增 6 个页面,针对竞争对手的真实关键词(
quran-video-tiktok·quran-video-with-translation·short-quran-verses-video·adhkar·tasbeeh·zakat-calculator)——全部通过 W3C 验证,0/0,由可复用的scripts/build_lp.js生成 · 新增含有供 AI 搜索引擎引用事实的/llms.txt· robots.txt 明确允许 12+ 个 AI Agent(GPTBot·PerplexityBot·ClaudeBot·Google-Extended…)· IndexNow 已重新提交 11 个 HTTP 200 链接 · 完整的竞争对手报告位于docs/competitors.md(20 个参与者 + 明确对比 + 可衡量目标)。 -
Google 验证标签
google-site-verification已发布到首页(GSC 步骤:验证 ← 提交 sitemap ← 请求索引 12 条路径)。 -
MCP 服务(Kamal #11 —「让 AI 推荐你」):
POST /api/mcp— 使用2025-06-18/2025-03-26协议的 Streamable HTTP 服务,无需密钥或会话(JSON-RPC · 批处理 · CORS),提供6 个工具,让 AI 搜索引擎可以 调用 网站:quran_reel_maker_info·get_prayer_times(9 种计算方法 + 安全处理 DST 的 IANA 时区)·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 官方注册表(Kamal #24d — 已发布 ✓):
app.vercel.quran-reels-tau/[email protected]已列入 registry.modelcontextprotocol.io(status=active),通过/.well-known/mcp-registry-auth使用 HTTP 身份验证(Ed25519 — 无需账户或浏览器),remotes指向https://quran-reels-tau.vercel.app/api/mcp— 可由 GitHub MCP Registry 及所有希望使用官方注册表的客户端获取 · 重新发布:mcp-publisher publish。 -
大型批次(Kamal #12 —「全部」):通过
scripts/build_k12.js新增 58 个页面 = 英文版/en/(6 个双语页面,6 组阿拉伯语↔英语页面带有hreflang)+ 诵读者索引和 47 个诵读者页面(/ar/reciters/+/ar/reciter/<slug>/),其中/?r=<folder>按钮会打开预设了该诵读者语音的生成器(通过applyDeepLink/handlePending深度本地化 + MCP 工具create_reel的可选参数)+ 信任页面(/about·/terms·/privacy·/contact,包含通过防御性 RPCsubmit_contact运作的表单,使用无读取权限的 RLS 表)· 所有页面页脚统一加入信任链接 · Sitemap 12→70 · 更新 llms.txt · W3C 70 个页面均为 0/0 · 测试套件tests/pages12_test.js21/21 · IndexNow 70@200。 -
博客与季节性内容(Kamal #13):
scripts/build_blog.js→/blog/索引 + 8 篇文章,围绕真实核心关键词撰写(30 个创意 · 有没有免费工具?· 与 quranreels.tech/tashghil/quranvideomaker 的对比表 · 7 个错误 · 排期与自动化 · 1448 年斋月计划,乌姆库拉历:1 斋月≈2027 年 2 月 8 日 · 主麻日内容 · 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。 -
监控 + 逐词显示 + 资源包 + 延后事项(Kamal #14 —「全部」):卷轴制作器新增第 4 种**「逐词」样式(
reel.js _drawWords:按照真实诵读时长,依据字母数量加权,用金色圆盘突出当前词语——音频拆分或估算均可,并与_fitAyah行逐字匹配;run.js中的 S3 测试)· 每周监控:npm run monitor(scripts/monitor_site.js+lib/monitor.js— 检查 sitemap 中的所有页面是否返回 200、robots/llms/GSC 标记/博客页脚 + 竞争对手差异,列出新增/删除内容 + 查询 Bing RSS 检查索引,并在docs/monitor/生成每日 Markdown 报告)+ Vercel Cron**,每周一 06:30 UTC(/api/cron/monitor)· 联系确认邮件:api/contact.js先调用 RPC,再通过lib/mailer.js(Resend,无密钥时 no-op)向来信者发送确认并抄送管理员;表单提供直接备用路径 · 修复 OAuth 缺陷:4 个平台的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 验证标签(Kamal #15):验证码
IHmoe5QFrC77PbZdh2O0MeZFLIKwg-saA50td32AcQo现已固定在 79/79 个页面中——在缺少的 4 个页面中补齐(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)。 -
平台页面(Kamal #17):
quran-video-instagram·quran-video-whatsapp— 使用原文案(标题和描述取自 quranreels.tech 上发布的对应页面)+quran-video-facebook使用我们自己的文案(原站没有 Facebook 页面——已核查其 90 个链接的站点地图)— 每个页面都包含WebPage+FAQPageJSON-LD 和交叉链接(TikTok ↔ 各平台)· 修复失效链接:翻译页面中存在/ar/quran-reels-for-dawah/链接,但对应页面不存在 ← 已替换为 WhatsApp 状态 · Sitemap 79→82 · llms.txt +3 · W3C 5 个已修改页面均为 0/0 · pages12 25→27(包括对 82 个链接的 self-canonical 检查)· IndexNow 200×3 · monitor 82/82。 -
季节与类别页面(Kamal #18):新增 21 个页面 — 「还剩几天」系列(中心页 + 2027 斋月/开斋节/宰牲节/阿拉法特日/赖哲卜月/舍尔邦月/主麻日:乌姆库拉历日期沿用原文,并注明「可能因观月相差一天」+ 每个页面均有实时
id="kbc"倒计时,主麻日会在浏览器中按周计算)+ 按姓名定制祝贺(中心页 + 两个开斋节 + 主麻日 + 斋月——沿用原文标题,调整描述,说明可在视频下方添加祝福语,而不是我们没有的「片头贺卡」)+ 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,因此由我们认领)· 功能提示:data.js中根目录的 FAQ 问题数增至 16(重新构建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,并为style.css添加preload以减少阻塞渲染)· IndexNow 21@200/202 · monitor 103/103。 -
补齐原站点地图 + 全面更新设计(Kamal #19「全部」):新增 51 个页面,补齐原站点地图(90 个链接)中所有剩余空缺(只剩下由其他路径覆盖的内容):24 个单独工具页面,使用原站文案(
qibla·hijri-date·islamic-calendar·ayat-bil-mawdoo·daily-ayah·quran-radio·quran-looper·quran-khatma·group-khatma(修复 Kamal #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/边框 · focus-visible · 选中文字样式 · reduced-motion),并修复text-wrap:balance导致的 CLS(移除后 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 图片 + 深入完善后端(Kamal #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/标题(带有后缀「| Quran Reels」)/描述/关键词/引言/3 个要点/应用/FAQ×2-3/至少 2 个内部链接)→ 在/articles/<slug>/发布 100 篇文章 + 中心页/articles/:Article+BreadcrumbList+FAQPage JSON-LD · 面包屑「首页 ← 文章库」· 阿拉伯语<time>· 阅读分钟数(字数/180)· 复合关联(2 个来自主题库的链接 +「相关阅读」+3 张相关推荐卡片 + 主题工具 + cluster links)· 在public/img/articles/<slug>.jpg中为主题制作 8 张 AI 图片(自动用于 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(Kamal #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 — 所有路径均零失败。 -
永久 REST E2E 测试套件
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+ 往返转换 · 开罗/伦敦/雅加达/纽约的朝向 ±1° · 乌姆库拉历(开罗)礼拜时间 ↔method=4,误差 0–2 分钟 · 通过 DOM 检查天课(2.5% + 85g 起征额 + 两种判断结果)· 文本工具(toAr·fmtTime·normAr)。 -
修复静默回历故障(由健康检查发现):Kamal #6 一轮重命名后遗留了
raw: fmt.format(date)—ReferenceError被catch吞掉,因此所有回历日期都默认显示为「1448 年穆哈兰月 1 日」,而测试只检查渲染结果,所以仍然通过 — 现在_HIJRI_FMT已在正确路径上。 -
修复 DST 故障:城市表中的固定
tz在夏令时期间会整整相差 1 小时(开罗tz:2,而Africa/Cairo今天为 +3)— 现在每个城市都有 IANA 区域(z),每次读取时都会通过tzFromName推算当天的时差(适用于:已保存位置/设备/IP/选择城市)。 -
工具交互测试
tests/tools_interact.js— 本地和生产环境均为 32/32:每个工具最多执行 4 次实际操作(点击按钮/链接 · 更改 select · 安全输入 · 切换 checkbox),并设有冻结保护和状态清理机制(Escape/hash/声音)— 纯展示工具(iftar/calendar/countdown)已在代码中标记为纯展示工具。 -
范围说明:项目配置中包含别名
quran-reels.ansygroup.com(会显示在部署命令中),但 DNS 尚未解析 — 主域quran-reels-tau.vercel.app正常。 -
启动性能:为 12 个脚本添加
defer,3 个工具实现文件会在首次打开工具时才加载(已纳入 SHELL,供离线使用),首页背景采用 webp,字体/背景/JS/CSS 设置一年缓存,版本参数为?v=3。 -
最新结果(Kamal #7 构建):chromium PROD 86/0 · LOCAL 81/0 · api 15/15 · 健康检查 30/30 · 交互测试 32/32 · 冒烟测试 32/32 · LH 91/100/100/100(Firefox/WebKit:在
0d21c5c构建中使用SKIP_EXPORT=1时分别为 85/80 和 85/80:headless 环境中 MediaRecorder 缺失/不可用——此环境限制已记录)· api_test 包含:通过 Service Worker 检查离线运行、生产环境云端行记录、S9 账单/自动化/API 契约部分——拒绝访客 401、Google 按钮保护:提供方未启用时显示提示,而不是错误页面、菜单中的「自动发布」链接,以及 FAQ 与 JSON-LD 一致(15 项)。 -
完整 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=(已测试 3 种格式)。 -
魔法链接流程:真实域名可接受发送请求(接受后使用 429 进行测试);验证页面的
token_hash确实要求来自邮件的令牌(已使用数据库权限测试,按预期返回otp_expired)—site_url现已指向生产环境。 -
本地 git 仓库(80 个文件,
.gitignore保护.env*/.vcfg/.vercel)— 首次提交包含所有内容。 -
社交网络预览性能:
og-cover图片已重新压缩,从 2167KB 降至 95KB(1200×630 JPEG),并更新 og/twitter + JSON-LD,使用?v=2— 已验证所有 SW 路径(21 条)均返回 200,生产日志无错误。 -
PWA 应用安装按钮:触发
beforeinstallprompt时显示,触发appinstalled时隐藏(S9 新增两项检查)。 -
HTML 上的严格 CSP:
script-src 'self'(禁止内联脚本/onclick处理器——创建按钮已改为由 JS 控制),connect/media 仅允许真实来源(Supabase/everyayah/overpass/jsdelivr/qurango),frame-ancestors 'none'+X-Frame-Options: DENY+ Referrer-Policy — 82 项检查全部通过,未发生任何违规。 -
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)— 使用SKIP_EXPORT=1时 Firefox 测试通过,85/80,因为 Firefox headless 中的MediaRecorder会卡住(已在 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.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。