منصة تواصل اجتماعي مفتوحة للجميع — منشورات وريلز وقصص وصفحات ومحادثة ذكية، بواجهة عربية أولاً وتدعم ست لغات.
الموقع: https://hostaka.fun
- نظرة عامة
- المميزات
- التقنيات المستخدمة
- هيكل المشروع
- التشغيل المحلي
- متغيرات البيئة
- النشر على Vercel
- واجهة البرمجة (API)
- قاعدة البيانات
- نظام Hostaka البيئي
- الأمان والخصوصية
- الواجهة: اللغات والثيمات والإيموجي
- الأرشفة (SEO)
- ملفات توثيق إضافية
- الترخيص
هوستاكا تطبيق ويب كامل (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).
- مساعدة ذكية مبنية على 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.json (يبني server.js عبر @vercel/node ويضمّن public/** وdatabase.js).
- استورد المستودع في Vercel.
- أضف متغيرات البيئة من الجدول أعلاه في Project Settings → Environment Variables.
- انشر (Deploy). كل المسارات تُوجَّه إلى
server.js.
بعد النشر: أضف النطاق إلى Google Search Console وأرسل https://YOUR-DOMAIN/sitemap.xml (التفاصيل في SECURITY-NOTES.md).
كل المسارات تحت /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
بعض الخدمات انتقلت إلى مستودعات ونطاقات فرعية مستقلة، وتبقى مساراتها هنا كصفحات تحويل خفيفة تنقل توكن الدخول:
| الخدمة | النطاق | المسار هنا |
|---|---|---|
| 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.
/robots.txtو/sitemap.xmlديناميكيان (الحسابات العامة، الصفحات، وآخر 3000 منشور عام).- وسوم
canonicalوrobotsوOpen Graph وصور معاينة مولّدة تلقائياً، وبيانات منظّمة JSON-LD للصفحة الرئيسية والملفات الشخصية.
| الملف | المحتوى |
|---|---|
EMOJI-NOTES.md |
آلية حزمة الإيموجي وربطها بالصفحات |
SECURITY-NOTES.md |
الأرشفة السريعة، وحماية الكود، وخطوات ما بعد النشر |
هذا المشروع خاص (Proprietary) — جميع الحقوق محفوظة. الشروط الكاملة في ملف LICENSE. المصدر متاح للعرض العلني لأغراض التطوير والعرض فقط، ولا يمنح ذلك أي ترخيص مفتوح المصدر. يُمنع نسخ الكود أو تعديله أو توزيعه أو استغلاله تجارياً دون إذن كتابي مسبق من المالك (للاتصال: https://github.com/Misha-Chan).