Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
منصة كوبونات وخصومات Production-ready، مبنية بـ Next.js 15 (App Router) + TypeScript + Prisma + PostgreSQL، مع لوحة تحكم كاملة لإدارة المحتوى بدون لمس الكود. 1. التقنيات المستخدمة 2. التثبيت المحلي 3. إعداد قاعدة البيانات 4. التشغيل محليًا 5. النشر على Vercel 6. كيف أضيف محتوى جديد؟ 7. بنية المشروع 8. الأمان المتطلبات • Node.js 18.18 أو أحدث • حساب على Supabase أو Neon (قاعدة بيانات PostgreSQL مجانية) — أو أي PostgreSQL آخرREADME 전문 보기 ↗
منصة كوبونات وخصومات Production-ready، مبنية بـ Next.js 15 (App Router) + TypeScript + Prisma + PostgreSQL، مع لوحة تحكم كاملة لإدارة المحتوى بدون لمس الكود.
| الطبقة | التقنية |
|---|---|
| Framework | Next.js 15 (App Router, Server Components, Server Actions) |
| اللغة | TypeScript |
| التصميم | Tailwind CSS |
| قاعدة البيانات | PostgreSQL عبر Prisma ORM |
| تسجيل الدخول | NextAuth.js (Credentials Provider) |
| التحقق من المدخلات | Zod + react-hook-form |
| الاستضافة المستهدفة | Vercel |
# 1. ثبّت الحزم
npm install
# 2. انسخ ملف البيئة وعبّي القيم
cp .env.example .env
افتح .env وعبّي:
DATABASE_URL="رابط-قاعدة-البيانات-من-Supabase-أو-Neon"
NEXTAUTH_SECRET="نص-عشوائي-طويل" # ولّده بأمر: openssl rand -base64 32
NEXTAUTH_URL="http://localhost:3000"
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
أسهل خيار: Supabase (مجاني):
DATABASE_URL بملف .env (استبدل [YOUR-PASSWORD] بكلمة مرور قاعدة البيانات الحقيقية)npm run db:push
هذا الأمر يقرأ prisma/schema.prisma وينشئ كل الجداول تلقائيًا بقاعدة البيانات.
npm run db:seed
هذا بيضيف:
[email protected] / Admin@123456⚠️ مهم جدًا: غيّر كلمة مرور الأدمن فورًا بعد أول تسجيل دخول (من قاعدة البيانات مباشرة أو Prisma Studio)، ولا تترك بيانات الدخول الافتراضية على موقع منشور فعليًا.
npm run dev
npm run db:studio # واجهة رسومية لتصفح/تعديل قاعدة البيانات مباشرة
npm run build # بناء نسخة الإنتاج (يتأكد من عدم وجود أخطاء)
npm run lint # فحص جودة الكود
ارفع المشروع على GitHub:
git init
git add .
git commit -m "Initial commit"
git remote add origin <رابط-مستودعك-على-GitHub>
git push -u origin main
من vercel.com:
أضف متغيرات البيئة (Project Settings → Environment Variables):
DATABASE_URL=رابط قاعدة بياناتك الحقيقية (Production)
NEXTAUTH_SECRET=نفس القيمة أو قيمة جديدة عشوائية
NEXTAUTH_URL=https://your-domain.vercel.app
NEXT_PUBLIC_SITE_URL=https://your-domain.vercel.app
اضغط Deploy. Vercel بيشغّل prisma generate && next build تلقائيًا (معرّف بـ package.json).
بعد أول نشر، شغّل الـ migration وseed مرة وحدة (من جهازك، موجّه لقاعدة بيانات الإنتاج نفسها):
# تأكد إن .env عندك يشاور لقاعدة بيانات الإنتاج قبل هذا الأمر
npm run db:push
npm run db:seed
Project Settings → Domains → أضف دومينك، وحدّث NEXTAUTH_URL وNEXT_PUBLIC_SITE_URL بالقيمة الجديدة.
كل الإضافة من لوحة التحكم /admin — بدون لمس أي سطر كود.
لوحة التحكم → المتاجر → إضافة متجر
→ عبّي: الاسم، الرابط (يتولّد تلقائيًا)، الشعار، الوصف، التصنيف
→ اضغط "إضافة المتجر"
يحدث تلقائيًا خلف الكواليس:
/store/[slug] فورًا وتكون قابلة للفهرسة/stores وبصفحة تصنيفهsitemap.xml تلقائيًالوحة التحكم → الكوبونات → إضافة كوبون
→ اختر المتجر
→ عبّي: العنوان، الكود (لو النوع "كود خصم")، نص الخصم، الوصف
→ اضغط "إضافة الكوبون"
يحدث تلقائيًا:
/store/[store-slug]/coupon/[coupon-slug] فورًا/coupons العامةلوحة التحكم → التصنيفات → إضافة تصنيف
→ عبّي: الاسم (عربي/إنجليزي)، الرابط، الوصف، الأيقونة
→ اضغط "إضافة التصنيف"
بعدها، لما تضيف متجرًا أو كوبونًا، رح يظهر بقائمة التصنيفات المتاحة للاختيار.
لوحة التحكم → المقالات → إضافة مقال
→ عبّي: العنوان، الرابط، الصورة الرئيسية، المقتطف، المحتوى
→ اختر الحالة: مسودة (Draft) أو منشور (Published)
→ اضغط "إضافة المقال"
نصيحة كتابة المحتوى: افصل بين الفقرات بسطر فاضي، وضع ## قبل أي عنوان فرعي داخل النص، مثال:
هذه فقرة مقدمة عن الموضوع.
## العنوان الفرعي الأول
هذه فقرة تحت العنوان الفرعي.
المقال يظهر بـ /blog فقط لو حالته "منشور".
/deals أو /brand/[slug])؟الخطوات العامة لأي نوع محتوى جديد:
model جديد بـ prisma/schema.prisma (بنفس نمط حقول SEO الموجودة بباقي الجداول: seoTitle, seoDescription, noindex...)، ثم شغّل npm run db:pushsrc/app/ يطابق شكل الرابط اللي تبيه (مثلًا src/app/deals/page.tsx أو src/app/brand/[slug]/page.tsx)src/components/public/ لو المحتوى مختلف شكليًا عن الموجود، أو أعد استخدام CouponCard/StoreCard الموجودة لو الشكل مشابهxxxMetadata() جديدة بـ src/lib/seo.ts بنفس نمط storeMetadata/couponMetadata الموجودةsrc/app/sitemap.ts يجيب كل صفوف الجدول الجديد ويحولها لروابطsrc/app/admin/[type]/ (list, new, [id]) + Server Actions بـ src/lib/actions-[type].ts، بنفس نمط actions-store.ts بالضبط (نسخ وتعديل أسماء الحقول)هذا النمط (Content-driven) يعني: كل نوع محتوى جديد يتكرر فيه نفس البنية (Schema → Route → SEO → Sitemap → Admin CRUD)، فبمجرد ما تبني نوع واحد صح، إضافة أنواع تانية تصير نسخ-وتعديل سريع.
prisma/
schema.prisma ← كل نماذج قاعدة البيانات
seed.ts ← بيانات تجريبية
src/
app/
(صفحات الموقع العام: /, /stores, /store/[slug], /coupons, /category/[slug], /blog...)
admin/ ← لوحة التحكم (محمية بـ middleware)
api/auth/ ← NextAuth API route
sitemap.ts ← Sitemap ديناميكي
robots.ts ← Robots.txt ديناميكي
components/
ui/ ← Design System (Button, Form fields)
public/ ← CouponCard, StoreCard, Header, Footer...
admin/ ← جداول ونماذج لوحة التحكم
lib/
db.ts ← Prisma Client
auth.ts ← إعدادات NextAuth
seo.ts ← نظام SEO المركزي (generateMetadata helpers)
validations.ts ← Zod schemas
actions-*.ts ← Server Actions لكل نوع محتوى (CRUD)
i18n.ts ← نصوص الواجهة (عربي/إنجليزي)
utils.ts ← دوال مساعدة عامة
middleware.ts ← حماية /admin
/admin محمية بـ middleware على مستوى الشبكة (Edge) — ما فيه احتمال وصول بدون تسجيل دخول صحيحDATABASE_URL, NEXTAUTH_SECRET) بمتغيرات بيئة فقط، أبدًا بالكود/admin و /api ممنوعين من الفهرسة عبر robots.tsهذا المشروع مبني بأفضل أساس تقني ممكن للسيو (Metadata مستقلة لكل صفحة، Canonical، Structured Data، Sitemap ديناميكي، Internal Linking، أداء عالي). لكن الظهور الفعلي بنتائج جوجل يعتمد أيضًا على عوامل خارج نطاق الكود: جودة المحتوى المستمرة، الروابط الخارجية (Backlinks)، عمر الدومين، والمنافسة. هذا المشروع يعطيك الأساس الصحيح للنمو — النتيجة النهائية تعتمد على استمرارية إضافة محتوى مفيد وحقيقي.