BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
منصة أسئلة جماعية بين فريقين بأجواء برامج المسابقات: شاشة عرض على التلفزيون + لوحة تحكم للمضيف على الجوال + لوحة إدارة + بنك أسئلة دائم مع مركز استيراد.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» |