- مقدمة
- العرض
- MVP
- خارطة الطريق
- متطلبات المنتج
- ابدأ الآن
- البيئة المحلية
- البنية المعمارية
- الهيكل
- الأنماط
- الحزمة التقنية
- قاعدة البيانات
- تعدّد المستأجرين
- الفهرس (Catalog)
- العمل دون اتصال
- المصادقة
- التهيئة (Onboarding)
- تدفق التكامل (Integration Flow)
- التهيئة (Provision)
- القبول
- الحضور
- الامتثال التنظيمي
- الملف الشخصي
- الاجتماعات
- إدارة الرسوم
- الفاتورة
- التدويل
- الترجمة
- دليل الترجمة
- أمان قاعدة البيانات
- المساهمة
- هَوْغوارتس
- عرض حي
- الإلهام
Hogwarts منصة مفتوحة المصدر متعددة المستأجرين لمدارس K-12.
| الخاصية | القيمة |
|---|---|
| المستودع | github.com/databayt/hogwarts |
| الإنتاج | ed.databayt.org |
| الوثائق | ed.databayt.org/docs |
| الترخيص | SSPL-1.0 |
| اللغة الافتراضية | العربية (RTL) |
| النوع | تطبيق ويب SaaS B2B متعدد المستأجرين |
| المجال | EdTech — إدارة مدارس K-12 |
للقدرات المنجزة راجع MVP. للتوجه راجع Roadmap. للطبقة التجارية راجع نموذج العمل.
البنية
الحزمة التقنية
| الطبقة | الاختيار |
|---|---|
| الإطار | Next.js 16.2.x (App Router) |
| Runtime | React 19.2.x |
| اللغة | TypeScript 5.x (strict) |
| ORM | Prisma 6.19.x (multi-file schema) |
| قاعدة البيانات | PostgreSQL على Neon |
| Auth | NextAuth 5.0.0-beta.30 |
| الصلاحيات | CASL 6.x |
| التنسيق | Tailwind CSS 4.x (PostCSS) |
| UI primitives | shadcn/ui (Radix) |
| المدفوعات | Stripe + bankak + tap + cash + mobile-money + bank-transfer |
| البنوك | Plaid + Dwolla |
| البريد / SMS / WhatsApp | Resend, Twilio, WhatsApp Evolution API |
| التخزين | AWS S3 + CloudFront (cdn.databayt.org) |
| Cache | Upstash Redis |
| Realtime | Socket.io (مخدّم Node مخصص) |
| Observability | Sentry 10.x |
| الوثائق | fumadocs (MDX) 16.x |
| AI | Anthropic + OpenAI + Groq عبر Vercel AI SDK |
مساحة السطح
| العنصر | العدد |
|---|---|
| نماذج Prisma | 302 |
| Prisma enums | 149 |
| ملفات Prisma schema | 73 |
| API route handlers | 178 (52 مجلد مورد) |
| صفحات لوحة المستأجر | ~360 |
| ملفات اختبار مخصّصة | 245 |
| مفاتيح القواميس (EN + AR) | 11,000+ |
| أدلة CLAUDE.md على مستوى الكتل | 13 |
| Claude agents / commands / skills | 50 / 47 / 16 |
تعدد المستأجرين
تعدد المستأجرين القائم على النطاقات الفرعية يُحلّ على edge.
الإنتاج: school.databayt.org → /[lang]/s/school/...
المستأجر التجريبي: kingfahad.databayt.org → /[lang]/s/kingfahad/...
معاينة: tenant---branch.vercel.app → /[lang]/s/tenant/...
التطوير: subdomain.localhost:3000 → /[lang]/s/subdomain/...
نطاق مخصص: www.theirschool.com (CNAME) → منصة Hogwartsتدفق الحل:
proxy.tsعلى edge يستخرج النطاق الفرعي من host.- النطاقات المخصصة → نطاق فرعي قانوني عبر Upstash Redis (
custom-domain:${host}). - إعادة كتابة داخلية إلى
/[lang]/s/[subdomain]/...—/s/[subdomain]داخلي فقط، لا يُستخدم فيredirect()ولاLink hrefولاrouter.push. - هيدر
x-subdomainيُضبط لمعالجات لاحقة. getTenantContext()يقرأه ويحلّschoolIdلكل استعلام Prisma.
تخزين بلغة واحدة
لا تستخدم Hogwarts أعمدة ثنائية اللغة. كل المحتوى يُخزَّن بلغة المدرسة المختارة مع حقل lang. القراءات بلغة أخرى تمرّ عبر Google Translate وتُخزَّن مؤقتاً في Translation. نصوص الواجهة في القواميس (src/components/internationalization/dictionaries/)، وgetText() (@/components/translation/display) هو الوصول القانوني.
الأدوار
ثمانية أدوار في prisma/models/auth.prisma:UserRole. الصلاحيات عبر CASL abilities (@/lib/abilities) وبوابات الأدوار على المسارات.
| الدور | المستخدم | السطح | المساعد |
|---|---|---|---|
DEVELOPER | فريق المنصة (بدون schoolId) | (saas-dashboard)/* — المستأجرون، Observability، عمليات الكتالوج | requireDeveloper() |
ADMIN | المدير، رئيس المدرسة | لوحة كاملة لكل مستأجر s/[subdomain]/* | requireRole("ADMIN") |
TEACHER | معلم الفصل | school-dashboard/* (الفصول، الدرجات، الحضور) | بوابة الدور |
STUDENT | الطالب المسجَّل | school-dashboard/* (درجات، واجبات، حضور) | بوابة الدور |
GUARDIAN | ولي أمر | منطقة الأهل + بيانات الطلاب المرتبطين | بوابة الدور |
ACCOUNTANT | كادر المالية | school-dashboard/finance/* (لا أكاديميات) | بوابة الدور |
STAFF | كادر تشغيلي (أمناء، مكتبيون، …) | وحدات تشغيلية محدودة | بوابة الدور |
USER | افتراضي بعد التسجيل قبل الإعداد | /onboarding/[id]/* فقط | — |
النطاق الوظيفي
الحالة المنجزة عبر 14 ملحمة في MVP. التالي + الرؤية في Roadmap. وثائق التفاصيل لكل ملحمة بجانبها في content/docs-en/. وكل CLAUDE.md على مستوى الكتلة (src/components/<feature>/CLAUDE.md) يوثّق عقود التنفيذ لكل ميزة.
تستطيع المدرسة: قبول المتقدمين → تسجيل الطلاب → إدارة الفصول والشُعب والمواد والجداول → تسجيل الحضور (11 وضع التقاط) → تقييم الامتحانات + توليد كروت الدرجات → تحصيل الرسوم (6 بوابات دفع) → مراسلة الأهل (تطبيق + بريد + WhatsApp) → إدارة LMS → إدارة المكتبة والنقل. كل ذلك على منصة واحدة بعزل عبر schoolId.
المتطلبات غير الوظيفية
الأداء
| المقياس | الهدف |
|---|---|
| تحميل أول صفحة (3G) | < 2 ث |
| التنقّل اللاحق | < 500 مللي ث |
| استجابة API (P95) | < 500 مللي ث |
| استعلامات DB (P95) | < 100 مللي ث |
| TTFB | < 200 مللي ث عبر edge |
| Lighthouse | ≥ 90 |
الأمن
- AES-256 في الراحة، TLS 1.3 في النقل.
- كلمات مرور Bcrypt (cost 12)، جلسات JWT، 2FA عبر
TwoFactorToken+TwoFactorConfirmation. - حماية brute-force عبر
LoginAttemptaudit + rate limits. - RBAC على كل مسار، عزل المستأجرين على الخادم.
- تحقّق Zod على الخادم، حماية من SQL-injection وXSS.
AuditLogبمدة احتفاظ مع أنواع أحداث منظَّمة للتعديلات الحساسة.- 11 cron job يومياً للصيانة.
قابلية التوسّع
- Prisma connection pooling على Neon serverless PostgreSQL.
- Vercel serverless، دوال stateless،
outputFileTracingExcludesللبقاء تحت 300 ميغابايت. - S3 + CloudFront لتسليم الأصول.
experimental.serverActions.bodySizeLimit: "10mb"للرفع.
إمكانية الوصول
- WCAG 2.1 AA كهدف.
- تنقّل بلوحة المفاتيح، دعم قارئ الشاشة، تباين ألوان ≥ 4.5:1.
- خصائص CSS منطقية — لا
ml-*/mr-*. RTL يعمل بدون تجاوزات. - HTML دلالي — لا
text-*/font-*مكتوبة في كود الميزات.
الامتثال
| اللائحة | النطاق |
|---|---|
| FERPA | خصوصية الطلاب الأمريكية |
| GDPR | حماية البيانات في الاتحاد الأوروبي |
| COPPA | موافقة الأهل لمن دون 13 |
| WCAG 2.1 AA | إمكانية الوصول |
القيود
تنطبق على كل مساهمة. تُفرَض عبر hooks وagents وبوابات المراجعة.
- الترخيص — SSPL-1.0. استضافة ذاتية مجانية. إعادة بيع Hogwarts كخدمة مُستضافة تتطلّب ترخيصاً تجارياً.
- سلامة تعدد المستأجرين. كل استعلام Prisma يتضمّن
schoolId(أو يكون النموذج عاماً ويُصرَّح بذلك). اختبارات العزل فيtests/multi-tenant/. - تخزين بلغة واحدة. لا أعمدة ثنائية اللغة، حقل
langواحد لكل صف. - CSS منطقي فقط.
ms-*/me-*/ps-*/pe-*— لاml-*/mr-*/pl-*/pr-*. - لا عناصر HTML خام في المكونات. استخدم shadcn
ui/. لا<button>/<input>/<select>خام في كود الميزات. - نمط المرآة. المسارات تستورد من
src/components/<feature>/content.tsx. الأسماء الموحّدة:content.tsx,actions.ts,queries.ts,authorization.ts,validation.ts,form.tsx,table.tsx,columns.tsx. .envمركزي واحد. لا.env.localولا.env.developmentولا غيرها.- منفذ 3000 في التطوير دائماً.
pnpm tsc --noEmitقبل أي بناء. بناء Vercel فيهtypescript.ignoreBuildErrors: trueلتجنّب OOM، فالـtype-check بوابة منفصلة.- سلامة إعادة الكتابة الداخلية.
/s/[subdomain]داخلي فقط. الواجهة تستخدم مسارات نسبية للمستأجر. - كل نص واجهة عبر مفاتيح القاموس. لا نصوص إنجليزية أو عربية مكتوبة في المكونات.
مستويات الاشتراك
| المستوى | الحدود |
|---|---|
| FREE | 100 طالب، 1 GB تخزين، دعم مجتمعي |
| PRO | 10 GB، دعم مميَّز، علامة مخصّصة، API بحدود معدّل |
| ENTERPRISE | تخزين وAPI بلا حدود، white-label، SLA 99.9%، SSO |
راجع نموذج العمل للتسعير والإيرادات. راجع المبيعات للعملية التجارية.
API والتكاملات
REST API v1
- عقد OpenAPI 3.0.
- API key auth مع rate limiting حسب المستوى.
- أحداث Webhook:
student.enrolled,payment.received,grade.updated(سجل كامل فيwebhooks.prisma:ProcessedWebhookEvent). - توقيع طلبات HMAC-SHA256، إعادة محاولة بـ exponential backoff.
SSO (Enterprise)
- SAML 2.0 — Okta، Azure AD، OneLogin.
- OAuth 2.0 — Google Workspace، Microsoft 365.
- SCIM لتزويد المستخدمين.
اتصالات الطرف الثالث (مبنية أو موصولة)
Stripe + bankak + tap + mobile-money + bank-transfer + cash، Plaid + Dwolla، Resend، Twilio، WhatsApp Evolution API، Google Translate، AWS S3 + CloudFront، Upstash Redis، Sentry، Mapbox + Leaflet، Anthropic + OpenAI + Groq.
نظام التصميم
| الجانب | المواصفة |
|---|---|
| الخط العربي | Rubik |
| الخط الإنجليزي | GeistSans |
| الألوان | OKLCH — أزرق أساسي، كهرماني ثانوي |
| المكونات | shadcn/ui (Radix primitives) |
| السمة | داكن / فاتح عبر next-themes |
| الرسوم البيانية | Recharts + Chart.js |
| الجداول | TanStack Table |
التدويل
| الخاصية | التنفيذ |
|---|---|
| اللغات | ar (افتراضية، RTL) + en (LTR) |
| نمط الرابط | /[lang]/path → /ar/docs, /en/docs |
| القواميس | src/components/internationalization/dictionaries/ — أزواج EN + AR عبر 8 ملفات أعلى مستوى + 16 لكل مجال |
| RTL | تخطيطات ثنائية الاتجاه عبر خصائص منطقية + <DirectionProvider> |
| التخزين | حقل lang وحيد + Google Translate عند الطلب مع تخزين في Translation |
راجع الترجمة لعقد القاموس الكامل.
نهج التطوير
- إيقاع sprints أسبوعي.
- conventional commits، موقَّعة.
- مراجعة الكود بمراجع واحد على الأقل قبل الدمج إلى
main. - استهداف تغطية 80%+ على المسارات الحرجة.
- ميزانيات أداء (Lighthouse ≥ 90).
- 20% من سعة الـsprint للديون التقنية.
هرم الاختبارات
| الطبقة | الحصة | الأداة |
|---|---|---|
| Unit | 70% | Vitest |
| Integration | 20% | Vitest + Supertest |
| E2E | 10% | Playwright (auth، multi-tenant، RBAC، smoke) |
تدفق DB المحلي
عمليات Prisma المدمّرة (db execute, db push --accept-data-loss, migrate reset, DROP TABLE, TRUNCATE) محظورة عبر hooks. استخدم بروتوكول Branch-Before-Touch على Neon للعمليات الخطرة. لا تشغّل pnpm db:seed مباشرة — استخدم دائماً pnpm db:seed:single <name>.
كيف تساهم
- اقرأ ابدأ الآن للإعداد المحلي.
- تصفّح البنية المعمارية والأنماط.
- اختر عنصراً من قائمة "Next" في خارطة الطريق أو افتح issue ميزة.
- اتّبع نمط المرآة + القيود أعلاه.
- منظومة Claude في
.claude/(50 agents، 47 commands، 16 skills) موصولة لتفرض معظم القواعد تلقائياً —pnpm devمعCLAUDE.mdللمشروع كافٍ.
نموذج المساهمة OSS — وكيف يتحوّل الوقت إلى تقدير أو حصة إيراد — في الاقتصاد المشترك.
AGENTS.md حالياً
AGENTS.md.draftفي جذر المستودع، وترقيته إلىAGENTS.mdمتابعة في Roadmap.
انظر أيضاً
- MVP — حالة 14 ملحمة منجزة مع شارات النضج
- Roadmap — الميل الأمامي والرؤية
- البنية المعمارية — تصميم النظام والأنماط
- الأنماط — أعراف الكود
- الترجمة — عقد i18n
- الاقتصاد المشترك — مساهمة OSS ومشاركة القيمة
- نموذج العمل — التسعير، المستويات، توقّعات ARR
- ابدأ الآن — الإعداد المحلي
On This Page
البنيةالحزمة التقنيةمساحة السطحتعدد المستأجرينتخزين بلغة واحدةالأدوارالنطاق الوظيفيالمتطلبات غير الوظيفيةالأداءالأمنقابلية التوسّعإمكانية الوصولالامتثالالقيودمستويات الاشتراكAPI والتكاملاتREST API v1SSO (Enterprise)اتصالات الطرف الثالث (مبنية أو موصولة)نظام التصميمالتدويلنهج التطويرهرم الاختباراتتدفق DB المحليكيف تساهمانظر أيضاً