BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
مين أذكى؟ فريقين، لوحة أسئلة، وحيرة كبيرة!
Translation pending
GamesTypeScript · PLpgSQLGitHub @MohammadALFaqehOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
منصة أسئلة جماعية بين فريقين بأجواء برامج المسابقات: شاشة عرض على التلفزيون + لوحة تحكم للمضيف على الجوال + لوحة إدارة + بنك أسئلة دائم مع مركز استيراد.Read the full README ↗
منصة أسئلة جماعية بين فريقين بأجواء برامج المسابقات: شاشة عرض على التلفزيون + لوحة تحكم للمضيف على الجوال + لوحة إدارة + بنك أسئلة دائم مع مركز استيراد.
التقنيات: Next.js 15 (App Router) + React 19 + TypeScript + Tailwind CSS + Supabase (Postgres / Auth / Realtime / Storage).
hayra/
├── supabase/
│ ├── migrations/
│ │ ├── 001_schema.sql الجداول
│ │ ├── 002_security.sql RLS + Storage + Realtime
│ │ ├── 003_functions.sql الدوال + بيانات الدخول الافتراضية
│ │ ├── 004_seed_taxonomy.sql 11 فئة + الفئات الفرعية + 8 باقات
│ │ └── 005_seed_questions.sql 362 سؤال مبدئي
│ └── seed/hayra-questions.json نفس الأسئلة بصيغة الاستيراد (مثال للصيغة)
├── scripts/engine-selftest.ts اختبار محرك اللعبة
└── src/
├── app/
│ ├── page.tsx الرئيسية
│ ├── login/ الدخول المشترك
│ ├── packs/ how-to-play/
│ ├── play/new/ الفرق → الإعدادات → الفئات
│ ├── game/[id]/host|tv|watch المضيف / التلفزيون / المتفرج
│ ├── qr/[token]/ صفحة تحدي QR
│ ├── admin/ لوحة الإدارة
│ └── api/ كل منطق السيرفر
├── components/ الواجهات (game / admin / ui / site)
└── lib/
├── game/ المحرك، اختيار الأسئلة، الحالة العامة، التعليقات
├── importers/ OpenTDB, Quran, Wikidata, TMDB, football-data, JSON/CSV
├── client/ Realtime، المؤقت، الصوت، طابور الأوفلاين
└── supabase/ عملاء Supabase
001_schema.sql ← 002_security.sql ← 003_functions.sql ← 004_seed_taxonomy.sql ← 005_seed_questions.sql ← 006_question_modes.sql ← 007_grants.sqlinsert into public.admins (user_id)
select id from auth.users where email = '[email protected]';
Project URLanon public keyservice_role key (سري)pg_cron من Database → Extensions ثم شغّل:
select cron.schedule('hayra-cleanup', '0 * * * *', $$select public.cleanup_expired()$$);
بدون هذه الخطوة، السيرفر ينظّف الجلسات المنتهية تلقائيًا عند إنشاء كل لعبة جديدة.ملاحظة: الـ Realtime وbucket الصور
mediaيُفعَّلان تلقائيًا من002_security.sql.
npm install
cp .env.example .env.local # ثم عبّئ القيم
npm run dev # http://localhost:3000
لتوليد ACCESS_JWT_SECRET:
node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))"
| المتغير | الوصف |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | رابط مشروع Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | المفتاح العام |
SUPABASE_SERVICE_ROLE_KEY | سري — للسيرفر فقط، لا تضعه في متغير يبدأ بـ NEXT_PUBLIC |
ACCESS_JWT_SECRET | 32 حرفًا أو أكثر لتوقيع كوكي الدخول |
NEXT_PUBLIC_SITE_URL | رابط الموقع بعد النشر |
TMDB_API_TOKEN | اختياري — لاستيراد TMDB |
FOOTBALL_DATA_API_KEY | اختياري — لاستيراد football-data.org |
الفحوصات:
npm run typecheck
npm run test:engine
npm run build
بيانات الدخول الافتراضية للعب:
HAYRAhayra2026غيّرها فورًا من /admin → بيانات الدخول. التغيير يسجّل خروج كل الأجهزة.
المشروع يحتاج Node API Routes، لذلك يُنشر على Vercel (وليس Cloudflare Pages static).
استيراد القرآن يحمّل ملفًا حجمه ~19MB. خطة Vercel المجانية تسمح بـ 60 ثانية، والمسار مضبوط على
maxDuration = 60. إذا انتهت المهلة، قلّل «عدد الأسئلة لكل نوع».
cd hayra
git init
git add .
git commit -m "Hayra trivia platform"
git branch -M main
git remote add origin https://github.com/USERNAME/hayra.git
git push -u origin main
ملف .gitignore يستثني .env.local وnode_modules و.next. تأكد أنك لا ترفع أي مفاتيح.
| المصدر | ماذا يولّد | مفتاح؟ |
|---|---|---|
| JSON / CSV | أسئلتك أو باقات إسلامية مراجعة | لا |
| Quran Core Dataset (mjmirza) | في أي سورة، أكمل الآية، عدد الآيات، السورة التالية، الجزء، مكية/مدنية | لا |
| Wikidata SPARQL | عواصم، أعلام (صور)، عملات بأسماء عربية | لا |
| Open Trivia DB | أسئلة إنجليزية تحتاج ترجمة | لا |
| TMDB | بوسترات وسنوات المسلسلات والأفلام العربية | نعم |
| football-data.org | ملاعب، سنة التأسيس، شعارات، أبطال المواسم | نعم |
supabase/seed/hayra-questions.json. الحقول الأساسية: category (slug أو الاسم العربي)، subcategory، type، question_text، answer، difficulty (1–6)، إضافة لحقول اختيارية مثل choices، clues، extra، image_url، source، reference، tags، family_safe، verified.|.unique(import_source, external_id).hayra-seed) محفوظة غير موثّقة. راجعها، خصوصًا الإسلاميات، ثم وثّقها.pgcrypto)، والتحقق يتم في السيرفر فقط، مع تأخير عند الفشل.httpOnly موقّع (JWT)، ويُبطَل عند تغيير البيانات من لوحة الإدارة.x-host-key.admins، والتحقق يتم في الـ middleware وفي الصفحة وعبر RLS.service_role لا يُستخدم إلا داخل API Routes.| المشكلة | الحل |
|---|---|
| «لا توجد أسئلة كافية» | اختر فئات أخرى، أو ألغِ «الموثّق فقط»، أو فعّل أسئلة من البنك |
| التلفزيون لا يتحدث لحظيًا | تأكد أن 002_security.sql نُفّذ. يوجد تحديث احتياطي كل 4 ثوانٍ |
| لا يوجد صوت على التلفزيون | اضغط «اضغط للبدء» مرة واحدة، لأن المتصفح يمنع الصوت قبل أول تفاعل |
| «هذا الحساب ليس مشرفًا» | نفّذ أمر insert into public.admins من الخطوة 2 |
| رمز QR فُتح على جهاز خطأ | من لوحة المضيف اضغط «📱 إعادة ضبط QR» |