تعيش لوحة التحكم في /ar/dashboard و/en/dashboard، ولا تفهرسها محركات البحث. العناوين القديمة ما زالت تعمل: /admin/… تحوّل إلى /dashboard/…، و/account إلى /dashboard/bookings، و/notifications إلى /dashboard/notifications.
من يرى ماذا
يدخل الجميع من الصفحة نفسها ويصلون إلى /dashboard، فتعرض لكلٍّ صفحة تناسب دوره:
| الدور | يفتح |
|---|---|
| مدير | كل ما تحت /dashboard، بما فيه حسابات الفريق |
| كاشير | الحجوزات والاستقبال وكاونتر المقهى ونقطة البيع والبار وحسابات الأعضاء |
| باريستا | شاشة البار في المقهى |
| عضو | ضيف لعميله في الاستقبال (بمطابقة الهاتف ثم البريد) باقة ساعات سارية: باقته وزياراته وحجوزاته |
| ضيف | حجوزاته وإشعاراته وملفه |
العضو ليس دوراً مخزّناً — هو USER لديه باقة سارية، فلا يختلف أبداً عمّا باعه الاستقبال.
الصفحة الرئيسية
على نمط لوحة هوقورتس، بالأقسام الثلاثة نفسها لكل دور:
- الآن — بطاقة تنقلب تعرض أهم ما يعني صاحبها (سبيس اليوم، طابور البار، حجزك القادم أو باقتك)، وبجانبها وقت بورتسودان وطقسها (Open-Meteo، يُخزَّن 30 دقيقة).
- نظرة سريعة — أربعة أرقام: الحجوزات والرسائل والإشعارات والفعاليات للمدير؛ وحجوزاتك وإشعاراتك والفعاليات والعضوية للضيف.
- إجراءات سريعة — أكثر أربع مهام يقوم بها الدور.
تحتها يبقى للمدير ملخّص المقهى اليوم وأحدث الحجوزات والرسائل والفعاليات؛ ويرى الضيف حجوزاته القادمة والعضو آخر زياراته.
/dashboard/bookings تراعي الدور أيضاً: يدير الاستقبال كل الحجوزات هناك، ويرى الضيف أو العضو حجوزاته. أما /dashboard/profile و/dashboard/notifications فللجميع.
الجلسات
الدخول عبر Auth.js (البريد وكلمة المرور، أو رمز بالبريد، أو قوقل أو فيسبوك). يُعاد قراءة الحساب في كل طلب، فإيقاف حساب أو تغيير دوره يسري فوراً.
- يجري
src/proxy.tsفحصاً متفائلاً لملف الجلسة ويحوّل إلى صفحة الدخول. - تحمي
requireUser()الإطار وصفحات الجميع، وrequireAdmin()كل صفحة وإجراء خاص بالمدير، وrequireStaff(locale, roles)وstaffFor(roles)شاشات الاستقبال والمقهى. - من يفتح صفحة خارج دوره يُحوَّل إلى
/dashboard.
ما دام لا يوجد أي حساب، فالدخول بكلمة ADMIN_PASSWORD ينشئ أول مدير بالبريد الذي تكتبه. بعد ذلك لا تفتح ADMIN_PASSWORD شيئاً — أدِر الفريق من /dashboard/staff، أو شغّل STAFF_PASSWORD='…' pnpm staff:create <email> "<name>" ADMIN لاستعادة مدير فقد الدخول.
الأقسام
| القسم | يدير |
|---|---|
| الوارد | التسجيلات والطلبات والاستفسارات |
| الحجوزات | طلبات الحجز وحالاتها |
| الفعاليات | الفعاليات والمتحدثون |
| البرامج | البرامج والوحدات |
| المجتمع | الأشخاص والشركات |
| الفرص | الوظائف، والمنح، والزمالات، والمناقصات |
| القصص | القصص التحريرية |
| الشركاء | الشركاء والرعاة |
| المقهى | الكاونتر ونقطة البيع والبار والحسابات والقائمة والمبيعات — انظر المقهى |
| الفريق | حسابات الفريق وأدوارهم |