OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
كل المباريات. كل اللحظات.
Translation pending
Sports & fitnessTypeScript · PLpgSQLGitHub @sale7-449OnlineOwner 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.
منصة رياضية عربية (Next.js 16 · App Router · TypeScript · Tailwind v4) — مباريات مباشرة، نتائج، بطولات، إحصائيات، وأخبار. تعمل بالكامل ببيانات تجريبية بدون أي إعداد، وتنتقل تلقائياً لبيانات حقيقية عند توفر مفاتيح API.Read the full README ↗
منصة رياضية عربية (Next.js 16 · App Router · TypeScript · Tailwind v4) — مباريات مباشرة، نتائج، بطولات، إحصائيات، وأخبار. تعمل بالكامل ببيانات تجريبية بدون أي إعداد، وتنتقل تلقائياً لبيانات حقيقية عند توفر مفاتيح API.
UI (app/, components/)
↓
Services (lib/services/) ← orchestration فقط، لا تعرف مصدر البيانات
↓
Providers (lib/providers/) ← FootballProvider · NewsProvider · SnapchatProvider
↓
Mock | External APIs / Supabase
(دائماً يعمل) | (اختياري، Fallback تلقائي لـ Mock عند الفشل)
lib/providers/football — MockFootballProvider (بيانات منسّقة يدوياً) وApiFootballProvider (api-football.com v3) خلف واجهة واحدة FootballProvider. لا مفتاح؟ يعمل الموقع بـ Mock. مفتاح موجود وفشل الطلب؟ سقوط تلقائي لـ Mock بدون كسر الصفحة.lib/providers/news — Mock فقط حالياً، خلف نفس نمط الواجهة لسهولة ربط مصدر حقيقي لاحقاً.lib/providers/snapchat — لا يوجد OAuth ولا "ربط حساب" وهمي. يستخدم Web Share API الحقيقية (تُظهر سناب شات كخيار مشاركة على الجوال إن كان مثبَّتاً)، وتظهر كـ"غير متاحة" بصدق على سطح المكتب.lib/supabase/) — قاعدة بيانات + مصادقة. تُخزَّن فقط تفضيلات المستخدم (مفضلة)، لا بيانات رياضية.npm install
npm run dev
يعمل الموقع مباشرة على localhost:3000 بلا أي إعداد إضافي (بيانات تجريبية، بلا تسجيل دخول).
انسخ .env.example إلى .env.local — كل المتغيرات اختيارية:
| المتغير | الغرض | بدونه |
|---|---|---|
API_FOOTBALL_KEY | بيانات مباريات حقيقية من api-football.com | Mock Data |
NEXT_PUBLIC_SUPABASE_URL | رابط مشروع Supabase | تسجيل الدخول/المفضلة غير متاحة |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | المفتاح العام (anon) — ليس Service Role | نفس ما سبق |
API_FOOTBALL_KEY.lib/providers/football/api-football-provider.ts — تأكد منها عبر GET /leagues?search= بمفتاحك قبل الإنتاج..env.local (وليس Service Role key).npx supabase db push
# أو الصق محتوى supabase/migrations/0001_init.sql في SQL Editor بلوحة Supabase
ينشئ هذا: profiles (مع Trigger ينشئها تلقائياً عند التسجيل)، وfavorite_teams/favorite_competitions/favorite_matches — كلها بـ Row Level Security مفعّلة (كل مستخدم يرى ويعدّل بياناته فقط).npm run build
npm run start
src/
├── app/ صفحات ومسارات API (App Router)
├── components/ ui/ (عناصر عامة) · shared/ · layout/ · home/ · match/
├── lib/
│ ├── providers/ Football · News · Snapchat — كل مصدر بيانات خارجي من هنا فقط
│ ├── services/ طبقة تنسيق بين Providers والواجهة
│ ├── actions/ Server Actions (مصادقة، مفضلة)
│ ├── supabase/ عملاء Supabase (متصفح/سيرفر) + فحص التهيئة
│ └── data/ Mock Data المنسّقة يدوياً
└── middleware.ts تجديد جلسة Supabase (لا يفعل شيئاً بدون إعداد)
supabase/migrations/ SQL جاهز للتطبيق