- نبذة عن المشروع
- المميزات
- التقنيات المستخدمة
- البدء السريع
- هيكل المشروع
- قاعدة البيانات
- API Documentation
- التصميم
- الأمان
- المساهمة
- الترخيص
شفا هي منصة طبية ذكية باللغة العربية تهدف إلى مساعدة المستخدمين في الحصول على معلومات طبية موثوقة وتشخيص مبدئي للأعراض، مع توجيههم للطبيب المناسب. تجمع المنصة بين سهولة الاستخدام والدقة في المعلومات الطبية.
- ✅ واجهة عربية بالكامل - تجربة مستخدم سلسة باللغة العربية
- ✅ تشخيص ذكي - تحليل شامل للأعراض مع توصيات دقيقة
- ✅ مجاني بالكامل - لا يتطلب أي اشتراك أو دفع
- ✅ خصوصية تامة - بياناتك محفوظة وآمنة
- ✅ سهل الاستخدام - تصميم بسيط ومتجاوب
صفحة متكاملة لتحليل الأعراض تشمل:
| الميزة | الوصف |
|---|---|
| إدخال البيانات | العمر، الجنس، قائمة الأعراض، وصف إضافي |
| قائمة الأعراض المنظمة | مقسمة حسب الفئات (عامة، تنفسية، هضمية، إلخ) |
| نتائج شاملة | حالات محتملة مع نسب الاحتمالية |
| معلومات طبية | أسباب، عوامل خطر، طرق تشخيص |
| علاجات | أدوية شائعة + علاجات منزلية |
| توصيات | تغييرات نمط الحياة، علامات الخطر |
محادثة تفاعلية توفر:
- إجابات فورية على الأسئلة الطبية
- معلومات عن الأدوية واستخداماتها
- نصائح صحية وإرشادات
- توجيه للتخصص المناسب
- تحديد الموقع الجغرافي تلقائياً
- فلاتر للتخصصات الطبية
- التكامل مع خرائط جوجل
- إدارة المعلومات الشخصية والطبية
- رفع وتعديل صورة الملف الشخصي
- نظام النقاط والمستويات
- عرض تاريخ جميع التشخيصات
- تفاصيل كل تشخيص سابق
- إمكانية الحذف
- إشعارات التشخيصات الجديدة
- إشعارات النقاط والمكافآت
- تذكيرات بالمراجعات
- تسجيل حساب جديد
- تسجيل الدخول/الخروج
- حماية المسارات
| التقنية | الإصدار | الاستخدام |
|---|---|---|
| Next.js | 16.1.3 | إطار العمل الأساسي |
| TypeScript | 5.0 | لغة البرمجة |
| Tailwind CSS | 4.0 | التصميم والأنماط |
| Shadcn/ui | - | مكتبة المكونات |
| Framer Motion | - | الحركات والانتقالات |
| Lucide Icons | - | الأيقونات |
| التقنية | الاستخدام |
|---|---|
| Next.js API Routes | الـ API |
| Prisma ORM | قاعدة البيانات |
| PostgreSQL | قاعدة البيانات |
| JWT | المصادقة |
| bcrypt | تشفير كلمات المرور |
- Node.js 18+
- npm أو yarn أو bun
# استنساخ المشروع
git clone https://github.com/your-username/shifa.git
# الدخول للمجلد
cd shifa
# تثبيت المتطلبات
npm install
# إعداد متغيرات البيئة
cp .env.example .env# إنشاء قاعدة البيانات
npx prisma db push
# (اختياري) ملء البيانات التجريبية
npx prisma db seed# وضع التطوير
npm run dev
# بناء المشروع
npm run build
# تشغيل الإنتاج
npm starthttp://localhost:3000
shifa/
├── 📁 public/ # الملفات الثابتة
│ ├── logo.svg
│ └── images/
├── 📁 src/
│ ├── 📁 app/ # صفحات التطبيق
│ │ ├── 📁 (auth)/ # صفحات المصادقة
│ │ │ ├── 📁 login/
│ │ │ └── 📁 register/
│ │ ├── 📁 api/ # نقاط النهاية API
│ │ │ ├── 📁 auth/
│ │ │ │ ├── 📁 login/
│ │ │ │ ├── 📁 logout/
│ │ │ │ ├── 📁 me/
│ │ │ │ └── 📁 register/
│ │ │ ├── 📁 chat/
│ │ │ ├── 📁 favorites/
│ │ │ ├── 📁 notifications/
│ │ │ ├── 📁 profile/
│ │ │ ├── 📁 reviews/
│ │ │ ├── 📁 share/
│ │ │ ├── 📁 stats/
│ │ │ └── 📁 symptoms/
│ │ ├── 📁 chat/ # صفحة المحادثة
│ │ ├── 📁 doctors/ # صفحة الأطباء
│ │ ├── 📁 favorites/ # صفحة المفضلين
│ │ ├── 📁 history/ # صفحة السجل
│ │ ├── 📁 notifications/ # صفحة الإشعارات
│ │ ├── 📁 profile/ # صفحة الملف الشخصي
│ │ ├── 📁 reviews/ # صفحة التقييمات
│ │ ├── 📁 symptoms/ # صفحة تحليل الأعراض
│ │ ├── layout.tsx # التخطيط الرئيسي
│ │ ├── page.tsx # الصفحة الرئيسية
│ │ └── globals.css # الأنماط العامة
│ ├── 📁 components/ # المكونات
│ │ ├── 📁 layout/
│ │ │ ├── header.tsx
│ │ │ └── footer.tsx
│ │ └── 📁 ui/ # مكونات UI
│ ├── 📁 lib/ # المكتبات والأدوات
│ │ ├── ai.ts # وظائف الذكاء الاصطناعي
│ │ ├── db.ts # اتصال قاعدة البيانات
│ │ └── utils.ts # أدوات مساعدة
│ └── 📁 styles/ # الأنماط
├── 📁 prisma/
│ └── schema.prisma # هيكل قاعدة البيانات
├── .env # متغيرات البيئة
├── package.json
├── tailwind.config.ts
├── tsconfig.json
└── README.md
// المستخدم
model User {
id String @id @default(cuid())
name String
email String @unique
password String
phone String?
birthDate DateTime?
gender String?
bloodType String?
image String?
points Int @default(0)
level Int @default(1)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
diagnoses Diagnosis[]
favorites FavoriteDoctor[]
notifications Notification[]
reviews Review[]
sharedResults SharedResult[]
pointsHistory PointsHistory[]
}
// التشخيص
model Diagnosis {
id String @id @default(cuid())
userId String
symptoms String
analysis String
recommendation String?
specialty String?
severity String?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}
// الإشعارات
model Notification {
id String @id @default(cuid())
userId String
type String
title String
message String
data String?
read Boolean @default(false)
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}
// الأطباء المفضلين
model FavoriteDoctor {
id String @id @default(cuid())
userId String
name String
specialty String
address String?
phone String?
lat Float?
lng Float?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}
// التقييمات
model Review {
id String @id @default(cuid())
userId String
doctorName String
rating Int
comment String?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}
// سجل النقاط
model PointsHistory {
id String @id @default(cuid())
userId String
points Int
reason String
description String?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}
// النتائج المشتركة
model SharedResult {
id String @id @default(cuid())
userId String
diagnosisId String?
shareCode String @unique
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
}POST /api/auth/register
Content-Type: application/json
{
"name": "أحمد محمد",
"email": "ahmed@example.com",
"password": "password123",
"phone": "01234567890"
}POST /api/auth/login
Content-Type: application/json
{
"email": "ahmed@example.com",
"password": "password123"
}GET /api/auth/me
Cookie: auth-token=<jwt_token>POST /api/auth/logoutPOST /api/symptoms
Content-Type: application/json
{
"age": 25,
"gender": "male",
"symptoms": ["صداع", "حمى"],
"description": "الألم شديد منذ يومين"
}الاستجابة:
{
"possibleConditions": [
{
"name": "صداع التوتر",
"probability": "40%",
"description": "صداع شائع يسبب ضغطاً حول الرأس",
"causes": ["التوتر", "قلة النوم"],
"riskFactors": ["الإجهاد", "الجلوس الطويل"]
}
],
"recommendedSpecialty": "طبيب عام",
"urgency": "منخفضة",
"diagnosticMethods": [...],
"treatments": {
"medications": [...],
"homeRemedies": [...],
"lifestyleChanges": [...]
},
"recommendations": [...],
"warningSigns": [...],
"preventionTips": [...],
"disclaimer": "هذا التشخيص للإرشاد فقط"
}GET /api/symptoms
Cookie: auth-token=<jwt_token>POST /api/chat
Content-Type: application/json
{
"messages": [
{
"role": "user",
"content": "ما هي أعراض الإنفلونزا؟"
}
]
}GET /api/profile
Cookie: auth-token=<jwt_token>PUT /api/profile
Content-Type: application/json
Cookie: auth-token=<jwt_token>
{
"name": "أحمد محمد",
"phone": "01234567890",
"birthDate": "1995-01-15",
"gender": "male",
"bloodType": "A+"
}POST /api/profile/image
Content-Type: application/json
Cookie: auth-token=<jwt_token>
{
"image": "data:image/jpeg;base64,<base64_image_data>"
}GET /api/notifications
Cookie: auth-token=<jwt_token>GET /api/stats
Cookie: auth-token=<jwt_token>الاستجابة:
{
"diagnosesCount": 15,
"points": 150,
"level": 3,
"unreadNotifications": 3
}/* الألوان الأساسية */
--primary: #10b981; /* الأخضر الرئيسي */
--secondary: #6366f1; /* البنفسجي الثانوي */
--background: #ffffff; /* الخلفية */
--foreground: #0f172a; /* النص */
/* الوضع الداكن */
--background-dark: #0f172a;
--foreground-dark: #f8fafc;- الخط العربي: Cairo / IBM Plex Sans Arabic
- الخط الإنجليزي: Inter
- تصميم Mobile-First
- نقاط التوقف:
sm: 640pxmd: 768pxlg: 1024pxxl: 1280px
- JWT Tokens: صلاحية 30 يوم
- HttpOnly Cookies: حماية من XSS
- bcrypt: تشفير كلمات المرور
- التحقق من المدخلات باستخدام Zod
- حماية CSRF
- تنظيف البيانات قبل التخزين
# تشغيل الاختبارات
npm test
# اختبارات E2E
npm run test:e2eنرحب بمساهماتكم! يرجى اتباع الخطوات التالية:
- Fork المشروع
- إنشاء فرع جديد (
git checkout -b feature/AmazingFeature) - Commit التغييرات (
git commit -m 'Add some AmazingFeature') - Push للفرع (
git push origin feature/AmazingFeature) - فتح Pull Request
- اتبع معايير الكود الموجودة
- أضف اختبارات للميزات الجديدة
- حدّث الوثائق عند الضرورة
- تأكد من عمل
npm run buildبنجاح
هذا المشروع مرخص تحت رخصة MIT - راجع ملف LICENSE للتفاصيل.
صُنع بـ ❤️
