Oscar Projects Dashboard

المرجع الشامل لجميع مشاريعك - دليل تعليمي متكامل

7 مشاريع • 6 Firebase • 1 GitHub • الدومين: khccn.com
7
مشاريع نشطة
3
لغات برمجة (HTML/JS/Dart)
6
مشاريع Firebase
5
تطبيقات بخاصية Online
4
تطبيقات PWA قابلة للتثبيت
1
مشروع Flutter (Dart)
🚀
نظرة عامة على جميع المشاريع

خريطة شاملة لمشاريعك السبعة مع المقارنة التقنية بينها

oscarsite
Firebase
بورتفوليو شخصي للمطور مع لوحة تحكم CMS وذكاء اصطناعي (مراجعة أكواد + شات بوت) ولعبة ذاكرة تفاعلية ونظام مصادقة كامل
HTML/CSS/JS Firebase Auth Firestore OpenRouter AI
📁 ملفان رئيسيان 🌐 oscar-2ceea AI
connect4
Firebase
لعبة Connect 4 احترافية بثلاثة أوضاع: محلي، ذكاء اصطناعي بأربع مستويات صعوبة (بعمق بحث 7)، وأونلاين مع مزامنة فورية ودردشة سريعة
HTML/CSS/JS Firestore PWA AI (Negamax)
📁 ملف واحد 328KB 🌐 connect4-76a92 Online
oscarchat
Firebase
تطبيق دردشة فورية آمن يدعم الرسائل النصية والصوتية والصور مع نظام إضافة أصدقاء بالكود وإشعارات فورية وتشفير
HTML/Tailwind CSS Firebase Auth Firestore FCM
📁 ملف + Cloud Functions 🌐 oscarchat-e7903 Online
oscarfarmer
Firebase
لعبة مزرعة احترافية متعددة اللاعبين مع 15 محصول و10 حيوانات و24 مهمة ونظام بناء ودردشة وزيارة مزارع الأصدقاء فوريا
HTML/CSS/JS Canvas Realtime DB PWA
📁 JS منفصل 6700 سطر 🌐 oscarfarmer-41961 Online
pregnancy (وسن)
Firebase
تطبيق تتبع حمل شامل بالتقويمين الميلادي والهجري مع منتدى مجتمعي فوري وتتبع صحة يومي وعداد ركلات ونظام إشعارات
HTML/CSS/JS Firebase Auth Firestore PWA
📁 ملف واحد 4300 سطر 🌐 pregnancy-cf335 Forum
sh-main (Pure Design)
Firebase
متجر إلكتروني لتصاميم رقمية (دعوات، بشارات، معايدات) مع لوحة إدارة للمنتجات والطلبات وأداة مجانية لتوليد بطاقات المعايدة
HTML/CSS/JS Firebase Auth Firestore
📁 4 صفحات HTML 🌐 pure-design-de0f7 Store
OscarSnake
GitHub Pages
لعبة الأفعى الكلاسيكية مبنية بـ Flutter/Dart مع واجهة عربية ولوحة متصدرين وتحكم باللمس والكيبورد وقابلة للتثبيت كـ PWA
Flutter/Dart Material Design CanvasKit PWA
📁 main.dart واحد 🌐 GitHub Flutter

📊 جدول المقارنة التقنية الشامل

المشروع اللغة الاستضافة قاعدة البيانات المصادقة PWA Online Firebase Project ID
oscarsite HTML/JS Firebase Firestore Email + Anonymous - AI Chat oscar-2ceea
connect4 HTML/JS Firebase Firestore - ✅ Multiplayer connect4-76a92
oscarchat HTML/JS/Tailwind Firebase Firestore Email/Password ✅ Chat oscarchat-e7903
oscarfarmer HTML/JS/Canvas Firebase Realtime DB Anonymous ✅ Multiplayer oscarfarmer-41961
pregnancy HTML/JS Firebase Firestore Email + Google ✅ Forum pregnancy-cf335
sh-main HTML/JS Firebase Firestore Email (Admin) - WhatsApp pure-design-de0f7
OscarSnake Dart/Flutter GitHub In-Memory - - GitHub repo

🏗 النمط المعماري المشترك

جميع مشاريعك تتبع نمط Static SPA + Firebase Backend وهذا يعني:

🌐 هيكل الدومينات والاستضافة

💡
الدومين الرئيسي: khccn.com (مُسجل عبر Namecheap)
يتم إضافة subdomain لكل مشروع مثل: snake.khccn.com ثم ربطه بالاستضافة المناسبة
المشروعالدومين المقترحالاستضافةطريقة الربط
oscarsiteoscar.khccn.comFirebase HostingCNAME + Firebase Console
connect4connect4.khccn.comFirebase HostingCNAME + Firebase Console
oscarchatchat.khccn.comFirebase HostingCNAME + Firebase Console
oscarfarmerfarm.khccn.comFirebase HostingCNAME + Firebase Console
pregnancywsn.khccn.comFirebase HostingCNAME + Firebase Console
sh-mainpure-des.comFirebase HostingCNAME (دومين مستقل)
OscarSnakesnake.khccn.comGitHub PagesCNAME file في الريبو
💻
oscarsite - بورتفوليو المطور

موقع شخصي مع لوحة تحكم ومراجعة أكواد بالذكاء الاصطناعي

📂 هيكل الملفات

oscarsite/ ├── public/ -- مجلد الاستضافة (يُرفع لـ Firebase) │ ├── index.html -- الموقع الرئيسي (الواجهة العامة) │ ├── admin.html -- لوحة التحكم (إدارة المشاريع والمقالات) │ ├── oscarlogo.png -- شعار الموقع │ ├── oscarlogo2.png -- شعار بديل │ └── htaccess -- قواعد أمان Apache ├── firebase.json -- إعدادات Firebase Hosting ├── .firebaserc -- معرف المشروع: oscar-2ceea └── .gitignore -- ملفات مُستثناة من Git

🔧 التقنيات المستخدمة

HTML5/CSS3 Vanilla JavaScript Firebase SDK 10.7.1 OpenRouter AI API
المكونالتقنيةالاستخدام
الواجهةVanilla JS + CSSبدون أي إطار عمل - كود خام مباشر
قاعدة البياناتCloud Firestoreتخزين المشاريع والمقالات والإعدادات والمستخدمين
المصادقةFirebase Authتسجيل دخول بالإيميل + وضع مجهول للزوار
الذكاء الاصطناعيOpenRouter APIمراجعة أكواد (3 طلبات/يوم) + شات بوت (5 طلبات/يوم)
نموذج AILlama 3.3 70Bنموذج مجاني مع fallback لنماذج أخرى
الخطوطTajawal + Syne + Space Monoعربي + عناوين إنجليزية + كود
الأيقوناتFont Awesome 6.5.2أيقونات الواجهة

📄 وظيفة كل ملف وارتباطه

الملفالوظيفةيعتمد على
index.html الصفحة الرئيسية: عرض المشاريع والمقالات، مراجعة أكواد AI، شات بوت، لعبة ذاكرة، إحصائيات، تسجيل دخول/تسجيل Firebase (Firestore + Auth) + OpenRouter API
admin.html لوحة التحكم: إضافة/تعديل/حذف المشاريع والمقالات، إدارة الصلاحيات، النسخ الاحتياطي، إدارة المستخدمين Firebase (Firestore + Auth) - يقرأ/يكتب نفس البيانات
firebase.json يحدد مجلد public/ كمجلد الاستضافة ويستثني ملفات معينة -
.firebaserc يربط المجلد المحلي بمشروع Firebase: oscar-2ceea -
💡
العلاقة: index.html و admin.html يتشاركان نفس قاعدة بيانات Firestore. ما يضيفه الأدمن من مشاريع ومقالات يظهر تلقائيا للزوار في الموقع الرئيسي.

⚡ المميزات الرئيسية

🗄️ هيكل Firestore (Collections)

settings/ ← إعدادات الموقع main/ siteName, bio, github, twitter, email projects/ ← المشاريع المعروضة في البورتفوليو {projectId}/ title: string description: string url: string imageUrl: string tags: array order: number ← ترتيب العرض posts/ ← المقالات والتدوينات {postId}/ title, content, createdAt permissions/ ← تحكم بإظهار/إخفاء أقسام الموقع features/ showAI: boolean ← إظهار قسم مراجعة الأكواد showChatbot: boolean showGame: boolean users/ ← المستخدمين المسجلين aiUsage/ ← عدّاد طلبات AI لكل جهاز (بصمة SHA-256) {deviceFingerprint}/ codeReviews: number ← الحد: 3/يوم chatMessages: number ← الحد: 5/يوم date: string ← يُصفَّر كل يوم

⚙️ أوامر سريعة

# رفع oscarsite cd C:\Users\khccn\Desktop\kh\ONLINE\oscarsite firebase deploy # فتح قاعدة البيانات في المتصفح firebase open firestore # إضافة مشروع جديد: افتح admin.html في الموقع المباشر
🎲
connect4 - لعبة أربعة بصف

لعبة Connect 4 بثلاثة أوضاع مع AI أسطوري وأونلاين فوري

📂 هيكل الملفات

connect4/ ├── public/ -- مجلد الاستضافة │ ├── index.html -- التطبيق الكامل (328KB) HTML+CSS+JS │ ├── sw.js -- Service Worker للعمل بدون إنترنت │ ├── manifest.json -- إعدادات PWA (تثبيت كتطبيق) │ ├── icon-192.png -- أيقونة التطبيق صغيرة │ ├── icon-512.png -- أيقونة التطبيق كبيرة │ └── oscarlogo.png -- شعار العلامة ├── firebase.json -- إعدادات Firebase Hosting ├── .firebaserc -- معرف المشروع: connect4-76a92 └── README.md -- توثيق + قواعد الأمان

🎮 أوضاع اللعب الثلاثة

الوضعالوصفالتقنية
محلي (Local) لاعبان على نفس الجهاز يتناوبان JavaScript محلي فقط - بدون إنترنت
ذكاء اصطناعي (AI) 4 مستويات صعوبة - المستوى الأسطوري يبحث بعمق 7 طبقات خوارزمية Negamax + Alpha-Beta Pruning + Opening Book
أونلاين (Online) لعب فوري مع شخص آخر عبر كود الغرفة + دردشة وإيموجي Firestore Real-time Sync + Heartbeat Detection

🚀 كيف يعمل الأونلاين

إنشاء الغرفة (المضيف)

اللاعب الأحمر ينشئ غرفة بكود عشوائي (مثل A1B2C3) ويُخزن في Firestore في games/A1B2C3 مع حالة "waiting"

مشاركة الرابط

يُنسخ رابط يحتوي على الكود: ?room=A1B2C3 ويُرسل للخصم

انضمام الخصم (الأخضر)

يفتح الرابط، يتحقق أن الغرفة بحالة "waiting"، يُحدث الحالة إلى "playing" ويبدأ الاستماع الفوري

مزامنة الحركات

كل حركة تُحدث Firestore فورا (اللوحة + الدور + آخر حركة) والطرف الآخر يستقبلها عبر onSnapshot

كشف انقطاع الاتصال (Heartbeat)

كل 8 ثوان يُرسل نبضة قلب لـ Firestore. إذا غابت لمدة 25 ثانية يُعتبر الخصم منقطعا

🧠 خوارزمية AI الأسطورية

💬
oscarchat - تطبيق الدردشة الفورية

دردشة آمنة فورية مع رسائل نصية وصوتية وصور وإشعارات

📂 هيكل الملفات

oscarchat/ ├── index.html -- التطبيق الكامل (940 سطر) SPA ├── sw.js -- Service Worker (تخزين مؤقت) ├── firebase-messaging-sw.js -- إشعارات Firebase في الخلفية ├── manifest.json -- إعدادات PWA ├── firebase.json -- إعدادات الاستضافة + Functions ├── .firebaserc -- معرف المشروع: oscarchat-e7903 └── functions/ -- Cloud Functions (جاهز لكن فارغ) ├── package.json -- تبعيات Node.js └── index.js -- ملف الدوال (placeholder)

💬 كيف تعمل الدردشة الفورية

إنشاء حساب وكود صداقة

كل مستخدم يحصل على كود رقمي فريد من 5 أرقام يُشاركه مع أصدقائه (بدلا من رقم الجوال)

إضافة صديق

أدخل كود صديقك -> يُرسل طلب صداقة -> الطرف الآخر يقبل أو يرفض

بدء المحادثة

Chat ID = ترتيب أبجدي لـ UID الطرفين مدموجين (مثال: abc123_xyz789)

إرسال الرسائل فوريا

كل رسالة تُخزن في messages_{chatId} وتظهر فورا عند الطرفين عبر onSnapshot

🎤 أنواع الرسائل المدعومة

النوعالوصفالتقنية
💬 نصرسائل نصية عادية مع رد على رسالة سابقةFirestore document
📷 صورةتُضغط إلى 1200px بجودة 85% JPEG ثم تُحفظ كـ Base64Canvas compression + Base64
🎙 صوتتسجيل صوتي عبر MediaRecorder API (MP4 fallback لـ Safari)MediaRecorder + Base64 blob

🔔 نظام الحالات والإشعارات

🌱
oscarfarmer - لعبة المزرعة الأونلاين

لعبة مزرعة احترافية متعددة اللاعبين مع عالم غني ومتكامل

📂 هيكل الملفات

oscarfarmer/ ├── index.html -- واجهة HTML (قوائم، شاشات، HUD) ├── css/ │ └── styles.css -- التصميم كامل (331 سطر) CSS Variables ├── js/ │ ├── firebase-config.js -- إعدادات Firebase (يُحمل أولا) │ └── game.js -- كل منطق اللعبة (6,700+ سطر) ├── docs/ │ └── firebase-rules.json -- قواعد أمان Realtime Database ├── sw.js -- Service Worker v4 (تخزين للعمل offline) ├── manifest.json -- إعدادات PWA (تثبيت كتطبيق) ├── icon-192.png -- أيقونة Android ├── icon-512.png -- أيقونة Splash Screen ├── firebase.json -- إعدادات Hosting + DB rules └── .firebaserc -- معرف المشروع: oscarfarmer-41961
هذا المشروع الوحيد الذي يفصل الكود إلى ملفات منظمة (HTML + CSS + JS). هذا هو النمط الأفضل والأسهل في الصيانة!

🌱 محتوى اللعبة

🌽 الزراعة

15 محصول (قمح، جزر، بطاطس، طماطم...) + 6 أشجار فاكهة + دورة: حرث > زراعة > سقي > انتظار > حصاد

🐮 الحيوانات

10 حيوانات أليفة (دجاج، بقر، حصان، نحل...) + 7 مفترسات (ثعلب، ذئب...) + 4 حراس (كلب، صقر...)

🏗 البناء

10 مباني (سياج، بئر، حظيرة، دفيئة، سوق...) مع تأثيرات خاصة (طاحونة +20 ذهب/يوم)

📜 المهام

24 مهمة عبر 5 فصول قصة + نظام مستشار ذكي يقدم نصائح حسب المستوى

🌐 كيف يعمل الأونلاين (Multiplayer)

ملاحظة مهمة: هذا المشروع الوحيد الذي يستخدم Realtime Database بدلا من Firestore. السبب: سرعة المزامنة أعلى للألعاب الفورية.
🤰
pregnancy (وسن) - تطبيق تتبع الحمل

دليل شامل للحمل مع منتدى مجتمعي وتتبع صحة يومي

📂 هيكل الملفات

pregnancy/ ├── public/ -- مجلد الاستضافة │ ├── index.html -- التطبيق الكامل (4,300+ سطر) SPA │ ├── wasanlogo.png -- شعار التطبيق │ ├── wasanfav.png -- أيقونة المتصفح والـ PWA │ └── mawthoq.png -- شهادة الموثوقية ├── firebase.json -- إعدادات Firebase Hosting ├── .firebaserc -- معرف المشروع: pregnancy-cf335 └── README.md -- توثيق بالعربية

📄 صفحات التطبيق الست

الصفحةالوظيفةالمميزات
🏠 الرئيسيةعرض الأسبوع الحالي والعد التنازليتاريخ الولادة (ميلادي + هجري) + حجم الجنين + تطورات الأسبوع
📅 الأسابيعشبكة 40 أسبوع مقسمة بالأثلاثملاحظات لكل أسبوع + معلومات تفصيلية
📆 التقويمعرض شهري مع المواعيدتحديد مواعيد الطبيب + تمييز تاريخ الولادة
💊 الصحةتتبع يومي شاملماء + فيتامينات + مشي + نوم + وزن + عداد ركلات + عداد انقباضات
📚 المعلوماتقاعدة بيانات طبيةأعراض + علامات خطر + أطعمة آمنة/غير آمنة + تمارين + قائمة تحقق
💬 المنتدىمجتمع نقاش فوريمواضيع + ردود + اقتباس + إشعارات + إبلاغ + إشراف + حفظ

💬 كيف يعمل المنتدى

🔢 التقويم الهجري

💡
ميزة فريدة: التطبيق يحسب تاريخ الولادة المتوقع بالتقويمين الميلادي والهجري باستخدام دوال تحويل مخصصة مبنية داخل الكود (بدون مكتبات خارجية).

🗄️ هيكل Firestore (Collections)

users/ ← بيانات الحمل الخاصة {userId}/ lmpDate: string ← تاريخ آخر دورة شهرية dueDate: string ← تاريخ الولادة المتوقع babyName: string ← اسم الجنين healthLogs: array ← سجلات الصحة اليومية appointments: array ← مواعيد الطبيب kickCounts: object ← عدادات ركلات الجنين profiles/ ← الملفات الشخصية للأعضاء في المنتدى {userId}/ displayName: string ← الاسم الظاهر role: 'user'|'leader'|'admin' postCount: number ← عدد المواضيع joinedAt: timestamp ← تاريخ الانضمام topics/ ← مواضيع المنتدى {topicId}/ title: string (max 200) content: string (max 5000) authorId: string ← uid صاحب الموضوع pinned: boolean ← للمدير فقط viewCount: number replyCount: number lastReplyAt: timestamp replies/ ← sub-collection {replyId}/ body: string (max 4000) authorId: string quotedReplyId: string ← اقتباس رد سابق createdAt: timestamp notifications/ ← إشعارات المنتدى {userId}/ items/ {notifId}/ type: 'reply'|'quote' topicId: string read: boolean reports/ ← البلاغات (يقرأها المدير فقط) userSaves/ ← المواضيع المحفوظة لكل مستخدم

👤 نظام الأدوار (Roles)

الدورالصلاحياتكيف يُعيَّن
user ينشئ مواضيع + يرد + يحفظ + يُبلغ تلقائياً عند إنشاء الحساب
leader كل صلاحيات user + يحذف مواضيع وردود الآخرين المدير يُعيّنه من Firebase Console
admin كل الصلاحيات + يُثبّت مواضيع + يدير الأدوار + يرى البلاغات بريد admin@wsn.khccn.com أو من Firestore مباشرة

⚙️ أوامر الإدارة الشائعة

# رفع التطبيق cd C:\Users\khccn\Desktop\kh\ONLINE\pregnancy firebase deploy # رفع قواعد Firestore فقط firebase deploy --only firestore:rules # تعيين مستخدم كـ admin من Firebase Console: # 1. Firestore > profiles > {uid} > role: "admin" # معرفة uid مستخدم معين: # Firebase Console > Authentication > Users > انسخ UID
🛒
sh-main - متجر Pure Design

متجر تصاميم رقمية مع لوحة إدارة وأداة بطاقات معايدة مجانية

📂 هيكل الملفات

sh-main/ ├── public/ -- مجلد الاستضافة │ ├── index.html -- واجهة المتجر الرئيسية (كتالوج + سلة + شراء) │ ├── admin.html -- لوحة إدارة المنتجات والطلبات │ ├── greeting.html -- أداة مجانية: مُولد بطاقات المعايدة │ ├── 404.html -- صفحة خطأ 404 │ ├── CNAME -- ربط الدومين: pure-des.com │ ├── robots.txt -- إعدادات SEO لمحركات البحث │ ├── google*.html -- تحقق Google Search Console │ ├── fb*.txt -- تحقق Meta/Facebook │ └── *.png / *.jpg -- شعارات + صور المنتجات ├── firebase.json -- إعدادات Firebase Hosting └── .firebaserc -- معرف المشروع: pure-design-de0f7

📄 وظيفة كل صفحة

الصفحةالوظيفةالمميزات
index.html واجهة المتجر العامة كتالوج المنتجات + بحث + تصفية بالفئات + سلة تسوق (localStorage) + طلب عبر WhatsApp + وضع داكن/فاتح
admin.html لوحة إدارة المتجر إضافة/تعديل/حذف منتجات + إظهار/إخفاء + عرض الطلبات + تحديث حالة الطلب
greeting.html أداة بطاقات معايدة مجانية يختار المستخدم قالب + يكتب اسم المُهنأ -> Canvas يولد بطاقة -> تحميل JPG
404.html صفحة خطأ تظهر عند زيارة رابط غير موجود

🛒 فئات المنتجات

👜 متاجر إلكترونية 💻 خدمات رقمية 🎮 ألعاب 💍 دعوات 👶 بشارات 🎁 معايدات
🐍
OscarSnake - لعبة الأفعى بـ Flutter

المشروع الوحيد بـ Flutter/Dart - مُستضاف على GitHub Pages

📂 هيكل الملفات

OscarSnake/ ├── lib/ │ └── main.dart -- كل كود اللعبة (466 سطر) ├── web/ │ ├── index.html -- نقطة دخول الويب (template) │ └── manifest.json -- إعدادات PWA ├── build/web/ -- مُخرج البناء (هذا ما يُرفع) │ ├── index.html -- HTML المُولد │ ├── main.dart.js -- Dart مترجم إلى JavaScript │ ├── flutter.js -- محرك Flutter │ └── canvaskit/ -- محرك الرسومات ├── android/ -- إعدادات Android ├── ios/ -- إعدادات iOS ├── windows/ -- إعدادات Windows Desktop ├── pubspec.yaml -- تبعيات Dart/Flutter ├── pubspec.lock -- نسخ التبعيات المقفلة └── test/ -- اختبارات (placeholder)

🐍 شاشات اللعبة

الشاشةالوظيفةالمميزات
القائمة الرئيسيةإدخال اسم اللاعب + بدء اللعبةلوحة أفضل 3 لاعبين + زر تثبيت PWA
شاشة اللعبلوحة 20x20 (400 مربع) + أفعى + طعامتحكم: أسهم/WASD + سحب على الشاشة + إيقاف مؤقت
شاشة النهايةانتهاء اللعبة عند اصطدام الأفعى بنفسهاخيار إعادة اللعب أو العودة للقائمة

⚙ ميكانيكيات اللعبة

🔧 الفرق عن باقي المشاريع

هذا المشروع مختلف تماما عن الباقي:
- اللغة: Dart بدلا من JavaScript
- الإطار: Flutter بدلا من Vanilla HTML
- البناء: يتطلب أمر بناء (flutter build web) قبل الرفع
- الاستضافة: GitHub Pages بدلا من Firebase
- قاعدة البيانات: لا يوجد - الأرقام محفوظة في الذاكرة فقط
🚀
دليل الرفع والنشر الشامل

كل ما تحتاجه لرفع وتحديث مشاريعك خطوة بخطوة

🔧 المتطلبات الأساسية (مرة واحدة فقط)

تثبيت Node.js

حمل من nodejs.org وثبته. سيُثبت معه أداة npm تلقائيا.

# تأكد من التثبيت: node --version npm --version
تثبيت Firebase CLI
npm install -g firebase-tools
تسجيل الدخول لـ Firebase
firebase login # سيفتح المتصفح لتسجيل الدخول بحساب Google
تثبيت Git

حمل من git-scm.com (مطلوب لـ OscarSnake فقط)

تثبيت Flutter (لـ OscarSnake فقط)

حمل من flutter.dev وأضفه لـ PATH

flutter --version flutter doctor

🔥 رفع مشاريع Firebase (6 مشاريع)

💡
الأوامر متطابقة لجميع مشاريع Firebase الستة. الفرق فقط هو المجلد الذي تفتح منه Terminal.
# === رفع oscarsite === cd C:\Users\khccn\Desktop\kh\ONLINE\oscarsite firebase deploy # === رفع connect4 === cd C:\Users\khccn\Desktop\kh\ONLINE\connect4 firebase deploy # === رفع oscarchat === cd C:\Users\khccn\Desktop\kh\ONLINE\oscarchat firebase deploy # === رفع oscarfarmer === cd C:\Users\khccn\Desktop\kh\ONLINE\oscarfarmer firebase deploy # === رفع pregnancy === cd C:\Users\khccn\Desktop\kh\ONLINE\pregnancy firebase deploy # === رفع sh-main === cd C:\Users\khccn\Desktop\kh\ONLINE\sh-main firebase deploy

أوامر رفع جزئي:

# رفع الاستضافة فقط (بدون قواعد DB) firebase deploy --only hosting # رفع قواعد قاعدة البيانات فقط (oscarfarmer) firebase deploy --only database # رفع Cloud Functions فقط (oscarchat) firebase deploy --only functions # رفع كل شيء firebase deploy

🐙 رفع OscarSnake على GitHub Pages

# 1. ادخل مجلد المشروع cd C:\Users\khccn\Desktop\kh\flutterprojects\OscarSnake # 2. ابنِ نسخة الويب flutter build web --release # 3. انسخ المخرجات أو ارفع مباشرة # الملفات الجاهزة موجودة في: build/web/ # 4. ارفع التغييرات لـ GitHub git add . git commit -m "update build" git push
مهم: تأكد أن إعدادات GitHub Pages في الريبو تشير إلى المجلد الصحيح (root أو /docs أو gh-pages branch)

🌐 ربط الدومين (Namecheap + Firebase)

Firebase Console: إضافة دومين مخصص

افتح Firebase Console > Hosting > Add custom domain وأدخل الدومين المطلوب مثل connect4.khccn.com

Firebase يعطيك سجلات DNS

سيعطيك سجل TXT للتحقق + سجلات A records (عادة عنوانين IP)

Namecheap: أضف سجلات DNS

ادخل Namecheap > Domain List > Manage > Advanced DNS وأضف:

# للتحقق من الملكية: Type: TXT Host: _acme-challenge.connect4 Value: [القيمة من Firebase] # لتوجيه الدومين: Type: A Host: connect4 Value: 151.101.1.195 Type: A Host: connect4 Value: 151.101.65.195
انتظر انتشار DNS (5 دقائق - 48 ساعة)

Firebase سيُصدر شهادة SSL تلقائيا بعد التحقق

ربط GitHub Pages بـ Subdomain:

في الريبو: أنشئ ملف CNAME

ملف باسم CNAME في جذر الريبو يحتوي فقط على: snake.khccn.com

في Namecheap: أضف سجل CNAME
Type: CNAME Host: snake Value: username.github.io

🛠️ أوامر Firebase CLI المتقدمة

# === تشخيص وحالة === firebase --version # تحقق من إصدار CLI firebase projects:list # اعرض جميع مشاريع Firebase firebase use # اعرض المشروع النشط حالياً firebase use pregnancy-cf335 # غيّر للمشروع المطلوب # === رفع انتقائي (الأكثر استخداماً) === firebase deploy --only hosting # HTML/CSS/JS فقط firebase deploy --only firestore:rules # قواعد Firestore فقط firebase deploy --only database # قواعد Realtime DB (oscarfarmer) firebase deploy --only functions # Cloud Functions فقط firebase deploy --only hosting,firestore:rules # اثنان معاً # === معاينة قبل الرفع === firebase hosting:channel:deploy preview # رابط مؤقت للمعاينة (لا يؤثر على الإنتاج) firebase hosting:channel:list # اعرض قنوات المعاينة # === التراجع عن رفع === firebase hosting:releases:list # اعرض آخر 10 إصدارات firebase hosting:rollback # تراجع للإصدار السابق # === السجلات والمراقبة === firebase functions:log # اقرأ لوجات Cloud Functions firebase functions:log --limit 50 # آخر 50 سجل # === فتح Firebase Console في المتصفح === firebase open hosting:site # افتح الموقع firebase open database # افتح Realtime Database firebase open firestore # افتح Firestore firebase open auth # افتح Authentication

🧪 Firebase Emulators (اختبار محلي)

💡
ما هي؟ تُشغّل Firebase محلياً على جهازك — بدون الاتصال بالخادم الحقيقي. مثالية للتطوير: تجرب التغييرات بأمان بدون المساس ببيانات المستخدمين الحقيقيين.
# تشغيل جميع المحاكيات firebase emulators:start # محاكي Firestore فقط (على localhost:8080) firebase emulators:start --only firestore # محاكي Realtime Database فقط (على localhost:9000) firebase emulators:start --only database # الاستضافة + Firestore + Auth معاً firebase emulators:start --only hosting,firestore,auth # في كودك: وجّه SDK للمحاكي بدل الإنتاج: // connectFirestoreEmulator(db, 'localhost', 8080); // connectAuthEmulator(auth, 'http://localhost:9099');

📋 جدول أوامر الرفع لكل مشروع

المشروعالأمر الكاململاحظة
oscarsite cd ONLINE\oscarsite && firebase deploy يرفع Hosting + Firestore Rules
connect4 cd ONLINE\connect4 && firebase deploy تذكر: غيّر رقم sw.js قبل الرفع
oscarchat cd ONLINE\oscarchat && firebase deploy يرفع Hosting + Functions
oscarfarmer cd ONLINE\oscarfarmer && firebase deploy يرفع Hosting + Realtime DB Rules
pregnancy cd ONLINE\pregnancy && firebase deploy يرفع Hosting + Firestore Rules
sh-main cd ONLINE\sh-main && firebase deploy يرفع Hosting + Firestore Rules
OscarSnake flutter build web && git add . && git commit -m "update" && git push يبني أولاً ثم يرفع لـ GitHub

🚀 رفع موقع جديد من الصفر (Firebase Init)

💡
هذه الخطوات لمشروع جديد كلياً لم تُعدّ له Firebase بعد. للمشاريع الحالية (oscarsite وغيرها) استخدم firebase deploy مباشرة.
الخطوة 1: جمّع ملفاتك في مجلد

اجمع الملفات التالية في مجلد على سطح المكتب: html - admin - picture and logo

الخطوة 2: افتح Terminal في المجلد

اذهب لشريط العنوان في المجلد، اكتب cmd ثم اضغط Enter.

الخطوة 3: ثبّت Firebase CLI وسجّل الدخول
npm install -g firebase-tools firebase login # سيفتح المتصفح لتسجيل الدخول بحساب Google
الخطوة 4: هيّئ المشروع (Firebase Init)
firebase init # ستظهر أسئلة — الإجابات: # هل أنت جاهز؟ → y ثم Enter # اختر: Hosting: Configure files for Firebase Hosting # اختر: Use an existing project → حدد مشروعك في Firebase # مجلد الملفات (public) → اضغط Enter (الافتراضي) # Single-page app? → No (لصفحات منفصلة) أو Yes (لموقع SPA) # Set up automatic GitHub deploys? → No # Use Agent? → N
الخطوة 5: انقل الملفات لمجلد public ثم ارفع

انقل جميع ملفاتك (html - admin - صور - شعار) إلى المجلد الجديد public، ثم:

firebase deploy

🔐 إعداد Authentication و Firestore بعد إنشاء المشروع

1. تفعيل Authentication

من القائمة الجانبية في Firebase Console:

Build → Authentication → Get started # تبويب Sign-in method → Email/Password → فعّله → Save
2. تفعيل Firestore Database
Build → Firestore Database → Create database # اختر: Start in production mode # اختر: أقرب موقع جغرافي → Done
3. ضبط Security Rules (مهم جداً!)

في Firestore → تبويب Rules → الصق القواعد التالية:

rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { // المستخدم يستطيع قراءة/كتابة بياناته فقط allow read, write: if request.auth != null && request.auth.uid == userId; // السماح بإنشاء الحساب عند التسجيل allow create: if request.auth != null; } } }
4. إضافة النطاقات المسموحة (Authorized Domains)
Authentication → Settings → Authorized domains # أضف نطاق موقعك: # localhost → للاختبار المحلي # yoursite.web.app → النطاق الافتراضي لـ Firebase # yourname.khccn.com → نطاقك المخصص

📱 تحويل موقعك لتطبيق أندرويد (Capacitor)

⚠️
يحتاج هذا: Node.js + Android Studio (محمّل من موقع Google مجاناً)
الخطوة 1: أنشئ مجلداً وضع فيه index.html

أنشئ مجلداً جديداً (مثل OscarApp) وضع فيه ملف index.html الخاص باللعبة أو الموقع.

الخطوة 2: افتح Terminal في المجلد وشغّل الأوامر
# تهيئة المشروع npm init -y # تثبيت أداة Capacitor npm install @capacitor/core @capacitor/cli # تهيئة التطبيق (سيسألك عن الاسم والـ ID) npx cap init # App name: اكتب اسم التطبيق (مثل: Oscar App) # App ID: com.yourname.appname (للجوجل بلاي)
الخطوة 3: أنشئ مجلد www وانقل فيه index.html

أنشئ مجلداً باسم www داخل مجلد مشروعك، ثم انقل index.html إليه.

الخطوة 4: أضف منصة أندرويد ونفّذ البناء
npm install @capacitor/android # إضافة منصة أندرويد npx cap add android # إذا ظهرت رسالة أن المجلد موجود، استخدم: npx cap sync android # نسخ الملفات لمجلد أندرويد npx cap copy # فتح المشروع في Android Studio npx cap open android
الخطوة 5: في Android Studio — استخراج ملف APK
  1. انتظر حتى يكتمل تحميل Gradle (الشريط في الأسفل)
  2. من القائمة العلوية: Build → Build Bundle(s) / APK(s) → Build APK(s)
  3. عند انتهاء البناء، اضغط Locate في الإشعار لإيجاد ملف APK
  4. أرسل الملف لأصدقائك أو ارفعه لمتجر Google Play!
تحديث التطبيق بعد تعديل الكود
npx cap sync android npx cap open android # ثم أكمل إجراءات الـ Build من Android Studio

🔄 تحديث Service Worker بعد الرفع

🚨
مشكلة شائعة: بعد الرفع، المستخدمون يرون النسخة القديمة لأن Service Worker يُخدم من الكاش! الحل: غير رقم الإصدار في sw.js قبل كل رفع.
// في sw.js - غير رقم الإصدار: const CACHE = 'oscar-v6'; // غيره إلى v7 عند التحديث // المشاريع التي تحتاج هذا التغيير: // connect4/public/sw.js (حاليا v6) // oscarfarmer/sw.js (حاليا v4) // oscarchat/sw.js (حاليا v2)
🚧
المشاكل المتوقعة والحلول

أكثر المشاكل شيوعا وكيف تتعامل معها

🔴 "firebase: command not found" عند محاولة الرفع

السبب: Firebase CLI غير مثبت أو غير مُضاف لـ PATH

# الحل: أعد التثبيت npm install -g firebase-tools # تأكد من التثبيت: firebase --version
🔴 "Error: No project active" أو "Firebase project not found"

السبب: أنت في مجلد خاطئ أو ملف .firebaserc مفقود أو تالف

# الحل 1: تأكد أنك في المجلد الصحيح cd C:\Users\khccn\Desktop\kh\ONLINE\oscarsite # الحل 2: أعد الربط بالمشروع firebase use oscar-2ceea # أو بشكل تفاعلي: firebase use --add
🔴 الموقع يعرض نسخة قديمة بعد الرفع

السبب: Service Worker يُخدم الملفات من الكاش القديم

الحل:

  • غير رقم إصدار الكاش في sw.js (مثلا v6 -> v7) قبل الرفع
  • أو: في المتصفح اضغط Ctrl+Shift+Delete لحذف الكاش
  • أو: افتح DevTools > Application > Service Workers > Unregister
🔴 خطأ CORS أو "Access Denied" عند استخدام Firebase

السبب: قواعد أمان Firestore/Realtime DB تمنع القراءة أو الكتابة

// الحل المؤقت للتطوير (Firestore): rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } } // تحذير: هذا للتطوير فقط! في الإنتاج استخدم قواعد أمان صحيحة
🔴 "flutter: command not found" عند بناء OscarSnake

السبب: Flutter غير مثبت أو غير مُضاف لـ PATH

# تأكد من وجود Flutter: flutter doctor # إذا لم يُعرف الأمر، أضف Flutter لـ PATH: # 1. اذهب لـ: System > Environment Variables > Path # 2. أضف مسار مجلد bin في Flutter SDK
🔴 DNS لا يعمل بعد ربط الدومين

السبب: سجلات DNS تحتاج وقت للانتشار (5 دقائق إلى 48 ساعة)

الحل:

  • انتظر 15-30 دقيقة على الأقل
  • تأكد من صحة السجلات في Namecheap (لا مسافات زائدة)
  • استخدم nslookup connect4.khccn.com للتحقق
  • جرب ipconfig /flushdns على جهازك
🔴 حجم الملف كبير جدا (index.html 300+ KB)

المشاريع المتأثرة: connect4 (328KB), pregnancy (4300 سطر), oscarfarmer (6700 سطر في game.js)

الحلول:

  • فصل الملفات: مثل ما فعل oscarfarmer (HTML + CSS + JS منفصلين) - هذا هو النمط الأفضل
  • ضغط الكود: استخدم أداة مثل terser أو cssnano لتصغير الملفات
  • Firebase Hosting: يضغط الملفات تلقائيا بـ GZIP عند الإرسال
🔴 مفاتيح API ظاهرة في الكود المصدري

المشاريع المتأثرة: جميع مشاريع Firebase + oscarsite (OpenRouter API Key)

التوضيح:

  • مفاتيح Firebase: هذا طبيعي وآمن! مفاتيح Firebase العامة مصممة لتكون في الـ Frontend. الحماية تتم عبر Security Rules في Firebase Console
  • مفتاح OpenRouter: هذا أكثر حساسية. الأفضل نقله لـ Cloud Function حتى لا يظهر في الكود

✅ أفضل الممارسات والاقتراحات

الاقتراحالأولويةالتفاصيل
فصل HTML/CSS/JS عالية مثل oscarfarmer - يسهل الصيانة والتطوير بشكل كبير. طبقه على connect4 و pregnancy
استخدام Git لكل مشروع عالية أنشئ ريبو Git لكل مشروع لتتبع التغييرات والرجوع لأي نسخة سابقة
قواعد أمان Firestore صحيحة عالية لا تستخدم allow read, write: if true في الإنتاج! حدد من يقرأ ومن يكتب
نقل API Key لـ Cloud Function متوسطة مفتاح OpenRouter في oscarsite يجب نقله لـ Firebase Cloud Function
إضافة GitHub Actions لـ OscarSnake متوسطة أتمتة البناء والنشر: كل push يبني ويرفع تلقائيا
ضغط الصور منخفضة oscarlogo.png في connect4 حجمها 1.7MB! اضغطها أو حولها لـ WebP
إعداد VAPID Key للإشعارات منخفضة oscarchat يحتاج إعداد VAPID Key من Firebase Console لتفعيل Push Notifications
🎓
خطة التعلم لمدة شهر

خطة مُنظمة لفهم واستيعاب كل تقنية مستخدمة في مشاريعك

الأسبوع 1

الأساسيات: HTML/CSS/JS

  • ادرس هيكل index.html في oscarsite (أبسط مشروع)
  • افهم CSS Variables و Flexbox و Grid من styles.css في oscarfarmer
  • تعلم DOM Manipulation من أحداث الأزرار في sh-main
  • افهم localStorage من سلة التسوق في sh-main
  • جرب تعديل بسيط في كل مشروع وارفعه
  • تعلم أمر firebase deploy وافهم firebase.json
الأسبوع 2

Firebase بالتفصيل

  • افهم Firestore: Collections, Documents, Queries من oscarchat
  • تعلم Firebase Auth: Email/Password + Google Sign-In من pregnancy
  • افهم الفرق: Firestore vs Realtime Database (oscarfarmer يستخدم Realtime)
  • ادرس onSnapshot وكيف تعمل المزامنة الفورية في connect4
  • تعلم Security Rules وطبقها على مشروع واحد
  • جرب Firebase Console: اقرأ البيانات وعدلها يدويا
الأسبوع 3

المميزات المتقدمة

  • ادرس PWA: Service Worker + manifest.json من connect4
  • افهم Canvas API من game.js في oscarfarmer
  • تعلم MediaRecorder API (تسجيل صوتي) من oscarchat
  • ادرس AI Integration: كيف يتصل oscarsite بـ OpenRouter API
  • افهم خوارزمية Negamax في AI الـ connect4
  • تعلم Heartbeat pattern لكشف انقطاع الاتصال
الأسبوع 4

Flutter + النشر + التحسين

  • ادرس أساسيات Dart و Flutter من main.dart في OscarSnake
  • افهم StatefulWidget و setState ودورة حياة Widget
  • تعلم flutter build web وكيف يتحول Dart لـ JavaScript
  • اربط دومين فرعي جديد عبر Namecheap + Firebase
  • طبق أفضل الممارسات: فصل الملفات + Git + قواعد أمان
  • أنشئ مشروع صغير جديد يجمع ما تعلمته

🗺 خريطة التقنيات حسب المشروع

كل مشروع يُعلمك تقنيات مختلفة. إليك ما ستتعلمه من كل واحد:

المشروعستتعلم منه
oscarsiteAPI Integration (AI) + Firebase Auth + Admin Panel + Rate Limiting + Device Fingerprinting
connect4Game AI (Negamax) + Real-time Multiplayer + Heartbeat Detection + PWA + CSS Grid Games
oscarchatReal-time Chat + Media Handling (Images/Audio) + Friend System + Push Notifications + Tailwind CSS
oscarfarmerCanvas Rendering + Complex Game State + Visitor Permissions + File Organization + Offline Sync
pregnancyComplex SPA + Forum System + Hijri Calendar + Health Tracking + IndexedDB + Google Auth
sh-mainE-commerce Basics + Cart System + WhatsApp Integration + Admin CRUD + SEO + Dark/Light Theme
OscarSnakeFlutter/Dart + Cross-platform + Material Design + Build Process + GitHub Pages

📚 مصادر تعلم مقترحة

التقنيةالمصدر
HTML/CSS/JSMDN Web Docs (developer.mozilla.org)
Firebasefirebase.google.com/docs
Flutterflutter.dev/learn + Dart: dart.dev/guides
Gitlearngitbranching.js.org (تفاعلي)
PWAweb.dev/progressive-web-apps
Canvas APIdeveloper.mozilla.org/en-US/docs/Web/API/Canvas_API
📖
مسرد المصطلحات التقنية

كل مصطلح تقني مستخدم في مشاريعك بشرح واضح وأمثلة من كودك الفعلي

🔥 Firebase وخدماته

Firebase Firebase
منصة تطوير التطبيقات من Google
خدمة سحابية من Google تجمع في مكان واحد: قاعدة بيانات + مصادقة + استضافة + إشعارات + تحليلات. تعمل كـ Backend كامل بدون الحاجة لخادم خاص.
// مثال من كودك: firebase.initializeApp(firebaseConfig)
Cloud Firestore Firebase
قاعدة البيانات الوثائقية
قاعدة بيانات NoSQL تُخزن البيانات كـ "وثائق" داخل "مجموعات". مثل ملفات JSON منظمة. تدعم الاستماع الفوري (onSnapshot). تستخدمها: oscarsite، connect4، oscarchat، pregnancy، sh-main.
// المسار: collection("topics").doc("abc123")
Realtime Database Firebase
قاعدة البيانات الفورية
قاعدة بيانات JSON بسيطة تُزامن البيانات فورياً. أسرع من Firestore للألعاب. يستخدمها فقط: oscarfarmer. الفرق الرئيسي: Firestore للبيانات المعقدة، Realtime للبيانات الفورية البسيطة.
// المسار: ref("farms/" + farmCode + "/tiles")
Firebase Auth Firebase
نظام المصادقة والتحقق من الهوية
خدمة تدير تسجيل الدخول بطرق متعددة: إيميل/كلمة مرور، Google، مجهول (Anonymous). تعطي كل مستخدم UID فريداً يُستخدم في Security Rules لحماية البيانات.
// auth.currentUser.uid — المعرّف الفريد للمستخدم
onSnapshot Firebase
المستمع الفوري للبيانات
دالة Firestore تفتح "قناة مباشرة" مع قاعدة البيانات. أي تغيير يحدث في Firebase يصل للمتصفح فوراً بدون تحديث. هذا هو سر "الفورية" في connect4 و pregnancy و oscarchat.
// onSnapshot(doc(db,"games","A1B2"), (snap) => { ... })
Security Rules أمان
قواعد أمان قاعدة البيانات
قواعد تحدد من يحق له قراءة وكتابة البيانات. تُكتب في Firebase Console وتُطبق على الخادم. إذا كانت خاطئة: إما أن البيانات مفتوحة للجميع (خطر) أو مغلقة حتى عن المستخدمين الشرعيين (مشكلة).
// allow read: if request.auth != null;
Cloud Functions Firebase
دوال الخادم السحابي
كود JavaScript يعمل على خوادم Google (ليس في المتصفح). يُستخدم لإخفاء مفاتيح API السرية، إرسال إشعارات، معالجة بيانات. موجود في oscarchat لكن فارغ حالياً.
// functions/index.js — يُرفع بأمر: firebase deploy --only functions
Firebase Hosting Firebase
استضافة الملفات الثابتة
خدمة استضافة سريعة تخدم ملفات HTML/CSS/JS على CDN عالمي. مجانية للاستخدام المحدود. تُضيف HTTPS تلقائياً. تُنشر بأمر: firebase deploy --only hosting.
// firebase.json يحدد مجلد public/ كمصدر الاستضافة
Anonymous Auth Firebase
المصادقة المجهولة
Firebase يُنشئ حساباً مؤقتاً بدون بريد أو كلمة مرور. يُعطي المستخدم UID كالعادة لاستخدامه في Security Rules. يستخدمها oscarfarmer ليتيح اللعب الفوري بدون تسجيل.
// signInAnonymously(auth) — يُنشئ uid مؤقتاً
FCM / VAPID Key Firebase
مفتاح الإشعارات الفورية
Firebase Cloud Messaging هو نظام إرسال إشعارات Push للمتصفح والجوال. VAPID Key مفتاح تشفير خاص يُثبت أن الإشعار قادم من تطبيقك. oscarchat يحتاجه لكنه غير مُعَدّ بعد.
// getToken(messaging, {vapidKey: "BNJ..."}) في firebase-messaging-sw.js

🌐 تقنيات الويب

PWA ويب
تطبيق ويب تقدمي (Progressive Web App)
موقع ويب يتصرف كتطبيق جوال: قابل للتثبيت على الشاشة الرئيسية، يعمل offline، له أيقونة وشاشة ترحيب. يتطلب: manifest.json + Service Worker + HTTPS. لديك 4 مشاريع PWA.
// manifest.json يحدد اسم التطبيق، الأيقونة، وألوان السبلاش
Service Worker ويب
العامل الخلفي للمتصفح
ملف JavaScript يعمل في خلفية المتصفح منفصلاً عن الصفحة. يعترض طلبات الشبكة ويُقرر: هل يجلب من الإنترنت أم من الكاش؟ هذا ما يجعل التطبيق يعمل offline.
// sw.js: const CACHE = 'oscar-v6'; — رقم الإصدار للتحديث
SPA ويب
تطبيق صفحة واحدة (Single Page Application)
موقع كامل في ملف HTML واحد. التنقل بين "الصفحات" يتم بإخفاء وإظهار أقسام HTML بدون إعادة تحميل الصفحة. جميع مشاريعك تتبع هذا النمط. مثال: الـ tabs في الداشبورد هذا.
// showSection('connect4') — إظهار/إخفاء div بـ display: none
Vanilla JS ويب
جافاسكريبت الخام بدون أُطر عمل
كتابة JavaScript مباشرة بدون React أو Vue أو Angular. جميع مشاريعك (عدا OscarSnake) تستخدم Vanilla JS. ميزته: لا يحتاج بناء، يُرفع مباشرة. عيبه: يصعب إدارته في المشاريع الكبيرة.
// document.getElementById('btn').onclick = () => { ... }
Canvas API ويب
واجهة رسم الجرافيكس في المتصفح
تقنية HTML5 تتيح رسم أشكال، صور، ورسوم متحركة مباشرة في المتصفح. oscarfarmer يستخدمها لرسم عالم اللعبة كاملاً (مربعات الأرض، الشخصيات، الحيوانات). OscarSnake يستخدم CanvasKit (Flutter).
// ctx.fillRect(x, y, TILE_SIZE, TILE_SIZE) في game.js
localStorage ويب
التخزين المحلي في المتصفح
مساحة تخزين بسيطة داخل المتصفح (5MB). البيانات تبقى حتى بعد إغلاق المتصفح. sh-main يستخدمه لحفظ سلة التسوق. oscarfarmer يستخدمه للحفظ التلقائي offline.
// localStorage.setItem('cart', JSON.stringify(items))
IndexedDB ويب
قاعدة بيانات المتصفح المتقدمة
قاعدة بيانات كاملة داخل المتصفح (مئات MB). أقوى من localStorage، تدعم بيانات معقدة. pregnancy يستخدمها للحفظ الكامل offline عندما لا يوجد إنترنت، ثم تتزامن مع Firebase عند العودة.
// يُستخدم في pregnancy لحفظ بيانات الحمل والمنتدى offline
CDN ويب
شبكة توصيل المحتوى
شبكة خوادم موزعة حول العالم. عند استخدام رابط Tailwind أو Font Awesome من CDN، المستخدم يُحمّل الملف من أقرب خادم إليه. Firebase Hosting نفسه CDN عالمي.
// <link href="https://cdn.tailwindcss.com"> في oscarchat
RTL ويب
الاتجاه من اليمين لليسار
خاصية HTML/CSS للغات العربية. تعكس اتجاه النصوص والعناصر. جميع مشاريعك تستخدمها. يُفعَّل بـ: dir="rtl" في HTML و direction: rtl في CSS.
// <html lang="ar" dir="rtl"> في كل مشاريعك
Base64 ويب
ترميز الملفات كنص
طريقة لتحويل ملفات (صور، صوت) إلى سلسلة نصية يمكن تخزينها في Firestore. oscarchat يحول الصور والصوت إلى Base64 قبل إرسالها. العيب: يزيد الحجم بنسبة 33%.
// canvas.toDataURL('image/jpeg', 0.85) — صورة → Base64

🎮 تقنيات الألعاب والخوارزميات

Negamax لعبة
خوارزمية بحث اللعبة
خوارزمية ذكاء اصطناعي تبحث في جميع الحركات الممكنة وتختار الأفضل. connect4 يستخدمها للمستوى الأسطوري. تبحث بعمق 7 طبقات أمام (7 حركات مستقبلية).
// negamax(board, depth=7, alpha, beta) في index.html
Alpha-Beta Pruning لعبة
تقليم ألفا-بيتا
تحسين لخوارزمية Negamax. يتخطى الفروع التي لن تُغيّر النتيجة. يجعل البحث أسرع بـ 10x مما يُتيح البحث بعمق أعمق في نفس الوقت. ضروري لجعل AI connect4 سريعاً.
// if (score >= beta) return beta; — تخطي الفرع
Transposition Table لعبة
جدول حفظ الأوضاع المُقيَّمة
ذاكرة تُخزن الأوضاع التي قيَّمها AI مسبقاً. إذا وصل لنفس الوضع بطريق مختلف، يستخدم النتيجة المحفوظة بدل إعادة الحساب. يسرّع AI connect4 بشكل كبير.
// const ttable = new Map(); — خريطة: وضع → قيمة
Heartbeat Pattern لعبة
نمط نبضة القلب لكشف الانقطاع
كل لاعب يرسل "نبضة" لقاعدة البيانات كل 8 ثوانٍ. إذا لم تصل نبضة لمدة 25 ثانية، نُعلن أن اللاعب غادر. connect4 يستخدمه لكشف انقطاع خصمك عن الإنترنت.
// setInterval(() => updateDoc(gameRef, {lastSeen: Date.now()}), 8000)
IIFE Pattern لعبة
دالة تنفذ نفسها فوراً
نمط برمجي يُغلف الكود داخل دالة لتجنب تلوث المتغيرات العامة. oscarfarmer يستخدمه في game.js لعزل كل كود اللعبة (6700 سطر) في نطاق خاص.
// (function() { /* كل كود اللعبة */ })();
Wake Lock API ويب
منع الشاشة من الإطفاء
واجهة برمجية تمنع شاشة الجوال من الإطفاء التلقائي. pregnancy يستخدمها في عداد الانقباضات حتى لا تنطفئ الشاشة أثناء الولادة.
// navigator.wakeLock.request('screen') في pregnancy

🔧 أدوات التطوير والنشر

Node.js / npm أداة
بيئة تشغيل JavaScript خارج المتصفح
Node.js يُشغّل JavaScript على جهازك (ليس في المتصفح). npm هو مدير الحزم الذي يثبت الأدوات مثل firebase-tools. مطلوبان لتشغيل أمر firebase deploy.
// npm install -g firebase-tools — تثبيت Firebase CLI
Firebase CLI أداة
أداة سطر الأوامر لـ Firebase
برنامج تكتب فيه أوامر للتحكم في Firebase من Terminal. أهم الأوامر: firebase deploy (رفع)، firebase login (دخول)، firebase use (اختيار مشروع).
// firebase deploy --only hosting,firestore:rules
Git / GitHub أداة
نظام التحكم بالإصدارات
Git يتتبع التغييرات في الكود ويسمح بالرجوع لأي نقطة. GitHub موقع لحفظ الريبو على الإنترنت. OscarSnake يُستضاف على GitHub Pages (استضافة مجانية من GitHub).
// git add . && git commit -m "رسالة" && git push
Flutter / Dart أداة
إطار تطوير متعدد المنصات
Flutter إطار عمل من Google لبناء تطبيقات للجوال والويب وسطح المكتب من كود واحد. Dart لغة البرمجة الخاصة به. يختلف كلياً عن JavaScript — يحتاج خطوة بناء قبل الرفع.
// flutter build web --release → ينتج build/web/
GitHub Pages أداة
استضافة مجانية من GitHub
خدمة استضافة مجانية لملفات HTML/CSS/JS مباشرة من ريبو GitHub. OscarSnake هو مشروعك الوحيد المستضاف هنا. يختلف عن Firebase Hosting: لا يدعم rewrites أو Cloud Functions.
// ملف CNAME في الريبو يربطه بـ snake.khccn.com
Tailwind CSS أداة
إطار تصميم بالفئات المُعدّة مسبقاً
مكتبة CSS تُوفر آلاف الفئات الجاهزة للتصميم بدل كتابة CSS من الصفر. oscarchat هو مشروعك الوحيد الذي يستخدمه (من CDN). الباقي يستخدم CSS مكتوباً يدوياً.
// class="flex items-center gap-4 p-3 rounded-xl" في oscarchat

🌍 الشبكة والدومينات

DNS / CNAME / A Record شبكة
نظام أسماء النطاقات
DNS يُترجم اسم الدومين (connect4.khccn.com) إلى عنوان IP. CNAME سجل يُوجّه subdomain لدومين آخر. A Record سجل يُوجّه مباشرة لـ IP. Namecheap هو المكان الذي تُضيف فيه هذه السجلات.
// CNAME: snake → ikhaledccn.github.io
HTTPS / SSL أمان
بروتوكول الاتصال الآمن المشفر
تشفير البيانات بين المتصفح والخادم. الرمز 🔒 في شريط العنوان. Firebase Hosting يُضيفه مجاناً تلقائياً. مطلوب لـ PWA و Service Worker و Firebase Auth.
// Firebase Hosting يُصدر شهادة SSL تلقائياً بعد ربط الدومين
CORS أمان
مشاركة الموارد عبر الأصول
حماية المتصفح من طلبات غير مصرح بها بين دومينات مختلفة. إذا ظهر خطأ CORS في oscarsite عند استدعاء OpenRouter API، يعني أن الخادم لا يسمح للدومين بالوصول.
// الحل: Cloud Function تتوسط الطلب بدل إرساله من المتصفح مباشرة
OpenRouter API ويب
بوابة للوصول لنماذج الذكاء الاصطناعي
خدمة توفر وصولاً موحداً لنماذج AI مختلفة (GPT، Llama، Claude...). oscarsite يستخدمها للوصول لـ Llama 3.3 70B مجاناً لمراجعة الأكواد والشات بوت.
// fetch("https://openrouter.ai/api/v1/chat/completions")

📁 قاموس الملفات والمجلدات القياسية

المسميات الشائعة في أغلب مشاريع البرمجة (Python، JavaScript، Java، تطبيقات الجوال والمواقع) — احتفظ بهذا كمرجع دائم.

1️⃣ ملفات الجذر (Root Files) — أساس المشروع

.gitignore أداة
ملف استثناءات Git
ملف نصي نخفي فيه أسماء الملفات التي لا نريد رفعها إلى GitHub مثل كلمات المرور أو المجلدات الثقيلة (node_modules).
node_modules/ .env build/
.env أمان
ملف البيئة (Environment)
نضع فيه المعلومات السرية جداً مثل كلمات المرور وروابط قواعد البيانات ومفاتيح API. هذا الملف لا يُرفع أبداً للإنترنت لحماية المشروع.
API_KEY=your_secret_key DB_URL=https://...
README.md أداة
واجهة المشروع
ملف نصي نكتب فيه شرحاً للمشروع وكيفية تثبيته واستخدامه ليقرأه المبرمجون الآخرون. يظهر تلقائياً في صفحة GitHub.
## اسم المشروع وصف مختصر... ## التثبيت: npm install
package.json / requirements.txt أداة
ملف الاعتماديات (Dependencies)
يسجّل المكتبات الخارجية التي يحتاجها المشروع ليعمل. يختلف الاسم حسب اللغة: Node.js/React → package.json | Python → requirements.txt | PHP → composer.json | Java → pom.xml
// package.json في مشاريع Firebase "dependencies": { "firebase": "^10.0.0" }

2️⃣ مجلدات الأكواد الأساسية (Source & Logic)

src / source ويب
مجلد المصدر
هو المجلد الأهم في أي مشروع. يحتوي على الكود البرمجي الأساسي الذي تكتبه بيدك. كل الأكواد الرئيسية تُوضع هنا.
src/ ├── main.js └── app.html
lib / core ويب
مجلد المكتبات الأساسية
نضع فيه الأكواد أو الأدوات الأساسية والمشتركة التي يعتمد عليها برنامجك وتعمل في الخلفية.
lib/ ├── firebase.js └── auth.js
utils / helpers ويب
مجلد الأدوات المساعدة
يحتوي على دوال (Functions) صغيرة نستخدمها بكثرة في أكثر من مكان مثل كود يحسب التاريخ أو كود ينظم شكل الأرقام.
utils/ ├── formatDate.js └── calcScore.js
components ويب
مجلد المكونات
يستخدم بكثرة في واجهات المستخدم (UI). فيه يتم تقسيم الواجهة إلى قطع صغيرة مثل: زر، بطاقة، قائمة علوية لإعادة استخدامها.
components/ ├── Button.js ├── Card.js └── Navbar.js

3️⃣ مجلدات الموارد والواجهات (Assets & UI)

public / static ويب
مجلد الملفات العامة والثابتة
يحتوي على الملفات التي لا يتدخل فيها الكود البرمجي وتُعرض للمستخدم كما هي مثل صفحة HTML الرئيسية. في Firebase يُستضاف هذا المجلد.
public/ ├── index.html └── favicon.ico
assets / resources ويب
مجلد الموارد
يحتوي على الصور (images)، الخطوط (fonts)، الأيقونات (icons)، وأي ملفات وسائط يحتاجها التصميم.
assets/ ├── images/ ├── fonts/ └── icons/
views / pages ويب
مجلد الصفحات
يحتوي على الصفحات الكاملة التي يراها المستخدم مثل صفحة "اتصل بنا" أو "الصفحة الرئيسية".
pages/ ├── home.html ├── about.html └── contact.html

4️⃣ مجلدات قواعد البيانات والاتصال (Backend & Data)

api / services Firebase
مجلد الخدمات
يحتوي على الأكواد المسؤولة عن الاتصال بالإنترنت أو جلب البيانات من الخوادم (Servers). في Firebase يُسمى أحياناً functions/.
api/ ├── firestore.js └── auth.js
config / settings أداة
مجلد الإعدادات
يحتوي على ملفات ضبط المشروع مثل إعدادات الاتصال بقاعدة البيانات أو إعدادات اللغات. في Firebase: firebase.json و .firebaserc.
config/ ├── firebase.js └── constants.js
models Firebase
مجلد النماذج
يحتوي على شكل هيكل البيانات. مثلاً: نموذج "المستخدم" يحتوي على اسم، عمر، وبريد إلكتروني. في Firestore يُمثّل هيكل المجموعات والوثائق.
// نموذج مستخدم في Firestore { uid, name, email, role }
controllers ويب
مجلد المتحكمات
العقل المدبر الذي يربط بين شكل البيانات (models) والواجهة (views). يستقبل طلب المستخدم وينفذه. في مشاريعك يُكتب مدمجاً داخل HTML مع JavaScript.
controllers/ └── gameController.js

5️⃣ مجلدات البناء والاختبار (Build & Testing)

tests / __tests__ أداة
مجلد الاختبارات
يحتوي على أكواد وهمية تقوم بتجربة برنامجك تلقائياً للتأكد من أنه يعمل بشكل صحيح قبل نشره.
tests/ └── game.test.js
build / dist / out أداة
مجلد المخرجات النهائية
عندما تطلب من النظام "تجهيز" المشروع للنشر النهائي، يضغط كل أكوادك ويضعها هنا ليكون جاهزاً للرفع. في Flutter: build/web/
// في OscarSnake: flutter build web → build/web/
docs أداة
مجلد التوثيق
يحتوي على ملفات تشرح تفاصيل المشروع العميقة للمطورين الآخرين الذين سيعملون معك مستقبلاً.
docs/ ├── api.md └── setup.md
🔒
قواعد الأمان — Security Rules

شرح مفصل لقواعد أمان كل مشروع مع تفسير كل سطر

🧠 ما هي Security Rules وكيف تعمل؟

قواعد الأمان هي "حارس البوابة" لقاعدة بياناتك. كل طلب قراءة/كتابة يمر عليها قبل التنفيذ. تُكتب في Firebase Console وتعمل على الخادم — المستخدم لا يستطيع التحايل عليها حتى لو عدّل الكود في متصفحه.

⚠️
قاعدة ذهبية: إذا لم يكن هناك قاعدة تسمح بشيء، فهو ممنوع تلقائياً. Firebase يرفض كل ما ليس مسموحاً صراحةً.

🤰 قواعد pregnancy (وسن) — الأكثر تفصيلاً

هذه القواعد تحمي: بيانات الحمل الخاصة + المنتدى + الإشعارات + نظام الأدوار.

1. دوال المساعدة (Helper Functions)

function isAuthed() { return request.auth != null; } // هل المستخدم مسجل دخوله؟ (بأي طريقة: إيميل أو Google) function isSelf(userId) { return isAuthed() && request.auth.uid == userId; } // هل معرّف المستخدم الحالي = userId المطلوب؟ (يحمي بيانات كل شخص عن الآخر) function isAdmin() { return isAdminEmail() || (isAuthed() && get(/profiles/$(request.auth.uid)).data.role == 'admin'); } // المدير = إما بريد admin@wsn.khccn.com أو من حُدِّد دوره admin في Firestore
لماذا دوال مساعدة؟ لتجنب تكرار نفس الكود في كل قاعدة. بدلاً من كتابة request.auth != null في كل مكان، تكتب isAuthed().

2. قواعد المجموعات الرئيسية

// بيانات الحمل الخاصة — فقط صاحبها يقرأ ويكتب match /users/{userId} { allow read, write: if isSelf(userId); } // الملفات الشخصية — أي عضو يقرأ، لكن الكتابة محدودة match /profiles/{userId} { allow read: if isAuthed(); allow create: if isSelf(userId) && (request.resource.data.role == 'user' || isAdmin()); allow update: if (isSelf(userId) && request.resource.data.role == resource.data.role) || isAdmin(); allow delete: if isAdmin(); }
profiles القاعدة الذكية:
القراءة: أي عضو مسجل يقرأ (لعرض أسماء الكتّاب في المنتدى)
الإنشاء: الشخص ينشئ ملفه فقط، ولا يستطيع تعيين نفسه admin
التحديث: يغيّر اسمه فقط بدون رفع دوره، أو المدير يغيّر أي شيء
الحذف: المدير فقط

3. قواعد المنتدى (topics + replies)

match /topics/{topicId} { allow read: if isAuthed(); allow create: if isAuthed() && request.resource.data.authorId == request.auth.uid // UID صحيح && request.resource.data.title.size() > 0 && request.resource.data.title.size() <= 200; // حد الطول // أي مسجل يزيد عدادات المشاهدات والردود فقط allow update: if isAuthed() && ( (resource.data.authorId == request.auth.uid && ...) || isAdmin() || request.resource.data.diff(resource.data).affectedKeys() .hasOnly(['viewCount','replyCount','lastReplyAt']) ); }
القيد الذكي في update: المستخدم العادي يستطيع فقط تحديث viewCount وreplyCount وlastReplyAt. هذا يمنع أي شخص من تغيير محتوى موضوع شخص آخر، لكن يسمح بتحديث العدادات تلقائياً.

🎮 قواعد connect4 — بسيطة ومرنة

match /games/{gameId} { allow read: if true; // أي شخص يقرأ (مطلوب للانضمام بالكود) allow create: if request.resource.data.keys().hasAll(['board', 'turn', 'status', 'moves']) && request.resource.data.status in ['waiting', 'playing'] && gameId.size() >= 4 && gameId.size() <= 8 // طول الكود 4-8 && request.resource.data.moves == 0; // لا حركات عند البداية allow update: if request.resource.data.diff(resource.data).affectedKeys() .hasOnly(['board','turn','status','winner', 'lastMove','moves','emoji','chat','lastSeen']) && (resource.data.status in ['waiting','playing','finished']) && request.resource.data.moves >= resource.data.moves; // لا تراجع في الحركات }
استراتيجية connect4: القراءة مفتوحة للجميع (بدون مصادقة) لأن اللعبة لا تتطلب حساباً. الحماية تأتي من التحقق من البيانات نفسها: كود الغرفة بطول محدد، عدد الحركات لا ينقص، الحقول المسموح تعديلها محددة.

🌾 قواعد oscarfarmer — Realtime Database

تختلف عن Firestore: تستخدم JSON مباشرة بدلاً من rules_version = '2'

{ "rules": { "farms": { "$code": { ".read": true, // أي شخص يقرأ المزرعة (للزوار) ".write": "auth != null", // يكتب فقط المسجلون "chat": { "$mid": { ".write": "auth != null", ".validate": "newData.hasChildren(['author','text','time'])" // رسالة الدردشة يجب أن تحتوي هذه الحقول الثلاثة } } } }, "leaderboard": { ".read": true, "$code": { ".write": "auth != null" } } } }
ملاحظة مهمة: قواعد oscarfarmer بسيطة — أي مستخدم مسجل (حتى Anonymous) يكتب. الحماية الحقيقية تأتي من منطق التطبيق في game.js (الـ IIFE) وليس من القواعد. هذا مقبول للألعاب لكن ليس للبيانات الحساسة.

💬 قواعد oscarchat — أبسط قاعدة

match /{document=**} { allow read, write: if request.auth != null; }
المعنى: أي مستخدم مسجل (بالإيميل) يقرأ ويكتب أي شيء. هذا كافٍ لأن oscarchat يتطلب تسجيل دخول للوصول. التحسين المقترح: إضافة قيود أكثر (مثل: المستخدم يكتب فقط في محادثاته) للأمان الأفضل.

📋 مقارنة قواعد جميع المشاريع

المشروعنوع القواعدالمصادقة المطلوبةمستوى الأمان
pregnancyFirestore Rules v2Email + Googleعالي جداً ✅
connect4Firestore Rules v2لا يوجدمناسب للعبة ✅
oscarchatFirestore Rules v2Emailمتوسط ⚠️
oscarfarmerRealtime DB RulesAnonymousمقبول للعبة ⚠️
oscarsiteFirestore Rules v2Email + Anonymousجيد ✅
sh-mainFirestore Rules v2Email (Admin)يحتاج مراجعة ⚠️
💡
مقترحات التطوير المستقبلية

أفكار مدروسة لتطوير مشاريعك — كل مقترح مع خطوات تنفيذه التفصيلية

📌
كيف تستخدم هذا القسم: هذه المقترحات مرتبة حسب الأولوية. لا تُنفّذ أي مقترح قبل أن تفهم المشروع المرتبط به جيداً. اقرأ الخطوات وناقشها مع Claude قبل البدء.

🔴 أولوية عالية — مشاكل يجب حلها

🔑

نقل مفتاح OpenRouter لـ Cloud Function

مفتاح AI في oscarsite ظاهر في الكود المصدري — أي شخص يفتح DevTools يراه ويستخدمه. نقله لـ Cloud Function يخفيه تماماً.
  • افتح مجلد oscarsite/functions/ وأنشئ index.js
  • اكتب Cloud Function تستقبل النص وترسله لـ OpenRouter
  • احفظ المفتاح في Firebase Environment Variables
  • عدّل oscarsite/index.html ليستدعي Function بدل OpenRouter مباشرة
  • انشر: firebase deploy --only functions
📦

إضافة Git لجميع المشاريع

حالياً لا يوجد Git في معظم مشاريعك. بدونه إذا حذفت ملفاً بالخطأ أو أفسدت الكود لا يمكن الرجوع لنسخة سابقة.
  • افتح Terminal في مجلد كل مشروع
  • شغّل: git init && git add . && git commit -m "النسخة الأولى"
  • أنشئ ريبو خاص في GitHub (private)
  • اربط: git remote add origin [رابط الريبو]
  • ارفع: git push -u origin main
  • الآن بعد كل تعديل: git add . && git commit -m "وصف التغيير" && git push
🖼️

ضغط الصور الكبيرة

oscarlogo.png في connect4 حجمها 1.7MB! هذا يبطئ تحميل الموقع بشكل كبير خاصة على شبكات الجوال.
  • افتح موقع squoosh.app أو tinypng.com
  • ارفع الصورة واضغطها إلى WebP بجودة 80%
  • الهدف: أقل من 100KB لكل صورة
  • استبدل الملفات في المشاريع
  • المشاريع المتأثرة: connect4، oscarsite، oscarfarmer

🟡 أولوية متوسطة — تحسينات مهمة

🔔

تفعيل Push Notifications في oscarchat

الكود جاهز والملفات موجودة (firebase-messaging-sw.js) لكن تحتاج إعداد VAPID Key لتفعيل الإشعارات عند وصول رسالة حتى لو كان التطبيق مغلقاً.
  • افتح Firebase Console > Project Settings > Cloud Messaging
  • أنشئ Web Push Certificate — انسخ الـ VAPID Key
  • في oscarchat/index.html ابحث عن vapidKey وألصق القيمة
  • أضف صلاحية الإشعارات في الكود: Notification.requestPermission()
  • اختبر: أغلق المتصفح وأرسل رسالة من جهاز آخر

GitHub Actions لـ OscarSnake (نشر تلقائي)

حالياً تبني يدوياً وترفع يدوياً. مع GitHub Actions، كل push تلقائياً يُشغّل flutter build web ويرفع النتيجة — بدون أي أوامر يدوية.
  • أنشئ مجلد .github/workflows/ في الريبو
  • أنشئ ملف deploy.yml بالمحتوى المناسب
  • أضف: on: push, jobs: build (flutter build web) + deploy (gh-pages)
  • في GitHub Settings > Actions > اسمح للـ Actions
  • ادفع commit تجريبي وراقب التنفيذ في Actions tab
💳

إضافة بوابة دفع لـ sh-main (Pure Design)

حالياً الطلبات عبر WhatsApp فقط. إضافة Moyasar (بوابة دفع سعودية) يجعل المتجر يستقبل مدفوعات مباشرة بالبطاقة أو Apple Pay أو STC Pay.
  • سجّل في moyasar.com واحصل على مفاتيح API
  • أضف Moyasar SDK في sh-main/index.html
  • أنشئ Cloud Function لمعالجة الدفع بأمان (لا تضع المفتاح في Frontend)
  • أضف صفحة checkout.html للدفع
  • اربط الطلبات بـ Firestore وأضف إشعار للمدير عند كل طلب
🗂️

فصل HTML/CSS/JS في connect4 و pregnancy

connect4 ملف واحد 328KB و pregnancy 4300+ سطر. مثل ما فعل oscarfarmer (الوحيد بملفات منفصلة) — هذا يجعل التعديل والصيانة أسهل بكثير.
  • أنشئ ملف styles.css وانقل إليه كل CSS من <style>
  • أنشئ ملف app.js وانقل إليه كل JavaScript من <script>
  • في HTML أضف: <link rel="stylesheet" href="styles.css">
  • في HTML أضف: <script src="app.js"></script>
  • اختبر أن كل شيء يعمل ثم ارفع
🔒

تحسين قواعد أمان sh-main

sh-main يستخدم قواعد أمان عامة. يجب تحديدها: فقط المدير يكتب المنتجات، وأي شخص يقرأ المنتجات المعروضة فقط.
  • افتح Firebase Console > sh-main project > Firestore > Rules
  • أضف قاعدة: products يقرأها الجميع، يكتبها Admin فقط
  • أضف قاعدة: orders ينشئها الجميع، يقرأها ويعدلها Admin فقط
  • اختبر القواعد في Rules Simulator قبل النشر
  • انشر: firebase deploy --only firestore:rules

🟢 أولوية منخفضة — تحسينات مستقبلية

📊

ربط الداشبورد بـ Firebase (إحصائيات حية)

جعل هذا الداشبورد يتصل بـ Firebase تلقائياً ليعرض: عدد مستخدمي pregnancy الفعليين، عدد غرف connect4 النشطة، عدد محادثات oscarchat.
  • أضف Firebase SDK لهذا الداشبورد
  • اقرأ إحصائيات من Firestore لكل مشروع (يتطلب صلاحيات)
  • اعرضها في بطاقات الإحصائيات بدلاً من الأرقام الثابتة
  • أضف تحديثاً تلقائياً كل دقيقة
🌙

إضافة PWA لـ oscarsite و sh-main

oscarsite و sh-main لا يدعمان التثبيت كتطبيق بعد. إضافة manifest.json + Service Worker بسيط يجعلهما قابلين للتثبيت.
  • أنشئ manifest.json بنفس هيكل connect4
  • أنشئ sw.js بسيط للتخزين المؤقت
  • أضف <link rel="manifest"> في <head>
  • سجّل Service Worker في آخر <script>
  • اختبر في Chrome DevTools > Application > Manifest
🔍

إضافة بحث للمنتدى في pregnancy

المنتدى يفتقر لخاصية البحث. مع نمو المواضيع يصعب إيجاد معلومة محددة. يمكن إضافة بحث بسيط في العنوانين.
  • أضف حقل بحث في رأس صفحة المنتدى
  • عند الكتابة: فلتر المواضيع المُحمَّلة بـ .filter()
  • للبحث الكامل: استخدم Firestore Query مع where("title", ">=", query)
  • أضف تمييز النص المبحوث بالأصفر في النتائج
📱

تطبيق جوال لـ pregnancy بـ Capacitor

pregnancy قابل للتحويل لتطبيق Android/iOS حقيقي بدون إعادة كتابة الكود. Capacitor يُغلف الـ HTML داخل تطبيق جوال مع وصول لميزات الجهاز.
  • ثبّت: npm install @capacitor/core @capacitor/cli
  • شغّل: npx cap init
  • أضف منصة: npx cap add android
  • نسخ الملفات: npx cap copy
  • افتح Android Studio: npx cap open android
  • بنِ وارفع على Google Play
📈

إضافة Firebase Analytics لكل المشاريع

معرفة كم زائراً يأتي لكل مشروع، أي صفحات يزورون، من أي بلد. بيانات تساعد في اتخاذ قرارات تطوير صحيحة.
  • في Firebase Console > Analytics > Enable for each project
  • أضف SDK في كل HTML: import {getAnalytics, logEvent} from "firebase/analytics"
  • سجّل أحداث: logEvent(analytics, 'page_view', {page: 'forum'})
  • اعرض البيانات في Firebase Console > Analytics Dashboard