شكراً لاهتمامك! زاد مشروع مفتوح المصدر (MIT) ومشتقّ من freellmapi لـ Tashfeen Ahmed.
monorepo بـ npm workspaces:
shared/— أنواع TypeScript مشتركة (@zad/shared)server/— Express + better-sqlite3 (الموجّه + الـ API +/v1)client/— React + Vite + Tailwind + shadcn/ui (الواجهة العربية RTL)
npm install
cp .env.example .env
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # ضعه في ENCRYPTION_KEY
npm run dev # الخادم + Vite معاًnpm test -w server # vitest · قاعدة بيانات :memory:
npm run check:auth # كل /api محروس أو معلن عام صراحةًأي تغيير على المنطق لازم تضيف/تحدّث اختبار. كل الاختبارات لازم تعدّي قبل الـ PR.
- TypeScript صارم — مفيش
anyبدون مبرّر. - مفاتيح/أسرار: مشفّرة at-rest، ولا تُرجَّع أبداً من الـ API.
- مفيش IPs داخلية أو أسرار في الكود — استخدم متغيّرات البيئة.
- نصوص الواجهة بالعربية؛ معرّفات الكود وأسماء المزوّدين بالإنجليزية.
- افتح issue للنقاش قبل التغييرات الكبيرة.
- فرع وصفي + رسائل commit واضحة.
- تأكّد إن
npm run buildوnpm test -w serverبيعدّوا.
npm installبيثبّت hook اسمهpre-pushتلقائيًا (عبرpostinstall)، بيشغّلcheck:authوالاختبارات قبل أي دفع. لو ضفت راوت/apiجديد من غيرrequireOwnerالهوك هيقفل الدفع ويقولك تعمل إيه. للتعطيل:git config --unset core.hooksPath.
- صف التغيير و«ليه» في الـ PR.
لو لقيت ثغرة أمنية، متفتحش issue عام — راسل المشرفين مباشرةً أولاً.