الملفات
Mohamed-Abdelhalim2 35744258a1 خريطة وقواعد بيانات التطبيق
عمل خريطة شاملة لطريقة تعاملنا مع المشروع

Signed-off-by: Mohamed-Abdelhalim2 <codepen.io.dropper985@passinbox.com>
2026-05-29 01:31:23 +00:00

433 أسطر
18 KiB
Markdown
خام الرابط الدائم اللوم التاريخ

هذا الملف يحتوي على أحرف Unicode غامضة

هذا الملف يحتوي على أحرف Unicode قد تُخلط مع أحرف أخرى. إذا كنت تعتقد أن هذا مقصود، يمكنك تجاهل هذا التحذير بأمان. استخدم زر الهروب للكشف عنها.

# 🌙 تطبيق "أثر" — الخطة المعمارية الكاملة
> تطبيق محتوى قصير هادف، مستوحى من تجربة TikTok لكن بهدف نافع: محتوى ديني وتذكير يومي يترك أثرًا بدل ما يسرق العمر.
---
## 📌 جدول المحتويات
1. [نصيحة المنصة](#1-نصيحة-المنصة)
2. [الهيكل العام للنظام](#2-الهيكل-العام-للنظام)
3. [التقنيات (Tech Stack)](#3-التقنيات-tech-stack)
4. [قاعدة البيانات (Database Schema)](#4-قاعدة-البيانات-database-schema)
5. [الـ APIs والتكاملات](#5-الـ-apis-والتكاملات)
6. [شاشات التطبيق (User Flow)](#6-شاشات-التطبيق-user-flow)
7. [نظام الإدارة (Admin Panel)](#7-نظام-الإدارة-admin-panel)
8. [الجوانب القانونية مع YouTube](#8-الجوانب-القانونية-مع-youtube)
9. [خطة التنفيذ المرحلية](#9-خطة-التنفيذ-المرحلية)
10. [التكلفة التقديرية](#10-التكلفة-التقديرية)
---
## 1. نصيحة المنصة
**ابدأ بـ Web App أولاً (PWA)** ثم انتقل للموبايل. الأسباب:
| السبب | التفصيل |
|------|---------|
| 🚀 سرعة الإطلاق | تبني نسخة واحدة وتجربها مع مستخدمين حقيقيين خلال أسابيع |
| 💰 توفير التكلفة | مفيش رسوم Apple Developer ($99/سنة) ولا Google Play ($25 مرة واحدة) في البداية |
| 🛡️ تجنب الرفض | متاجر التطبيقات صارمة جدًا مع التطبيقات اللي محتواها من YouTube |
| 📱 PWA قوي | المستخدم يقدر "يثبت" الموقع على شاشته زي التطبيق العادي |
| 🔄 تحديثات فورية | متحتاجش تنتظر موافقة المتجر على كل تحديث |
**بعد ما تثبت الفكرة وتجمع 1000+ مستخدم نشط**، نعمل نسخة React Native للموبايل (نفس الكود يشتغل Android + iOS).
---
## 2. الهيكل العام للنظام
```
┌─────────────────────────────────────────────────────────────┐
│ 👤 المستخدم (Browser/App) │
└────────────────────────┬────────────────────────────────────┘
┌────────────▼────────────┐
│ Frontend (Next.js) │
│ • Feed عمودي swipe │
│ • YouTube IFrame Player│
│ • أزرار تفاعل │
│ • أذكار / مواقيت صلاة │
└────────────┬────────────┘
┌────────────────┼────────────────┐
│ │ │
┌───────▼──────┐ ┌───────▼──────┐ ┌──────▼───────┐
│ Supabase │ │ YouTube APIs │ │ External APIs│
│ (Backend) │ │ │ │ │
│ │ │ • IFrame │ │ • Aladhan │
│ • PostgreSQL │ │ • Data API v3│ │ (مواقيت) │
│ • Auth │ │ │ │ • أذكار JSON │
│ • Storage │ │ │ │ │
│ • Realtime │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
┌───────┴────────┐
│ Admin Panel │ ← إنت/المشرفين تختاروا الفيديوهات
│ (Next.js) │
└────────────────┘
```
---
## 3. التقنيات (Tech Stack)
### الواجهة الأمامية (Frontend)
- **Next.js 14** (React + SSR) — يدعم PWA بسهولة
- **TailwindCSS** — تصميم سريع ومريح
- **Framer Motion** — انتقالات سلسة بين الفيديوهات (swipe up/down)
- **react-youtube** — مكتبة جاهزة لتضمين IFrame Player
### الخادم (Backend) — كله في Supabase
- **PostgreSQL** — قاعدة بيانات قوية
- **Supabase Auth** — تسجيل دخول (Google, Email, Anonymous)
- **Row Level Security (RLS)** — أمان على مستوى الصف
- **Edge Functions** — لو محتاج منطق سيرفر مخصص
- **Realtime** — التعليقات تظهر فورًا
### خدمات خارجية
- **YouTube IFrame Player API** — لتشغيل الفيديوهات (مجاني، بدون حدود)
- **YouTube Data API v3** — لجلب بيانات الفيديو تلقائيًا (10k طلب/يوم مجانًا)
- **Aladhan API** — مواقيت الصلاة (مجاني)
- **Vercel** — استضافة الـ Frontend (مجاني للبداية)
### أدوات إضافية
- **OneSignal** — Push notifications مجانية (للتذكير اليومي)
- **PostHog / Plausible** — تحليلات تحترم الخصوصية
---
## 4. قاعدة البيانات (Database Schema)
```sql
-- 👤 جدول المستخدمين (مدار من Supabase Auth)
users (
id uuid PRIMARY KEY,
email text,
display_name text,
avatar_url text,
created_at timestamp,
-- إعدادات شخصية
daily_goal_minutes int DEFAULT 10,
notification_time time,
city text -- لمواقيت الصلاة
)
-- 🎥 جدول الفيديوهات (إنت تضيفها يدويًا أو من Admin Panel)
videos (
id uuid PRIMARY KEY,
youtube_id text UNIQUE NOT NULL, -- مثلاً: dQw4w9WgXcQ
title text,
description text,
duration_seconds int,
channel_name text,
channel_id text,
thumbnail_url text,
category text, -- 'قرآن' / 'حديث' / 'سيرة' / 'تزكية'
tags text[],
scholar_name text, -- اسم الشيخ/الداعية
is_approved boolean DEFAULT false, -- المشرف يوافق قبل النشر
added_by uuid REFERENCES users(id),
created_at timestamp,
-- إحصائيات داخلية (مش من يوتيوب)
views_count int DEFAULT 0,
likes_count int DEFAULT 0,
saves_count int DEFAULT 0
)
-- ❤️ إعجابات (محلية في تطبيقك)
likes (
user_id uuid REFERENCES users(id),
video_id uuid REFERENCES videos(id),
created_at timestamp,
PRIMARY KEY (user_id, video_id)
)
-- 🔖 محفوظات
saves (
user_id uuid REFERENCES users(id),
video_id uuid REFERENCES videos(id),
collection text DEFAULT 'default', -- مجموعات: 'للمراجعة' / 'مفضلة'
created_at timestamp,
PRIMARY KEY (user_id, video_id)
)
-- 💬 تعليقات (محلية في تطبيقك)
comments (
id uuid PRIMARY KEY,
user_id uuid REFERENCES users(id),
video_id uuid REFERENCES videos(id),
content text,
parent_id uuid REFERENCES comments(id), -- للردود
is_hidden boolean DEFAULT false, -- للإشراف
created_at timestamp
)
-- 📊 سجل المشاهدات (لمعرفة الفيديوهات اللي شافها المستخدم)
watch_history (
user_id uuid REFERENCES users(id),
video_id uuid REFERENCES videos(id),
watched_seconds int,
completed boolean,
watched_at timestamp,
PRIMARY KEY (user_id, video_id, watched_at)
)
-- 📿 الأذكار اليومية
daily_remembrance (
id uuid PRIMARY KEY,
category text, -- 'صباح' / 'مساء' / 'نوم' / 'استيقاظ'
arabic text,
translit text,
meaning text,
source text,
count int DEFAULT 1
)
-- 🎯 الرحلات التعليمية (Playlists منظمة)
journeys (
id uuid PRIMARY KEY,
title text, -- "رحلة في السيرة النبوية"
description text,
cover_url text,
video_ids uuid[], -- مرتبة بالترتيب
difficulty text, -- 'مبتدئ' / 'متوسط' / 'متقدم'
estimated_minutes int
)
-- 📈 تتبع تقدم الرحلات
journey_progress (
user_id uuid REFERENCES users(id),
journey_id uuid REFERENCES journeys(id),
completed_video_ids uuid[],
started_at timestamp,
completed_at timestamp,
PRIMARY KEY (user_id, journey_id)
)
```
---
## 5. الـ APIs والتكاملات
### 🎥 YouTube IFrame Player API (الأهم)
**ده اللي بيعرض الفيديو جوه تطبيقك.**
```javascript
// مثال بسيط: عرض فيديو يوتيوب بشكل عمودي
import YouTube from 'react-youtube';
function VideoPlayer({ youtubeId, onEnd }) {
const opts = {
height: '100%',
width: '100%',
playerVars: {
autoplay: 1,
controls: 0, // إخفاء أزرار يوتيوب
modestbranding: 1, // تقليل علامة يوتيوب
rel: 0, // عدم اقتراح فيديوهات أخرى
playsinline: 1,
},
};
return (
<YouTube
videoId={youtubeId}
opts={opts}
onEnd={onEnd} // ينتقل تلقائيًا للفيديو التالي
/>
);
}
```
**ملاحظات مهمة:**
- ✅ مجاني تمامًا، بدون حد طلبات
- ✅ المشاهدات تتحسب لصاحب الفيديو (عدل)
- ⚠️ لازم يظهر زر "YouTube" صغير (شرط من جوجل)
- ⚠️ ما تقدرش تخفي الإعلانات لو الفيديو فيه إعلانات
### 📊 YouTube Data API v3 (اختياري لكن مفيد)
لجلب بيانات الفيديو تلقائيًا (لما تضيف فيديو جديد):
```
GET https://www.googleapis.com/youtube/v3/videos
?part=snippet,contentDetails,statistics
&id=VIDEO_ID
&key=YOUR_API_KEY
```
### 🕌 Aladhan API — مواقيت الصلاة
```
GET https://api.aladhan.com/v1/timingsByCity
?city=Cairo&country=Egypt&method=5
```
### 🔔 OneSignal — إشعارات
- إشعار يومي: "وقت أذكار الصباح 🌅"
- إشعار قبل الصلاة بـ 10 دقائق
- إشعار للفيديو الأسبوعي الجديد
---
## 6. شاشات التطبيق (User Flow)
```
1. 🚪 شاشة الترحيب
2. 🔐 تسجيل دخول (Google / Email / Skip كضيف)
3. 🎯 اختيار الاهتمامات (قرآن / تزكية / سيرة / فقه...)
4. 🏠 الشاشة الرئيسية — Vertical Feed
┌─────────────────────────┐
│ │
│ 🎥 فيديو يلعب │
│ تلقائيًا │
│ │
│ [اسم الشيخ] ❤️ 245 │
│ [العنوان] 💬 12 │
│ [#تزكية] 🔖 │
│ 📤 │
└─────────────────────────┘
↑ swipe up = التالي
↓ swipe down = السابق
5. 📿 تبويبات سفلية:
[🏠 الرئيسية] [🛤️ رحلات] [📿 أذكار] [🔖 محفوظاتي] [👤 ملفي]
```
### الشاشات التفصيلية:
| الشاشة | الوصف |
|--------|------|
| 🏠 **Feed الرئيسي** | فيديوهات عمودية، swipe للتنقل، autoplay |
| 🛤️ **الرحلات** | سلاسل منظمة (مثال: "10 أيام في رياض الصالحين") |
| 📿 **الأذكار** | أذكار الصباح/المساء بشكل تفاعلي مع عداد |
| 🕌 **مواقيت الصلاة** | حسب موقع المستخدم + تذكيرات |
| 🔖 **محفوظاتي** | الفيديوهات اللي حفظها المستخدم |
| 👤 **ملفي الشخصي** | إحصائيات وقت المشاهدة، الرحلات المكتملة، إعدادات |
| ⚙️ **الإعدادات** | الوضع المريح للعين، حد يومي للمشاهدة، إشعارات |
### 🌙 ميزات "ضد الإدمان" (مهمة جدًا)
- **حد يومي**: المستخدم يحدد 10/20/30 دقيقة، التطبيق يقفل بعدها
- **رسالة بعد كل 5 فيديوهات**: "خد نفس، اشرب مياه، صلِّ على النبي ﷺ"
- **بدون عداد متابعين/لايكات مبالغ فيه**: علشان مفيش "سباق شهرة"
- **بدون scroll لا نهائي ليلًا**: بعد الـ 11م يظهر تذكير بالنوم
---
## 7. نظام الإدارة (Admin Panel)
لوحة بسيطة عشان إنت (أو فريقك) تضيفوا/تراجعوا المحتوى:
### الصفحات:
1. ** إضافة فيديو** — لصق رابط يوتيوب، البيانات تتجلب تلقائيًا، تختار التصنيف، وافق
2. **📋 قائمة الفيديوهات** — بحث، فلترة، حذف، تعديل
3. **🛤️ إدارة الرحلات** — إنشاء سلاسل من فيديوهات موجودة
4. **💬 إشراف التعليقات** — مراجعة وإخفاء التعليقات غير المناسبة
5. **👥 المستخدمون** — إحصائيات، حظر إذا لزم
6. **📊 لوحة التحليلات** — الفيديوهات الأكثر مشاهدة، أوقات الذروة، إلخ
---
## 8. الجوانب القانونية مع YouTube
### ✅ ما هو مسموح (شروط الخدمة):
- استخدام **IFrame Player API** لتضمين الفيديوهات
- بناء واجهة مخصصة حول المُشغّل
- جمع إعجابات/تعليقات على تطبيقك (منفصلة عن يوتيوب)
- اقتراح فيديوهات للمستخدمين
### ❌ ما هو ممنوع:
- تحميل الفيديو وإعادة استضافته
- إخفاء علامة يوتيوب تمامًا
- تعطيل الإعلانات
- استخدام طرق غير رسمية (yt-dlp, scraping)
### 📋 شروط لازم تلتزم بيها:
1. **اربط بـ ToS و Privacy** الخاصين بيوتيوب
2. **خلي زر "Watch on YouTube" ظاهر**
3. **متغيرش/متعدلش الفيديو نفسه**
4. **احترم حقوق الناشرين** (لو ناشر طلب إزالة فيديوه، شيله)
📖 المرجع الرسمي: [YouTube API Services Terms of Service](https://developers.google.com/youtube/terms/api-services-terms-of-service)
---
## 9. خطة التنفيذ المرحلية
### 🥇 المرحلة 1 — MVP (4-6 أسابيع)
- [ ] إعداد Next.js + Supabase + Tailwind
- [ ] تصميم شاشة الفيديو العمودي مع swipe
- [ ] تكامل YouTube IFrame
- [ ] تسجيل دخول (Google + Anonymous)
- [ ] إعجاب + حفظ
- [ ] Admin Panel بسيط لإضافة 30-50 فيديو مختار بعناية
- [ ] نشر كـ PWA على Vercel
### 🥈 المرحلة 2 — تفعيل المجتمع (4 أسابيع)
- [ ] التعليقات + الردود
- [ ] الإشعارات (OneSignal)
- [ ] أذكار الصباح/المساء
- [ ] مواقيت الصلاة
- [ ] حد يومي للمشاهدة + رسائل التذكير
### 🥉 المرحلة 3 — الرحلات والنمو (6 أسابيع)
- [ ] نظام الرحلات (Journeys)
- [ ] تتبع التقدم والشارات
- [ ] مشاركة الفيديوهات على واتساب/تويتر
- [ ] تحسين خوارزمية الاقتراحات
### 🏆 المرحلة 4 — تطبيقات الموبايل (8 أسابيع)
- [ ] React Native (نفس الـ Backend)
- [ ] نشر على Google Play
- [ ] نشر على App Store
- [ ] Deep Linking
---
## 10. التكلفة التقديرية
### في البداية (أول 1000 مستخدم) — **مجاني تقريبًا** 🎉
| الخدمة | التكلفة |
|--------|---------|
| Vercel (Hosting) | $0 |
| Supabase (Free tier) | $0 |
| YouTube APIs | $0 |
| Aladhan API | $0 |
| OneSignal | $0 |
| Domain (.com) | ~$12/سنة |
| **الإجمالي** | **~$1/شهر** |
### بعد النمو (10,000+ مستخدم نشط)
| الخدمة | التكلفة |
|--------|---------|
| Vercel Pro | $20/شهر |
| Supabase Pro | $25/شهر |
| OneSignal Growth | $9/شهر |
| **الإجمالي** | **~$54/شهر** |
### لو حبيت تطبيقات موبايل:
- Apple Developer: $99/سنة
- Google Play: $25 (مرة واحدة)
---
## 🌟 خلاصة
إنت معاك فكرة قوية، والتنفيذ التقني فيها **ممكن جدًا** ومش معقد. الأهم من الكود هو:
1. **اختيار المحتوى بعناية** — أنت أو لجنة شرعية تختار قنوات موثوقة
2. **التصميم اللي يحترم وقت المستخدم** — مش يدمنه
3. **بناء مجتمع نواة** — 100 مستخدم متفاعل خير من 10,000 خامل
---
## 🚀 الخطوة التالية
تحب نبدأ نبني الـ **Prototype** فعليًا؟ أقدر أعمل:
- صفحة HTML/JS شغّالة تعرض فيديو يوتيوب بشكل عمودي زي تيكتوك
- مع أزرار إعجاب وحفظ (تشتغل بـ localStorage في البداية)
- قول لي وابدأ.