Skip to content
Misha-ChanPublic

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

هوستاكا (Hostaka)

منصة تواصل اجتماعي مفتوحة للجميع — منشورات وريلز وقصص وصفحات ومحادثة ذكية، بواجهة عربية أولاً وتدعم ست لغات.

الموقع: https://hostaka.fun


المحتويات


نظرة عامة

هوستاكا تطبيق ويب كامل (Full-stack) مبني على Node.js + Express في الخلفية، وواجهة HTML/CSS/JavaScript بسيطة بدون إطار عمل في المجلد public/. يعمل على Vercel كدالة serverless، ويخزّن بياناته في قاعدة Turso (libSQL).

المشروع جزء من منظومة خدمات مترابطة (مراسلة، لوحة إدارة، ويكي، متجر تطبيقات...) تتشارك حساب المستخدم — انظر نظام Hostaka البيئي.

المميزات

الحسابات والأمان

  • تسجيل بالبريد الإلكتروني مع كود تأكيد (يُرسل عبر Resend) وصلاحية 10 دقائق.
  • تسجيل الدخول بـ JWT، واستعادة كلمة المرور بكود بريدي.
  • مصادقة ثنائية (2FA) عبر تطبيقات TOTP (Google Authenticator / Authy) مع رمز QR وأكواد استرجاع احتياطية.
  • إدارة الجلسات والأجهزة (عرض الجلسات النشطة وإنهاؤها)، وسجل أحداث أمنية للحساب.
  • تغيير اسم المستخدم/البريد/كلمة المرور بتأكيد كود، وحذف الحساب نهائياً بتأكيد مزدوج.
  • تنزيل نسخة من بياناتك بصيغة JSON أو رفعها إلى Google Drive.
  • طلب توثيق الحساب (علامة التوثيق) بمراجعة الإدارة.

المحتوى والتفاعل

  • المنشورات مع صور وفيديو، وروابط ذات معاينة تلقائية، وهاشتاغات وإشارات (@).
  • مستويات الخصوصية: عام / أصدقاء مقربون / خاص / مسودة / مجدول (نشر لوقت لاحق)، وتثبيت منشور بالملف الشخصي.
  • التفاعلات (إعجاب، أحببته، أضحكني، أحزنني، أغضبني) والتعليقات والردود.
  • الريلز (فيديو عمودي) وHostaka Video (فيديو أفقي).
  • القصص تختفي تلقائياً بعد 24 ساعة، مع عدّاد المشاهدات.
  • المحفوظات مع تصنيفها في مجموعات.
  • الصفحات/القنوات (Pages) قابلة للمتابعة وللنشر باسمها.
  • المتابعة، والحظر، وقائمة الأصدقاء المقربين، والحسابات الخاصة.
  • الإشعارات (تعليق، إشارة، رد الدعم، إشعارات الإدارة).
  • الخلاصة (Feed) بتحميل تدريجي (10 منشورات في كل مرة)، وتفضيل منشورات من تتابعهم، وبحث على السيرفر.

المراسلة

  • محادثات فردية وجماعية (مؤشر كتابة، مؤشر قراءة، ردود، تفاعلات، كنيّات).
  • تشفير الرسائل بمفتاح محلي مع نسخة احتياطية محمية برمز PIN من 6 أرقام (crypto.js / pin-modal.js).

شيزي (Shizi AI)

  • مساعدة ذكية مبنية على Gemini، بحدّ يومي (50 رسالة)، تدعم تنسيق ماركداون وصور Fluent Emoji.

الدعم والإدارة

  • مركز دعم (شكاوى، بلاغات، اقتراحات) مع ردود الإدارة.
  • بلاغات عن المنشورات والمستخدمين والرسائل.
  • واجهة برمجية للإدارة (/api/admin/*): مستخدمون، منشورات، توثيق، سجلات، تحليلات، إشعارات جماعية.

التخصيص

  • 20 ثيماً بألوان صناعية، ووضع فاتح/غامق، وخلفية مخصصة للمنصة (صورة أو فيديو) تتكيّف معها الألوان.
  • 6 لغات: العربية، English، Français، Русский، 中文، 日本語.

التقنيات المستخدمة

الطبقة التقنية
الخادم Node.js, Express 4
قاعدة البيانات Turso / libSQL (@libsql/client)
المصادقة JWT, bcryptjs, TOTP (otplib) + QR (qrcode)
الذكاء الاصطناعي Google Gemini API
البريد Resend
رفع الوسائط Cloudinary (فيديو وصور) + ImgBB (صور)
صور المعاينة (OG) @napi-rs/canvas
التحليلات @vercel/analytics + جداول زيارات داخلية
الواجهة HTML/CSS/JS بدون إطار، Fluent Emoji (مايكروسوفت)
الاستضافة Vercel (Serverless)

هيكل المشروع

hostaka/
├── server.js              # الخادم: المسارات، المصادقة، الـ API، حقن OG/SEO
├── database.js            # الاتصال بـ Turso، إنشاء الجداول، الاستعلامات (q.*)
├── ogimage.js             # توليد صور المعاينة للمشاركة
├── vercel.json            # إعداد النشر على Vercel
├── package.json
├── .env.example           # نموذج متغيرات البيئة
├── EMOJI-NOTES.md         # توثيق حزمة الإيموجي
├── SECURITY-NOTES.md      # ملاحظات الأرشفة والحماية
└── public/                # الواجهة
    ├── index.*            # الصفحة الرئيسية والخلاصة
    ├── profile.*          # الملف الشخصي ومحرر المنشورات
    ├── post.* / short.* / video.*    # منشور، ريلز، فيديو
    ├── save.*             # المحفوظات
    ├── page.*             # الصفحات/القنوات
    ├── shiziai.*          # محادثة شيزي
    ├── manager.*          # إدارة الحساب والأمان
    ├── support.*          # الدعم
    ├── login.*            # الدخول والتسجيل
    ├── chat.* / group.*   # المراسلة (تحوّل حالياً إلى Orbithub)
    ├── i18n.js, translations/{ar,en}.json   # الترجمة
    ├── theme.css, themes.js                 # الثيمات
    ├── emoji.js, emoji.css, emoji-catalog.json
    ├── crypto.js, pin-modal.js              # تشفير الرسائل
    ├── modal.js, dialogs.js                 # نوافذ التأكيد
    ├── protect.js                           # ردع نسخ المصدر
    └── ecosystem-switcher.js                # زر التنقل بين خدمات المنظومة

التشغيل المحلي

المتطلبات: Node.js (يُنصح بالإصدار 18 أو أحدث) وحساب Turso.

git clone https://github.com/Misha-Chan/hostaka.git
cd hostaka
npm install
cp .env.example .env      # ثم عبّئ القيم (انظر الجدول أدناه)
npm start                 # أو: npm run dev

ثم افتح المتصفح على العنوان الذي يطبعه الخادم. تُنشأ الجداول تلقائياً عند أول تشغيل.

متغيرات البيئة

المتغير الوصف مطلوب
TURSO_DATABASE_URL رابط قاعدة Turso (libsql://...) ✅
TURSO_AUTH_TOKEN توكن الوصول لقاعدة Turso ✅
JWT_SECRET سرّ توقيع التوكنات (نص عشوائي طويل) ✅
ADMIN_EMAIL / ADMIN_PASS حساب المدير الأساسي ✅
RESEND_API_KEY مفتاح Resend لإرسال أكواد التأكيد ✅
RESEND_FROM_EMAIL عنوان المرسِل، مثل Hostaka <[email protected]> ✅
CLOUDINARY_CLOUD_NAME / CLOUDINARY_API_KEY / CLOUDINARY_API_SECRET رفع الفيديو والوسائط (أو CLOUDINARY_URL بدلاً منها) للوسائط
IMGBB_API_KEY رفع الصور عبر ImgBB للصور
GEMINI_API_KEY تفعيل محادثة شيزي لشيزي

متغيرات اختيارية لربط المنظومة (لها قيم افتراضية): ORBITHUB_BASE، CONSOLE_BASE، AETHERCAST_BASE، APPS_BASE، WIKI_BASE. وربط Google Drive للنسخ الاحتياطي يحتاج إعداد بيانات اعتماد Google على الخادم.

⚠️ لا ترفع ملف .env إلى GitHub أبداً (مُستثنى في .gitignore).

النشر على Vercel

الإعداد جاهز في vercel.json (يبني server.js عبر @vercel/node ويضمّن public/** وdatabase.js).

  1. استورد المستودع في Vercel.
  2. أضف متغيرات البيئة من الجدول أعلاه في Project Settings → Environment Variables.
  3. انشر (Deploy). كل المسارات تُوجَّه إلى server.js.

بعد النشر: أضف النطاق إلى Google Search Console وأرسل https://YOUR-DOMAIN/sitemap.xml (التفاصيل في SECURITY-NOTES.md).

واجهة البرمجة (API)

كل المسارات تحت /api/ وتُرجع JSON. المصادقة بترويسة Authorization: Bearer <token> للمسارات المحمية.

المجموعة الغرض
/api/auth/*, /api/login التسجيل، تأكيد البريد، الدخول، استعادة كلمة المرور
/api/account/* إدارة الحساب: الجلسات، 2FA، تغيير البيانات، النسخ الاحتياطي، الحذف
/api/records المنشورات (قراءة، إنشاء، تعديل، حذف، تفاعلات، تعليقات)
/api/stories القصص ومشاهداتها
/api/videos, /api/upload الفيديو ورفع الوسائط
/api/saved, /api/save-collections المحفوظات ومجموعاتها
/api/pages الصفحات/القنوات
/api/users, /api/user, /api/profile المستخدمون والملفات الشخصية
/api/follow, /api/block المتابعة والحظر
/api/messages, /api/groups, /api/typing, /api/keys المراسلة وتشفيرها
/api/notifications الإشعارات
/api/shizi محادثة شيزي
/api/reports, /api/verify البلاغات وطلبات التوثيق
/api/settings إعدادات المستخدم (الخصوصية، الثيم...)
/api/admin/* عمليات الإدارة (للمدير/المشرف فقط)
/api/track تتبّع الزيارات

مثال: الخلاصة بالتحميل التدريجي

GET /api/records?limit=10&offset=0
GET /api/records?limit=30&q=كلمة_البحث

الاستجابة: { records: [...], hasMore: true, nextOffset: 10 }. بدون limit يُرجع المصفوفة كاملة (للتوافق مع الإصدارات القديمة).

الترتيب: من الأحدث للأقدم، مع تفضيل منشورات من يتابعهم المستخدم (يُعامل منشور المتابَع كأنه أحدث بـ 7 أيام). القيمة قابلة للتعديل عبر FOLLOWED_BOOST_DAYS داخل listRecords في database.js.

قاعدة البيانات

تُنشأ الجداول وتُرقّى تلقائياً من database.js عند التشغيل. أهم الجداول:

  • الحسابات: users, pending_registrations, password_resets, account_changes, user_sessions, security_events, verify_requests
  • المحتوى: records, record_reactions, record_comments, stories, story_views, saved_posts, save_collections
  • العلاقات: follows, blocks, close_friends, pages, page_follows
  • المراسلة: messages, message_reactions, groups, group_members, group_messages, group_message_reactions, dm_nicknames, typing_status, key_backups
  • أخرى: notifications, reports, shizi_messages, apps, app_reviews, wiki_posts, news_posts, page_views, visitor_heartbeats, server_logs

نظام Hostaka البيئي

بعض الخدمات انتقلت إلى مستودعات ونطاقات فرعية مستقلة، وتبقى مساراتها هنا كصفحات تحويل خفيفة تنقل توكن الدخول:

الخدمة النطاق المسار هنا
Orbithub (المراسلة) orbithub.hostaka.fun /chat, /group
Console (لوحة الإدارة) console.hostaka.fun /admin
aethercast aethercast.hostaka.fun —
Hostaka Apps apps.hostaka.fun /apps
Wiki wiki.hostaka.fun /wiki

الملف public/ecosystem-switcher.js يضيف زراً عائماً (شبكة نقاط) للتنقل بين خدمات المنظومة، وهو مشترك بنفس الشكل في كل نطاق.

الأمان والخصوصية

  • كلمات المرور مُجزّأة بـ bcrypt، والجلسات بتوكنات JWT.
  • Rate limiting: 240 طلب/دقيقة لكل IP على مسارات /api/*.
  • رؤوس أمان: X-Frame-Options وContent-Security-Policy: frame-ancestors 'self' لمنع التضمين.
  • أكواد التأكيد بصلاحية 10 دقائق، مع حدّ للمحاولات وفاصل زمني بين الطلبات.
  • رمز PIN للنسخة الاحتياطية للتشفير يخضع لقفل مؤقت عند كثرة المحاولات الخاطئة.
  • الصفحات الخاصة والإدارية تُمنع فهرستها (noindex).
  • ملف protect.js رادع بسيط فقط (يمنع الزر الأيمن واختصارات أدوات المطوّر) ولا يُعدّ حماية حقيقية للكود. التفاصيل الصريحة في SECURITY-NOTES.md.

الواجهة: اللغات والثيمات والإيموجي

  • اللغات: كل صفحة تحمل ترجماتها، وtranslations/ar.json وen.json للنصوص المشتركة. الاتجاه (RTL/LTR) يتبدّل تلقائياً. النصوص العربية مكتوبة بالفصحى.
  • الثيمات: تُطبَّق عبر data-accent على عنصر <html> (الألوان في theme.css والمنطق في themes.js)، وتعمل مع الوضع الفاتح/الغامق (data-theme). الاختيار يُحفظ محلياً بالمفتاح hostaka_accent.
  • الإيموجي: صور Fluent Emoji تُجلب من jsDelivr وتُستبدل تلقائياً بالرموز النصية، مع منتقي بحث وتصنيفات (emoji.js). التفاصيل في EMOJI-NOTES.md.

الأرشفة (SEO)

  • /robots.txt و/sitemap.xml ديناميكيان (الحسابات العامة، الصفحات، وآخر 3000 منشور عام).
  • وسوم canonical وrobots وOpen Graph وصور معاينة مولّدة تلقائياً، وبيانات منظّمة JSON-LD للصفحة الرئيسية والملفات الشخصية.

ملفات توثيق إضافية

الملف المحتوى
EMOJI-NOTES.md آلية حزمة الإيموجي وربطها بالصفحات
SECURITY-NOTES.md الأرشفة السريعة، وحماية الكود، وخطوات ما بعد النشر

الترخيص

هذا المشروع خاص (Proprietary) — جميع الحقوق محفوظة. الشروط الكاملة في ملف LICENSE. المصدر متاح للعرض العلني لأغراض التطوير والعرض فقط، ولا يمنح ذلك أي ترخيص مفتوح المصدر. يُمنع نسخ الكود أو تعديله أو توزيعه أو استغلاله تجارياً دون إذن كتابي مسبق من المالك (للاتصال: https://github.com/Misha-Chan).

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages