v1.1.0
Deploy GitHub Pages / deploy (push) Canceled after 0s
أنور بي آي — AnwarPi
محتوى عربي عملي لتعلّم الذكاء الاصطناعي، بلا ضجيج.
Arabic-first platform for learning AI: free guides, VIP deep-dives, a searchable library, and moderated community — built with Next.js 15 + Payload 3 + PostgreSQL behind Traefik.
anwarpy.ai · دليل الوكيل الآلي (AGENT.md) · مسرد المصطلحات · قرارات التصميم
🖼️ لقطات من الموقع
| الصفحة الرئيسية | المكتبة |
![]() |
![]() |
| صفحة دليل | العضوية |
![]() |
![]() |
ما هو أنور بي آي؟
منصة عربية لتعلّم الذكاء الاصطناعي بشكل عملي: أدلة مجانية للجميع، وأدلة متعمقة لأعضاء VIP، ومكتبة قابلة للبحث والتصفية، وتعليقات مُراقَّبة، ومسارات تعلّم (كتالوج). الواجهة عربية بالكامل (RTL) وتعمل على الهاتف واللوحي وسطح المكتب.
✨ المميزات
- 📚 المكتبة — كل الأدلة مع بحث وتصفية حسب التصنيف (وكلاء، نماذج، استرجاع، سلامة، أدوات، أعمال).
- 🔓 بوابة محتوى — الأدلة المجانية كاملة؛ أدلة VIP تظهر بمعاينة مقفلة حتى يصبح القارئ مشتركًا.
- 👤 حسابات — تسجيل، دخول، استعادة كلمة المرور، تحقق البريد، وإعدادات حساب كاملة.
- 💬 تعليقات مُراقَّبة — دورة حياة
pending → approved؛ يظهر العلني المعتمَد فقط. - 🗺️ الكتالوج والمسارات — رحلة تعلّم مرتّبة حسب المستوى (مبتدئ/متوسط/متقدم).
- 🤖 نشر آلي — API للوكلاء الخارجيين (
/api/agent/postsبمفتاحx-agent-key) لنشر الأدلة من خط إدارة المحتوى. - 💳 عضوية VIP — Stripe جاهز؛ حتى تفعيل المفاتيح يعمل زر الاشتراك بوضع «قريبًا».
- 🌓 هوية بصرية داكنة — أشعة فضية ولمسة سماوية؛ انظر
brand-spec.md.
🔄 كيف يعمل الموقع؟ (شرح التدفق)
تدفق الزائر
flowchart RL
Z[الزائر] --> A[الصفحة الرئيسية]
A --> B[المكتبة / الكتالوج]
B --> C{نوع الدليل؟}
C -->|مجاني| D[قراءة كاملة + إعجاب وتعليق]
C -->|VIP| E[معاينة مقفلة]
E --> F[إنشاء حساب / دخول]
F --> G{مشترك VIP؟}
G -->|نعم| D
G -->|لا| H[صفحة العضوية]
H --> I[تهيئة مشترك VIP جديد]
I --> D
- تصفّح — الزائر يفتح الرئيسية، يتصفح المكتبة أو الكتالوج، ثم يفتح دليلًا.
- قراءة — الدليل المجاني يُقرأ كاملًا. دليل VIP يظهر جزءًا منه فقط مع طبقة قفل.
- حساب — التسجيل يمنح دور
freeفقط (الخادم يجبر ذلك؛ طلب العميل لا يستطيع ترقية نفسه). بعد التحقق من البريد يمكن التعليق. - ترقية — صفحة العضوية تقود لـ Stripe؛ بعد الدفع الناجح يُفعَّل دور
vipعبر مسار موثوق من الخادم، ثم معالجة تهيئة VIP الجديد.
تدفق المحتوى (نشر الأدلة)
flowchart LR
T[مواضيع المالك في AppFlowy] --> P[خط النشر الآلي]
P -->|POST/PUT مع x-agent-key| A[API الوكلاء]
A --> V[التحقق والتغطية الافتراضية للغلاف]
V --> D[(PostgreSQL)]
D --> S[anwarpy.ai]
- يملك المالك قائمة مواضيع؛ يعمل خط النشر FIFO (دليل واحد لكل تشغيل، الاثنين/الأربعاء/الجمعة).
- كل دليل يُوسم
freeأوvip؛ غير الموسوم = مجاني. - الأغلفة 1200×630، ولكل تصنيف غلاف افتراضي احتياطي.
تدفق الطلب عبر الخادم
المتصفح → Traefik (حدود المعدل: pagelimit / apilimit / connlimit)
→ Next.js 15 (الصفحات + /api)
→ Payload 3 (التحكم بالوصول + الخطافات)
→ PostgreSQL 16
🏗️ البنية التقنية
| الطبقة | التقنية |
|---|---|
| الواجهة | Next.js 15 (App Router) + React 19، عربية RTL |
| لوحة التحكم | Payload 3 (/admin) مع محرر Lexical |
| قاعدة البيانات | PostgreSQL 16 عبر @payloadcms/db-postgres |
| المصادقة | جلسات Payload، تجزئة PBKDF2-SHA256 600k تكرار |
| الوسيط | web/src/middleware.ts — حدود معدل لمسارات المصادقة |
| الحاوية | Docker Compose + Traefik (TLS + حدود معدل الحافة) |
| البريد | Cloudflare (توجيه + إرسال REST) |
| المدفوعات | Stripe (جاهز، بوضع «قريبًا» حتى المفاتيح) |
🚀 التشغيل محليًا
cd web
npm install
أنشئ web/.env:
DATABASE_URI=postgres://anwarpi:anwarpi@127.0.0.1:5432/anwarpi
PAYLOAD_SECRET=<سري عشوائي طويل>
NEXT_PUBLIC_SITE_URL=http://localhost:3000
AGENT_API_KEY=<مفتاح نشر الوكلاء>
MAIL_FROM=noreply@anwarpy.ai
npm run dev # http://localhost:3000 — لوحة التحكم على /admin
npm run build # تحقق قبل النشر
npm run seed # تعبئة بيانات تجريبية
📡 أهم مسارات الـ API
| المسار | الوصف |
|---|---|
POST /api/users |
تسجيل (حد 5/ساعة لكل IP) |
POST /api/users/login |
دخول (حد 10/15دقيقة) |
POST /api/users/forgot-password |
استعادة (حد 5/ساعة) |
GET/PATCH /api/users/me |
حسابي |
GET /api/posts و GET /api/posts/[slug] |
الأدلة (المحتوى المقفل يُقتطع حسب الدور) |
POST /api/posts/[slug]/like / view / comments |
تفاعلات |
POST/PUT /api/agent/posts |
نشر آلي — يتطلب ترويسة x-agent-key |
POST /api/subscribe |
اشتراك Stripe (يعيد comingSoon حتى المفاتيح) |
POST /api/stripe/webhook |
ويبهوك Stripe — يتحقق من التوقيع |
🔐 الأمان
- حدود المعدل (وسيط Next): تسجيل 5/ساعة، دخول 10/15دقيقة، استعادة 5/ساعة — لكل IP، استجابة 429 مع
Retry-Afterورسالة عامة. - حدود الحافة (Traefik): 60 طلب/دقيقة للصفحات (انفجار 120) و50 طلبًا جاريًا لكل IP، و
apilimitللـ API. - قاعدة الكتابة الموثوقة: طلبات العميل لا تستطيع تعيين الدور أو التحقق أو حقول الفواتير — تُحذف في خطاف
beforeChange(verificationToken,stripeCustomerId,role,emailVerified). - HSTS
max-age=63072000; includeSubDomainsعلى كل المسارات. - تكافؤ زمن الدخول: البريد غير الموجود يستهلك نفس كلفة PBKDF2 (منع تعداد المستخدمين بالزمن).
- التعليقات مُراقَّبة ولا تُنشر قبل اعتماد المشرف.
📚 الوثائق
| الملف | المحتوى |
|---|---|
| AGENT.md | شرح التطبيق والبنية للوكلاء الآليين (AI agents) |
| GLOSSARY.md | مسرد المصطلحات الموحّد (عضوية، مفتوح، موثّق…) |
| docs/adr | قرارات التصميم (ADRs) |
| brand-spec.md | الهوية البصرية والألوان |
| web/docker-compose.vps.yml | تكوين النشر على الـ VPS |
🚢 النشر
rsync -az --exclude node_modules --exclude .next --exclude .git \
--exclude media --exclude files-private --exclude '.env*' --exclude '*.tsbuildinfo' \
web/ root@<VPS>:/root/anwarpi/
ssh root@<VPS> "cd /root/anwarpi && docker compose -f docker-compose.vps.yml up -d --build"
أمر التشغيل داخل الحاوية ينفّذ payload migrate تلقائيًا قبل الإقلاع.
Releases
3
Languages
TypeScript
39.1%
HTML
37.6%
CSS
19.5%
JavaScript
2.8%
Python
0.6%
Other
0.4%



