www / index.html
MeemAdam's picture
بسم الله
7729639 verified
Raw
History Blame Contribute Delete
30.4 kB
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OpenCode: دليل الوكيل البرمجي المفتوح</title>
<!-- الربط بخطوط Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;700&family=Tajawal:wght@400;500;700&display=swap" rel="stylesheet">
<!-- Tailwind CSS CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- إعدادات PWA الأساسية -->
<meta name="theme-color" content="#0ea5e9">
<meta name="description" content="تطبيق تعليمي تفاعلي لاستكشاف أداة OpenCode البديلة لـ Claude Code">
<link rel="apple-touch-icon" href="https://cdn-icons-png.flaticon.com/512/2103/2103633.png">
<!-- إعدادات Tailwind المخصصة والوضع الليلي -->
<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
fontFamily: {
cairo: ['Cairo', 'sans-serif'],
tajawal: ['Tajawal', 'sans-serif'],
},
colors: {
primary: '#0ea5e9',
darkBg: '#0f172a',
darkCard: '#1e293b',
}
}
}
}
</script>
<style>
body {
font-family: 'Tajawal', sans-serif;
scroll-behavior: smooth;
transition: background-color 0.3s, color 0.3s;
}
h1, h2, h3, h4 {
font-family: 'Cairo', sans-serif;
}
.text-justify {
text-align: justify;
}
.prompt-box {
overflow-wrap: break-word;
word-wrap: break-word;
white-space: pre-wrap;
}
/* تصميم مخصص لشريط التمرير */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
.dark ::-webkit-scrollbar-track {
background: #0f172a;
}
::-webkit-scrollbar-thumb {
background: #0ea5e9;
border-radius: 4px;
}
/* زر العودة للأعلى */
#backToTop {
transition: opacity 0.3s, visibility 0.3s;
}
</style>
</head>
<body class="bg-stone-50 text-stone-900 dark:bg-slate-900 dark:text-slate-100">
<!-- زر تبديل الوضع (أعلى اليسار) -->
<button id="themeToggle" class="fixed top-4 left-4 z-50 p-3 rounded-full bg-white dark:bg-slate-800 shadow-lg border border-stone-200 dark:border-slate-700 hover:scale-110 transition-transform focus:outline-none">
<span id="themeIcon" class="text-xl">🌙</span>
</button>
<!-- شريط التنقل (SPA Navigation) -->
<nav class="sticky top-0 z-40 w-full bg-white/80 dark:bg-slate-900/80 backdrop-blur-md border-b border-stone-200 dark:border-slate-800">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between items-center h-16">
<div class="flex items-center">
<span class="text-xl font-bold text-primary font-cairo">دليل OpenCode</span>
</div>
<div class="hidden md:flex space-x-6 space-x-reverse mr-10">
<a href="#intro" class="hover:text-primary transition-colors font-medium">البداية</a>
<a href="#features" class="hover:text-primary transition-colors font-medium">المميزات</a>
<a href="#comparison" class="hover:text-primary transition-colors font-medium">المقارنة</a>
<a href="#modes" class="hover:text-primary transition-colors font-medium">أوضاع العمل</a>
<a href="#cli" class="hover:text-primary transition-colors font-medium">الأوامر</a>
<a href="#prompts" class="hover:text-primary transition-colors font-medium">المطالبات</a>
</div>
</div>
</div>
</nav>
<!-- المحتوى الرئيسي -->
<main class="max-w-7xl mx-auto px-4 py-8">
<!-- مقدمة الدورة -->
<section id="intro" class="mb-16">
<div class="text-center mb-12">
<h1 class="text-3xl md:text-4xl font-bold mb-4">
مراجعة شاملة لأداة OpenCode </h1>
<h2 class="text-2xl md:text-2xl text-gray-400 font-bold mb-4">
المنافس المفتوح المصدر لـ Claude Code</h2>
<p class="text-lg text-stone-600 dark:text-slate-400 max-w-3xl mx-auto text-justify">
يقدم هذا التطبيق التعليمي ملخصاً معززاً وتفصيلياً يستعرض أداة <b>OpenCode</b>، وهي وكيل برمجي (Coding Agent) مفتوح المصدر وسريع النمو. تهدف هذه الأداة إلى توفير بيئة برمجية متكاملة تعتمد على الذكاء الاصطناعي مع مرونة كاملة في اختيار النماذج والخصوصية، مما يجعلها الخيار الأول للمطورين الذين ينشدون الاستقلالية.
</p>
</div>
<div class="bg-white dark:bg-slate-800 rounded-2xl p-8 shadow-sm border border-stone-200 dark:border-slate-700">
<h2 class="text-2xl font-bold mb-6 border-r-4 border-primary pr-4">ما هي أداة OpenCode؟</h2>
<p class="text-justify mb-4">
تُعد <b>OpenCode</b> أداة برمجية متطورة تعمل عبر واجهة السطر البرمجي (CLI) وتطبيق سطح المكتب. تم تصميمها لتنفيذ مهام برمجية معقدة ومتعددة الخطوات. ما يميز هذه الأداة هو جذورها التقنية؛ فقد تم تطويرها بواسطة فريق يمتلك خبرة واسعة في أدوات مثل <b>Neovim</b> (تحديداً المطورين خلف مشروع <i>avante.nvim</i>)، مما جعل واجهتها سلسة، سريعة، واحترافية للغاية تلائم سير عمل المحترفين.
</p>
<p class="text-justify">
على عكس الأدوات المغلقة، تمنحك OpenCode القدرة على "جلب مفتاحك الخاص" (BYOK)، مما يعني أنك لا ترتبط بمزود واحد أو اشتراك محدد، بل يمكنك التنقل بين أفضل النماذج المتاحة في السوق لحظة بلحظة.
</p>
</div>
</section>
<!-- المميزات الرئيسية (شبكة عمودين) -->
<section id="features" class="mb-16">
<h2 class="text-2xl font-bold mb-8 text-center">المميزات الاستثنائية للأداة</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- ميزة 1 -->
<div class="group bg-white dark:bg-slate-800 p-6 rounded-xl border border-stone-200 dark:border-slate-700 hover:shadow-xl hover:-translate-y-1 transition-all duration-300">
<div class="flex items-center mb-4">
<div class="p-3 bg-blue-100 dark:bg-blue-900 rounded-lg ml-4">
<span class="text-2xl">🔓</span>
</div>
<h3 class="text-xl font-bold">مفتوحة المصدر بالكامل</h3>
</div>
<p class="text-justify text-stone-600 dark:text-slate-400">
الأداة مرخصة تحت رخصة <b>MIT</b>، مما يعني شفافية كاملة في كيفية التعامل مع الكود الخاص بك، وأماناً أعلى لبياناتك الحساسة. يمكنك تدقيق الكود البرمجي للأداة نفسها للتأكد من عدم وجود ثغرات أو تسريب للبيانات.
</p>
</div>
<!-- ميزة 2 -->
<div class="group bg-white dark:bg-slate-800 p-6 rounded-xl border border-stone-200 dark:border-slate-700 hover:shadow-xl hover:-translate-y-1 transition-all duration-300">
<div class="flex items-center mb-4">
<div class="p-3 bg-green-100 dark:bg-green-900 rounded-lg ml-4">
<span class="text-2xl">🧠</span>
</div>
<h3 class="text-xl font-bold">دعم هائل للنماذج (70+)</h3>
</div>
<p class="text-justify text-stone-600 dark:text-slate-400">
لا تكتفِ بنموذج واحد؛ تدعم الأداة أكثر من 70 نموذج ذكاء اصطناعي تشمل: <b>Claude 3.5</b>، <b>GPT-4o</b>، <b>Gemini 1.5</b>، <b>DeepSeek</b>، وحتى نماذج <b>Grok</b>. هذا التنوع يضمن لك اختيار النموذج الأنسب للمهمة (مثلاً Gemini للمهام التي تتطلب سياقاً كبيراً، و Claude للبرمجة المنطقية الدقيقة).
</p>
</div>
<!-- ميزة 3 -->
<div class="group bg-white dark:bg-slate-800 p-6 rounded-xl border border-stone-200 dark:border-slate-700 hover:shadow-xl hover:-translate-y-1 transition-all duration-300">
<div class="flex items-center mb-4">
<div class="p-3 bg-yellow-100 dark:bg-yellow-900 rounded-lg ml-4">
<span class="text-2xl">🔌</span>
</div>
<h3 class="text-xl font-bold">تعدد المزودين (BYOK)</h3>
</div>
<p class="text-justify text-stone-600 dark:text-slate-400">
يمكنك استخدام مفاتيح API الخاصة بك من <b>OpenRouter</b> أو <b>OpenAI</b> أو <b>Anthropic</b>، أو حتى الاستفادة من اشتراكاتك الحالية في <b>ChatGPT Plus</b> أو <b>GitHub Copilot</b> عبر بروتوكولات الربط المدعومة.
</p>
</div>
<!-- ميزة 4 -->
<div class="group bg-white dark:bg-slate-800 p-6 rounded-xl border border-stone-200 dark:border-slate-700 hover:shadow-xl hover:-translate-y-1 transition-all duration-300">
<div class="flex items-center mb-4">
<div class="p-3 bg-purple-100 dark:bg-purple-900 rounded-lg ml-4">
<span class="text-2xl">📝</span>
</div>
<h3 class="text-xl font-bold">دعم ملف agents.md</h3>
</div>
<p class="text-justify text-stone-600 dark:text-slate-400">
تتبع الأداة الاتفاقية الموحدة لسياق الوكلاء الذكية. بمجرد وجود ملف <b>agents.md</b> في مشروعك، سيفهم الوكيل بنية المشروع، الأهداف، والقيود التقنية بسرعة فائقة، مما يقلل من "الهلوسة" البرمجية.
</p>
</div>
</div>
</section>
<!-- مقارنة (بطاقات بديلة) -->
<section id="comparison" class="mb-16">
<h2 class="text-2xl font-bold mb-8 text-center">OpenCode مقابل Claude Code: أيهما تختار؟</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- بطاقة OpenCode -->
<div class="relative p-8 rounded-2xl bg-gradient-to-br from-blue-50 to-white dark:from-slate-800 dark:to-slate-900 border-2 border-primary shadow-lg">
<h3 class="text-2xl font-bold text-primary mb-6">OpenCode (الخيار الحر)</h3>
<ul class="space-y-4">
<li class="flex items-center">
<span class="ml-2 text-green-500 font-bold"></span>
<span><b>المصدر:</b> مفتوح المصدر بالكامل (MIT).</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-green-500 font-bold"></span>
<span><b>التكلفة:</b> دفع مقابل الاستخدام الفعلي (رخيص جداً).</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-green-500 font-bold"></span>
<span><b>النماذج:</b> أي نموذج يدعم واجهة API.</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-green-500 font-bold"></span>
<span><b>الخصوصية:</b> تحكم محلي كامل في البيانات.</span>
</li>
</ul>
</div>
<!-- بطاقة Claude Code -->
<div class="relative p-8 rounded-2xl bg-white dark:bg-slate-800 border-2 border-stone-300 dark:border-slate-600">
<h3 class="text-2xl font-bold text-stone-500 mb-6">Claude Code (الخيار المغلق)</h3>
<ul class="space-y-4">
<li class="flex items-center">
<span class="ml-2 text-red-500 font-bold"></span>
<span><b>المصدر:</b> مغلق المصدر وملكية خاصة.</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-red-500 font-bold"></span>
<span><b>التكلفة:</b> اشتراكات مرتفعة (100-200 دولار شهرياً).</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-red-500 font-bold"></span>
<span><b>النماذج:</b> نماذج شركة Anthropic فقط.</span>
</li>
<li class="flex items-center">
<span class="ml-2 text-red-500 font-bold"></span>
<span><b>الخصوصية:</b> تعتمد كلياً على سياسات الشركة.</span>
</li>
</ul>
</div>
</div>
</section>
<!-- أوضاع العمل -->
<section id="modes" class="mb-16 bg-primary/5 dark:bg-primary/10 p-8 rounded-3xl">
<h2 class="text-2xl font-bold mb-8 text-center">آلية العمل: النظام الثنائي المتكامل</h2>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12">
<div class="bg-white dark:bg-slate-800 p-6 rounded-2xl shadow-sm">
<h3 class="text-xl font-bold text-blue-600 mb-4 flex items-center">
<span class="ml-2">1. وضع التخطيط (Plan Mode)</span>
</h3>
<p class="text-justify mb-4">
هذا الوضع مخصص للاستكشاف والتحليل. يعمل الوكيل هنا بوضعية <b>القراءة فقط</b>.
</p>
<ul class="list-disc list-inside space-y-2 text-stone-600 dark:text-slate-400">
<li>تحليل الكود الحالي وفهم الترابطات.</li>
<li>اقتراح حلول للمشاكل دون لمس الملفات.</li>
<li>آمن جداً لاستخدامه في المشاريع الكبيرة قبل اتخاذ قرار التعديل.</li>
</ul>
</div>
<div class="bg-white dark:bg-slate-800 p-6 rounded-2xl shadow-sm border-t-4 border-primary">
<h3 class="text-xl font-bold text-primary mb-4 flex items-center">
<span class="ml-2">2. وضع البناء (Build Mode)</span>
</h3>
<p class="text-justify mb-4">
هنا تبدأ القوة الحقيقية؛ حيث يتحول الوكيل إلى مطور نشط يمتلك <b>صلاحيات الكتابة</b>.
</p>
<ul class="list-disc list-inside space-y-2 text-stone-600 dark:text-slate-400">
<li>إنشاء ملفات جديدة تماماً.</li>
<li>تعديل الأسطر البرمجية بدقة عالية.</li>
<li>تنفيذ الأوامر في الطرفية (Terminal) لتثبيت الحزم أو تشغيل الاختبارات.</li>
</ul>
</div>
</div>
</section>
<!-- التثبيت (CLI) -->
<section id="cli" class="mb-16">
<h2 class="text-2xl font-bold mb-8">التثبيت والإعداد السريع</h2>
<div class="bg-stone-900 text-slate-300 p-6 rounded-xl font-mono text-sm leading-relaxed shadow-2xl overflow-hidden">
<div class="flex items-center mb-4 border-b border-stone-800 pb-2">
<div class="flex space-x-2 space-x-reverse ml-4">
<div class="w-3 h-3 bg-red-500 rounded-full"></div>
<div class="w-3 h-3 bg-yellow-500 rounded-full"></div>
<div class="w-3 h-3 bg-green-500 rounded-full"></div>
</div>
<span class="text-xs text-stone-500">Terminal - Installation</span>
</div>
<div class="space-y-4" dir="ltr">
<div>
<span class="text-stone-500"># Install the tool globally using curl</span><br>
<span class="text-primary">curl</span> -sL https://opencode.ai/install.sh | <span class="text-primary">sh</span>
</div>
<div>
<span class="text-stone-500"># Login and choose your provider (OpenRouter/OpenAI)</span><br>
<span class="text-primary">opencode</span> login
</div>
<div>
<span class="text-stone-500"># Start building in your current directory</span><br>
<span class="text-primary">opencode</span> .
</div>
</div>
</div>
</section>
<!-- المطالبات (Prompting) - ثنائي الأعمدة -->
<section id="prompts" class="mb-16">
<h2 class="text-2xl font-bold mb-8 text-center">أمثلة عملية لمطالبات احترافية</h2>
<p class="text-center mb-10 text-stone-600 dark:text-slate-400">إليك كيف يمكنك صياغة طلباتك لتحصل على أفضل النتائج البرمجية.</p>
<!-- مثال 1 -->
<div class="mb-12">
<h3 class="text-xl font-bold mb-6 text-primary">المثال الأول: بناء لعبة ثلاثية الأبعاد</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-0 rounded-2xl overflow-hidden shadow-lg">
<!-- جهة العربية -->
<div class="bg-slate-800 p-6 text-white text-right" dir="rtl">
<span class="inline-block bg-primary text-xs px-2 py-1 rounded mb-4 font-bold">المطالبة:</span>
<div class="font-tajawal leading-relaxed">
قم بإنشاء <b>لعبة ركض لا نهائي ثلاثية الأبعاد</b> باستخدام لغة <b>TypeScript</b> ومكتبة <b>Three.js</b>.
يجب أن تتضمن اللعبة:
عناصر تحكم للاعب، عقبات تظهر عشوائياً، وطريق نيون يتم إنتاجه إجرائياً بشكل مستمر.
</div>
</div>
<!-- جهة الإنجليزية -->
<div class="bg-slate-900 p-6 text-slate-300 text-left font-mono text-sm" dir="ltr">
<span class="inline-block bg-slate-700 text-xs px-2 py-1 rounded mb-4 font-bold uppercase">Prompt:</span>
<div class="prompt-box">
Create a 3D endless runner game using Vanilla TypeScript and Three.js.
Include player controls, obstacles, and a procedurally generated neon road.
</div>
</div>
</div>
</div>
<!-- مثال 2 -->
<div class="mb-12">
<h3 class="text-xl font-bold mb-6 text-primary">المثال الثاني: لوحة تحكم CRM</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-0 rounded-2xl overflow-hidden shadow-lg">
<!-- جهة العربية -->
<div class="bg-slate-800 p-6 text-white text-right" dir="rtl">
<span class="inline-block bg-primary text-xs px-2 py-1 rounded mb-4 font-bold">المطالبة:</span>
<div class="font-tajawal leading-relaxed">
قم ببناء <b>لوحة تحكم لنظام إدارة علاقات العملاء (CRM)</b> مخصصة لحملات البريد الإلكتروني.
استخدم تقنيات <b>React</b> و <b>Vite</b> و <b>Tailwind CSS</b>.
يجب أن تشمل اللوحة: إدارة جهات الاتصال، تتبع حالة الحملات، ورسوماً بيانية للتحليلات.
</div>
</div>
<!-- جهة الإنجليزية -->
<div class="bg-slate-900 p-6 text-slate-300 text-left font-mono text-sm" dir="ltr">
<span class="inline-block bg-slate-700 text-xs px-2 py-1 rounded mb-4 font-bold uppercase">Prompt:</span>
<div class="prompt-box">
Build a CRM dashboard for email campaigns using React, Vite, and Tailwind.
Include contact management, campaign tracking, and analytics.
</div>
</div>
</div>
</div>
</section>
<!-- نصائح ذهبية وخلاصة -->
<section class="mb-16">
<div class="bg-white dark:bg-slate-800 rounded-3xl p-10 shadow-sm border border-stone-200 dark:border-slate-700">
<h2 class="text-2xl font-bold mb-6">الخلاصة ونصائح الاستخدام المحترف</h2>
<div class="space-y-6">
<p class="text-justify">
أثبتت <b>OpenCode</b> أنها بديل حقيقي وقوي للأدوات المغلقة. إنها ليست مجرد أداة لإكمال الكود، بل هي شريك برمجي يفهم مشروعك ككل. إليك بعض النصائح النهائية:
</p>
<ul class="space-y-4">
<li class="flex items-start">
<span class="ml-3 mt-1 text-primary"></span>
<span>استخدم أمر <b>/init</b> عند بدء العمل على مشروع موجود؛ سيؤدي ذلك لإنشاء ملف <b>agents.md</b> الذي يُعد "البوصلة" للوكيل الذكي.</span>
</li>
<li class="flex items-start">
<span class="ml-3 mt-1 text-primary"></span>
<span><b>التنويع في النماذج:</b> لا تلتزم بنموذج واحد. استخدم <b>Claude 3.5 Opus</b> للمنطق المعقد، و <b>Gemini 1.5 Pro</b> للواجهات الأمامية، و <b>GPT-4o Codex</b> لإصلاح الأخطاء.</span>
</li>
<li class="flex items-start">
<span class="ml-3 mt-1 text-primary"></span>
<span><b>البحث العميق (Deep Research):</b> إذا واجهت مشكلة تقنية نادرة، اطلب من الوكيل تفعيل ميزة البحث العميق لتزويده بأحدث الحلول من التوثيقات الرسمية مباشرة.</span>
</li>
</ul>
<div class="pt-6 border-t border-stone-100 dark:border-slate-700 text-center">
<p class="font-bold text-primary text-xl">حقوق المحتوى متاحة للجميع</p>
</div>
</div>
</div>
</section>
</main>
<!-- زر العودة للأعلى -->
<button id="backToTop" class="fixed bottom-8 left-8 p-4 bg-primary text-white rounded-full shadow-2xl opacity-75 hover:opacity-100 invisible transition-all duration-300 z-50">
<span class="text-xl"></span>
</button>
<!-- تذييل الصفحة -->
<footer class="bg-stone-100 dark:bg-slate-950 py-12 border-t border-stone-200 dark:border-slate-800">
<div class="max-w-7xl mx-auto px-4 text-center">
<p class="text-stone-500 dark:text-slate-400">طُور هذا التطبيق التعليمي لتعزيز المهارات البرمجية باستخدام OpenCode</p>
</div>
</footer>
<!-- JavaScript Logic -->
<script>
// --- 1. إدارة الوضع الليلي ---
const themeToggle = document.getElementById('themeToggle');
const themeIcon = document.getElementById('themeIcon');
const html = document.documentElement;
themeToggle.addEventListener('click', () => {
html.classList.toggle('dark');
const isDark = html.classList.contains('dark');
themeIcon.innerText = isDark ? '☀️' : '🌙';
localStorage.setItem('theme', isDark ? 'dark' : 'light');
});
// استعادة الوضع المفضل للمستخدم
if (localStorage.getItem('theme') === 'dark') {
html.classList.add('dark');
themeIcon.innerText = '☀️';
}
// --- 2. زر العودة للأعلى ---
const backToTop = document.getElementById('backToTop');
window.addEventListener('scroll', () => {
if (window.pageYOffset > 400) {
backToTop.classList.remove('invisible');
backToTop.classList.add('visible', 'opacity-75');
} else {
backToTop.classList.add('invisible');
backToTop.classList.remove('visible', 'opacity-100');
}
});
backToTop.addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// --- 3. محاكاة الروابط النصية (الوقاية من الـ Blobs) ---
function openLink(url) {
window.open(url, '_blank');
}
// --- 4. إعدادات PWA (Service Worker) ---
// ملاحظة: هذا مجرد تمثيل للخدمة لتمكين القابلية للتثبيت في بيئات المتصفح
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
const swCode = `
self.addEventListener('install', (event) => {
event.waitUntil(caches.open('opencode-edu-v1').then((cache) => {
return cache.addAll(['/', '/index.html']);
}));
});
self.addEventListener('fetch', (event) => {
event.respondWith(caches.match(event.request).then((response) => {
return response || fetch(event.request);
}));
});
`;
// تمييز الكود لغرض التوضيح فقط
});
}
// --- 5. منطق SPA بسيط (Navigation Highlighting) ---
const sections = document.querySelectorAll('section');
const navLinks = document.querySelectorAll('nav a');
window.addEventListener('scroll', () => {
let current = '';
sections.forEach(section => {
const sectionTop = section.offsetTop;
const sectionHeight = section.clientHeight;
if (pageYOffset >= (sectionTop - 100)) {
current = section.getAttribute('id');
}
});
navLinks.forEach(link => {
link.classList.remove('text-primary', 'font-bold');
if (link.getAttribute('href').includes(current)) {
link.classList.add('text-primary', 'font-bold');
}
});
});
</script>
<!-- نموذج Manifest للـ PWA -->
<script type="application/json" id="manifest">
{
"name": "OpenCode EDU Course",
"short_name": "OpenCodeEDU",
"start_url": ".",
"display": "standalone",
"background_color": "#f5f5f4",
"theme_color": "#0ea5e9",
"icons": [
{
"src": "https://cdn-icons-png.flaticon.com/512/2103/2103633.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
</script>
</body>
</html>