نُشر · 2026-05-06 · 12 دقيقة قراءة
تحليل تقني لـ motelsystem — منصة الفنادق متعددة المستأجرين التي بنيتها وأشحنها أسبوعيًا: كيف حللتُ تقارير الجهات الحكومية المحلية، عملت ضمن ميزانية CPU 10ms في Cloudflare Workers، وجعلتُها تعمل بـ EN/AR/KU.
الخلاصة: بنيتُ منصة إدارة فنادق متعددة المستأجرين لإقليم كردستان اسمها motelsystem. تعمل ضمن ميزانية CPU 10 ميلي ثانية على Cloudflare Workers، وتُشحن بثلاث لغات: الإنجليزية والعربية والكردية، وتُصدر التقارير الحكومية المحلية بنقرة واحدة، وعملت في الإنتاج طوال 33 موجة أسبوعية. هذه التدوينة هي التحليل التقني.
لماذا كانت هناك حاجة لمنصة فندق مخصصة أصلاً
في 2024 طلب مني صديق في دهوك أن أُلقي نظرة على "نظام" موتيله. كان عبارة عن ملف Excel من 47 صفحة، طابعة موصولة عبر USB، ثلاث دفاتر مكتوبة بخط اليد، وملف ورقي لالاستمارات التنظيمية نصفها بقلم تحديد. تسجيل الوصول كان يستغرق من 30 إلى 45 دقيقة لكل ضيف. التقارير التنظيمية كانت تُرفض حوالي مرة كل أسبوعين بسبب حقول ناقصة، ولم يكن أحد يعرف أي الليالي ممتلئة حتى يصل ضيف على الباب.
كان قد جرّب منتجين SaaS فندقيين جاهزين. كلاهما فشل للأسباب الثلاثة نفسها:
- لا يتحدث أي منهما الكردية بأي شكل ذي معنى.
- لا يُصدر أي منهما ملف .docx الحكومي المحلي بالصيغة التي يقبلها المكتب فعلاً.
- لا يتعامل أي منهما مع الدينار والدولار بشكل موثوق (إن تعامل أصلاً).
النقطة الثالثة مثيرة للاهتمام لأن معظم الشركات الصغيرة/المتوسطة في كردستان تعمل بعملتين طوال اليوم. البرامج العالمية لا تنمذج هذا؛ إما أن تختار عملة واحدة وتكذب على نفسك، أو أن تحتفظ بسجل ورقي موازٍ. كلاهما سيئ.
القرارات المعمارية التي صنعت الفرق
متعدد المستأجرين منذ اليوم الأول
صممتُ مخطط قاعدة البيانات لأكثر من فندق منذ أول commit. كل عقار هو مستأجر؛ كل صف في كل جدول يحمل tenant_id؛ يفرض Supabase Row-Level Security عزلاً صارمًا. كان هذا غير قابل للتفاوض — حتى لو كان هناك عميل واحد في البداية، فإن إدخال تعدد المستأجرين لاحقًا كابوس.
Cloudflare Workers كبيئة التشغيل
Workers Free لديه حد CPU 10 ميلي ثانية لكل طلب. هذا يبدو مؤلمًا لتطبيق Next.js App Router — وهو كذلك، إلى أن تُعيد تصميمه لأجله. القواعد التي أعيش بها الآن:
- تخطي auth في middleware للمسارات المجهولة. صفحات العملاء لا تحتاج إيقاظ auth client. توفير ~3 ميلي ثانية لكل طلب.
- استخدم admin Supabase client للقراءات المجهولة،متجاوزًا RLS للبيانات العامة.
- Pre-fetch في
page.tsxبدلاً من تكديس Suspense متوازية كل واحدة منها تفتح اتصالاً جديدًا. - إعادة المحاولة التلقائية من
error.tsx. عند انقضاء CPU، يرمي Workers خطأً متزامنًا.useEffectبسيط لإعادة المحاولة يلتقط الفشل النادر دون أن يلاحظ المستخدم. - انتقل، لا تستخدم
router.refresh()بعد التغييرات الكبيرة.refreshيُعيد بناء شجرة المسار بأكملها ويتجاوز ميزانية 10 ميلي ثانية بسهولة.router.push(currentPath)الموجّه بعد التغيير يعطيك بيانات جديدة دون التكلفة.
EN/AR/KU على مستوى قاعدة البيانات
معظم التطبيقات "متعددة اللغات" تخزن الإنجليزية في الجدول الأساسي ثم تُلصق الترجمات لاحقًا. ذهبتُ في الاتجاه المعاكس: كل حقل قابل للترجمة هو ثلاثي JSON { en, ar, ku } على مستوى العمود، مع مساعد localizeContent() يُسطّح إلى أي لغة طلبها العميل. تخطيط RTL مفروض على مستوى التخطيط — وليس CSS لاتجاه النص — لذا واجهات العربية والكردية صور معكوسة، وليست صفحات LTR بنص محاذٍ لليمين.
مشكلة التقارير الحكومية وكيف حللتُها
الاستمارة الحكومية المحلية ملف .docx محدد: A4 أفقي، 10 أعمدة RTL، رأس أصفر، صفوف بيانات بألوان مرمزة (أصفر للوافدين، أخضر للضيوف الحاليين، أحمر للبيانات الناقصة). يرفض المكتب أي شيء لا يطابق هذا القالب.
حلّلتُه هندسيًا بفحص XML الـ.docx مباشرة، ثم كتبتُ مولّدًا يأخذ مجموعة ضيوف أي ليلة ويُخرج ملفًا يقبله المكتب من المحاولة الأولى. النظام يتتبع كل حقل مطلوب لكل ضيف (الهوية الوطنية، الاسم، الجنسية، الوصول، المغادرة، الغرفة، المرافقة)، يُعلِم بالبيانات الناقصة عبر شريط في لوحة التحكم قبل تشغيل التصدير، ويدعم الإقامات متعددة الليالي بحيث ضيف وصل قبل ثلاثة أيام لا يزال يظهر في تقرير الليلة.
النتيجة: صفر تقارير مرفوضة على مدى 12+ شهرًا، وانتقل وقت إعداد التقارير لموظف الاستقبال من "30 دقيقة + 30 أخرى إن كان شيء خطأ" إلى "اضغط تصدير، صحّح أي تنبيه، انتهيت."
تدفق الحجز المباشر بأقل من 90 ثانية
الحجوزات المباشرة هي التدفق النقدي لفنادق البوتيك في كردستان. وهي أيضًا حيث كان النظام القديم يحرق الوقت أكثر. بنيتُ تدفقًا في صفحة واحدة: الموظف يختار غرفة من شبكة توافر فورية، يمسح أو يُدخِل هوية الضيف، الإيداع يُسجَّل فورًا في محاسبة اليوم، ويُطبَع إيصال مزدوج — نسخة الضيف ونسخة المحاسبة — في أقل من 30 ثانية من البداية إلى النهاية. تفاصيل الهوية تتدفق إلى صف تقارير تلك الليلة تلقائيًا.
أقل من 90 ثانية إجمالاً للتعامل مع حجز مباشر، شاملاً المحادثة ومسح الهوية والمشي إلى الغرفة وتسليم المفتاح. توقّف الموظفون عن خشية حجوزات الـ11 مساءً.
CMS لجانب العميل يستخدمه المدير فعلاً
معظم برامج B2B تفشل في طبقة العميل لأن المدير لا يستطيع تحديث المحتوى دون الاتصال بالمطور. بنيتُ CMS بوتيك يتيح لمدير الفندق تحرير صور الواجهة، الأوصاف، المرافق، الأسئلة الشائعة، معلومات الاتصال، والعروض الموسمية — بالإنجليزية والعربية والكردية — من نفس لوحة التحكم التي يستخدمها للحجوزات. لا واجهات تتطلب "مطورًا". هذا الفرق بين نظام يُشحن ونظام يتعفن.
ما علّمتنيه 33 موجة إنتاج أسبوعية
الشحن أسبوعيًا كان القرار الأعلى أثرًا على الإطلاق. كل موجة كانت صغيرة بما يكفي لتكون آمنة (ميزة أو اثنتان، مُختبَرتان بالكامل)، لكن الإيقاع أجبر التحسّن المركّب. بعض النقاط البارزة:
- الموجة 12: إعادة هيكلة تدفق الحجز المباشر قلّصت وقت المعالجة 60%.
- الموجة 21: إطلاق CMS لجانب العميل ألغى 90% من طلبات "هل يمكنك تغيير…" الموجهة لي.
- الموجة 27: تتبع التقارير متعددة الليالي قبض على فئة أخطاء البيانات الناقصة من المنبع.
- الموجة 33: موجة تحسين CPU في Workers Free — كل صفحة عملاء الآن تحقق LCP أقل من 1.5 ثانية في كل كردستان.
دروس لأي شخص يبني برامج لكردستان
- توقف عن تكييف SaaS الغربي. تكلفة بناء مخصص أقل من تكلفة الصراع المستمر مع أداة لا تفهم واقعك.
- متعدد المستأجرين منذ اليوم الأول إن كان هناك أي احتمال لعميل ثانٍ.
- الترجمة على مستوى العمود، لا كفكرة لاحقة.
- الصيغة الحكومية قابلة للحل — صيغة حتمية، وبمجرد أن تحلّها هندسيًا، الفندق الثاني مجاني.
- الموجات الأسبوعية تتفوق على الإصدارات الفصليةبفارق كبير في هذه السوق.
إن كانت لديك مشكلة مماثلة
إن كنت تدير فندقًا، موتيلاً، عيادة، مدرسة، أو أي عمل في كردستان فشلت البرامج الجاهزة معه، أنا مهتم. تعدد المستأجرين يعني أنه يمكنني إدراجك على المنصة الموجودة بالفعل — لست مضطرًا لتمويل بنائها من الصفر. أرسل لي ملخصًا عبر صفحة الاتصال أو راسلني على واتساب.
مقالات ذات صلة
المزيد في نفس السياق — شركات كردستان الصغيرة والمتوسطة، الذكاء الاصطناعي، والتفاصيل العملية الحقيقية.
6 دقيقة قراءة
إطلاق SalonSystem: منصة شاملة لصالونات كردستان
SalonSystem متاح الآن على krd.beauty — حجوزات وموظفين وتاريخ عملاء ومخزون وتذكيرات واتساب وتقارير في تطبيق واحد ثلاثي اللغات، مسعّر لصالونات كردستان. قصة سبب بنائه وإلى أين يتجه.
8 دقيقة قراءة
التكلفة الخفية لودجتات حجز الفنادق "المجانية" في كردستان
لماذا تكلف ودجت الـOTA "المجانية" على موقع فندقك ما بين $18,000 و$40,000 سنويًا لفندق كردستاني من 30 غرفة — حسبة العمولة الفعلية، من يملك قائمة ضيوفك، والبديل المباشر الذي يسترد نفسه في 2–4 أشهر.
9 دقيقة قراءة
الذكاء الاصطناعي للتجارة الإلكترونية في كردستان: Shopify، مخصص، أم هجين؟
ثمانية أسئلة قرار للاختيار بين Shopify والمخصص والهجين لبناء التجارة الإلكترونية في كردستان — وأين يندمج الذكاء الاصطناعي في كل مسار.