Rawy
منصة قراءة رقمية عربية — كتب إلكترونية وكتب صوتية وبودكاست، مع اشتراكات ولوحة تحكم للناشرين وصلاحيات حسب نوع المحتوى.
- دَوري
- مهندس برمجيات Full Stack
- الفترة
- فبراير 2026 — أغسطس 2026
- الحالة
- مُنجز

رَوي منصّة نشر رقمي عربية تغطي أربعة أنواع من المحتوى: الكتب الإلكترونية والكتب الصوتية والبودكاست والدورات. يُباع الوصول عبر خطط اشتراك مخصّصة لكل نوع محتوى، ويضبط الناشرون بأنفسهم معايناتهم المجانية، فيما يغذّي حسابٌ آلي للأرباح مسارات دفع مستحقات الناشرين، ويُدار ذلك كله من لوحتي تحكّم مخصّصتين للناشر والمشرف.
تُخزَّن الوسائط على Cloudflare R2 وتُقدَّم عبر طلبات HTTP range، فيبدأ القارئ ومشغّل الصوت من النطاق المطلوب بدلاً من تنزيل الملفات كاملة. تُعالَج الصور المرفوعة إلى مشتقات WebP بواسطة sharp، وتُنتَج عقود PDF العربية بوضع طبقة نصية من pdf-lib بخط Tajawal فوق خلفية نقطية، ويحمل تطبيق React Native إلى الهاتف قارئ EPUB وقارئ القرآن ومشغّل صوت بإشعارات الوسائط، مع إشعارات FCM الفورية.
المشكلة المطلوب حلّها
تمثّلت الصعوبة الحقيقية في توصيل الوسائط وتسييل محتوى متعدد الصيغ. فتنزيل الملفات كاملة كان يوقف القارئ ومشغّل الصوت حتى يصل الكتاب أو الحلقة بأكملها. ولم يكن ممكناً أن تتشارك أربعة أنواع من المحتوى قاعدة وصول واحدة — فقد تشمل الخطة البودكاست وتستثني الدورات — وكان كل وسيط يحتاج آلية معاينة خاصة به. وفوق ذلك، كان يجب إصدار عقود الناشرين بصيغة PDF عربية سليمة التنسيق، وهو ما تتعامل معه أدوات توليد PDF الجاهزة بشكل رديء.

كيف بُني
أُعيد بناء التوصيل حول بث HTTP range من Cloudflare R2: يجلب القارئ والمشغّل نطاقات البايت عند الحاجة، فعُولجت أزمنة التحميل دون المساس بطبقة التخزين. وتسكن الصلاحيات في حقل features بصيغة jsonb داخل كل خطة اشتراك وتُفرَض بحسب نوع المحتوى، فتتركّب الخطط بحرّية بين الكتب والكتب الصوتية والبودكاست والدورات. وتسير المعاينات على المنطق نفسه لكل وسيط — نسبة مئوية من الكتاب يحدّدها الناشر، ومقطع صوتي يولَّد بـ ffmpeg للبودكاست.
على جانب الناشر، لوحة تحكّم من خمس عشرة شاشة بنظام تصميم كحلي/ذهبي، يسندها حساب آلي للأرباح يغذّي مسارات الدفع، مع لوحة مشرف منفصلة لتشغيل المنصّة. وتُولَّد العقود بوضع طبقة نصية من pdf-lib بخط Tajawal فوق خلفية نقطية — تفادياً لعطب تشكيل العربية في أدوات PDF — ويُخرج خطُّ أنابيب sharp مشتقات WebP لكل صورة مرفوعة.
ماذا يفعل
بث بطلبات HTTP range
حلّت طلبات نطاقات البايت من Cloudflare R2 محلّ تنزيل الملفات كاملة، فعالجت بطء فتح القارئ ومشغّل الصوت في الكتب والحلقات الكبيرة.
صلاحيات لكل نوع محتوى
تخزّن كل خطة اشتراك صلاحياتها في حقل features بصيغة jsonb، وتُفرَض على الكتب والكتب الصوتية والبودكاست والدورات كلٌّ على حدة.
معاينات مجانية يحدّدها الناشر
لكل وسيط آليته الخاصة: نسبة مئوية من الكتاب يختارها الناشر، ومقطع صوتي يولَّد بـ ffmpeg للبودكاست.
أرباح ومدفوعات آلية
تُحسب الأرباح آلياً وتغذّي مسارات دفع مستحقات الناشرين، وتُعرض في لوحة ناشر من خمس عشرة شاشة بطابع كحلي/ذهبي، إلى جانب لوحة مشرف مستقلة.
تطبيق React Native للهاتف
قارئ EPUB بوضع غامر، وقارئ قرآن، ومشغّل صوت بإشعارات الوسائط، مع إشعارات FCM الفورية.
عقود PDF عربية
تُولَّد بوضع نص pdf-lib بخط Tajawal فوق خلفية نقطية، فيخرج النص العربي سليم العرض.

نظرة أقرب

بُني باستخدام
الواجهة الأمامية
يجمع العرض من جهة الخادم فهرس المحتوى العام ولوحتي التحكّم في إطار واحد، فتصل صفحات المحتوى مُصيَّرة جاهزة بدل هيكل فارغ ينتظر التحميل.
نموذج مُنمَّط واحد للخطط والصلاحيات والمحتوى يسري عبر الـ API والويب والهاتف، وهو أمر حاسم عندما يقرّر حقل features بصيغة jsonb ما يحقّ للمستخدم فتحه.
حافظت الأصناف الأداتية على اتساق نظام التصميم الكحلي/الذهبي عبر شاشات الناشر الخمس عشرة ولوحة المشرف دون ملفات تنسيق موازية لكل واجهة.
الهاتف
قاعدة شيفرة واحدة تضم قارئ EPUB وقارئ القرآن ومشغّل الصوت بإشعارات الوسائط وإشعارات FCM على المنصتين المحمولتين معاً.
الخلفية
خادم Node خفيف يناسب واجهة برمجية مسارها الأكثر استخداماً هو خدمة طلبات الوسائط بنطاقات البايت وردود JSON صغيرة.
البيانات
تحتاج الاشتراكات والأرباح والمدفوعات إلى تكامل علائقي، بينما تستقر خريطة features لكل خطة بشكل طبيعي في عمود jsonb ضمن قاعدة البيانات نفسها.