موقع عربي RTL باستخدام Astro وReact، مع Worker للخادم وقاعدة D1 على Sites.
الموقع: https://kamlin-cleaning-eg.equalpixie8.chatgpt.site لوحة الإدارة: https://kamlin-cleaning-eg.equalpixie8.chatgpt.site/admin/
npm ci
npm run db:generate # عند تعديل db/schema.ts فقط، ولا تُعدّل الترحيلات السابقة
npm run build
npm testbuild يولد واجهة Astro ثم حزمة Worker بموارد الواجهة المضمنة، مع بيانات نشر Sites والترحيلات. npm run dev يعاين واجهة Astro فقط ولا يشغّل APIs المركزية. تكامل Astro/React وإعداد Cloudflare الأصلي محفوظان، لكن نشر اللوحة المركزية يتم عبر حزمة Worker، وليس مجلد static وحده.
الرئيسية /، الخدمات /services/ وتسع صفحات تفاصيل، الأسعار /prices/، الحجز /booking/، الخصوصية /privacy/، الإدارة /admin/، صفحة 404 وخريطة موقع.
الدخول عبر حساب ChatGPT المصرح له، وليس بكلمة مرور مكتوبة في ملفات الواجهة. منصة الاستضافة تتحقق من الدخول، والخادم يتحقق من حساب المسؤول في كل API. البريد المسموح مضبوط في إعداد خادم ADMIN_EMAIL، ويربط أول دخول معرّف المستخدم الثابت في جدول admin_users.
- تعديل أسماء ووصف وبنود الخدمات وأسعار البداية؛ السعر الفارغ يعني «حسب المعاينة».
- حفظ مركزي مع رقم إصدار لمنع الكتابة فوق تعديلات جلسة أخرى.
- عرض 30 حجزًا في الصفحة، مع فلترة حسب الحالة.
- الحالات: جديد، تم التواصل، مؤكد، مكتمل، ملغي.
- حذف الحجز نهائيًا بعد تأكيد من المسؤول.
- بيانات العملاء لا تُعرض من APIs عامة.
الأسعار الأولية في src/data/services.ts تُستخدم عندما لا يوجد تخصيص محفوظ. بعد أول حفظ من اللوحة تصبح بيانات D1 هي المصدر المعتمد. تظهر التعديلات بعد تحديث الصفحة دون إعادة نشر. رسائل واتساب اختيارية، والحجز يُحفظ مركزيًا أولًا، ولا يُعد تأكيدًا للسعر أو الموعد.
ADMIN_EMAIL: بريد حساب ChatGPT المسموح بإدارة الموقع، سر في إعدادات الاستضافة.
RATE_LIMIT_SECRET: قيمة عشوائية سرية لتجزئة مفاتيح حد الطلبات.
DB: ربط D1 في .openai/hosting.json.
لا تضع هذه القيم في المصدر أو ملفات الواجهة. تسجيل الدخول والخروج وcallback تديرها منصة Sites؛ لا تنشئ جلسة أو كلمة مرور بديلة.
| المسار | الوظيفة |
|---|---|
src/components/AdminPanel.tsx |
واجهة إدارة الأسعار والحجوزات |
src/pages/admin.astro |
صفحة الإدارة |
src/components/BookingForm.tsx |
إرسال مركزي مع منع تكرار نفس الطلب عند إعادة المحاولة |
server/worker.mjs |
APIs والصلاحيات وتحديث HTML العام من البيانات المركزية |
server/validation.mjs |
التحقق من الحقول على الخادم |
scripts/build-worker.mjs |
ربط الواجهة والخادم في حزمة النشر |
db/schema.ts وdrizzle/ |
مخطط قاعدة البيانات وترحيلاتها |
tests/admin.test.mjs |
اختبار Worker وD1 محليًا عبر Miniflare |
حد الطلبات العامة: حتى 10 طلبات في الساعة لكل عنوان وصول متاح (أو رقم هاتف عند غيابه)، مع حقل مضاد للروبوتات وموافقة إلزامية والتحقق من المنشأ. لا يوجد دفع إلكتروني أو رسائل تسويقية تلقائية أو رفع صور في هذه النسخة.
أعد بناء الحزمة الكاملة، ثم ادفع المصدر واحفظ نسخة وانشر عبر Sites مع الحفاظ على project_id وD1 والجمهور الحالي. نشر ملفات Astro الثابتة وحدها يفقد حماية اللوحة وAPIs والحفظ المركزي. بعد تحديث GitHub وحده يجب إعادة النشر على Sites حتى تُطبّق تغييرات الكود؛ تعديل الأسعار من اللوحة لا يحتاج إعادة نشر.
عند تغيير نطاق الموقع حدّث astro.static.config.mjs وpublic/robots.txt. لا تعدّل ترحيلات تم تطبيقها؛ أضف ترحيلات جديدة فقط.