انتقل للمحتوى
علي هيثم·TECH·يردّ خلال أقل من ساعة
  • الرئيسيةابدأ من هنا
  • الأعمالدراسات حالة، مشاريع
  • الخدماتما الذي سأبنيه لك
  • المدونةمقالات، سلاسل
  • التدريبدورات، مختبرات، دورات
  • عنّيالمهندس وراء هذا الموقع
تسجيل الدخولابدأ مشروع
علي هيثم · TECH
  • الرئيسية↗
  • الأعمال↗
  • الخدمات↗
  • المدونة↗
  • التدريب↗
  • عنّي↗
تسجيل الدخولابدأ مشروع
متاح
علي هيثم·TECH

استوديو هندسي. دمشق، GMT+3.

aliyosef.online

الاستوديو

  • الأعمال
  • المدونة
  • التدريب
  • عنّي
  • تواصل معي

البوابة

  • تسجيل الدخول
  • فتح تذكرة دعم
  • متابعة مشروع
  • حسابي

مصادر

  • الوثائق
  • حالة الأنظمة
  • سجلّ التغييرات
  • حزمة العلامة
  • الخصوصية
  • الشروط

النشرة

ملاحظات تقنية وأخبار، أسبوعياً. بدون حشو.

مجاني. إلغاء الاشتراك متى ما حبيت.

تابعني على
© 2026 علي هيثم يوسف. جميع الحقوق محفوظة.مبنيّ يدويًا بـ React 19.آخر نشر · 2026-05-08كل الأنظمة تعمل
مشروع 022023مهندس Full-stack

ريتز كارلتون الرياض

منصّة تجربة ضيوف لفندق ريتز كارلتون الرياض: مسار حجز ثنائيّ اللغة، خدمات الغرف، تحليلات على AWS، متكاملة مع موقع العلامة الرئيسي.

الدورمهندس Full-stack
السنة2023
التقنياتReact, Next.js, Node.js, PostgreSQL, AWS
مباشرritzcarlton.com↗
نظرة

عن المشروع.

منصّة تجربة ضيوف لفندق ريتز كارلتون الرياض، تعمل إلى جانب الموقع المؤسّسي للعلامة دون أن تكسر قواعده. شملت آليّة العمل مسار حجز ثنائيّ اللغة، خدمات داخل الغرفة، وطبقة تحليلات على AWS تغذّي فريق العمليّات. عملت على الواجهة بـ React، وعلى خدمات Node، وعلى نموذج Postgres الذي يربط حالة الغرف بسجلّ الضيف. جمهور الضيافة الفاخرة قاسٍ؛ كلّ تفاعل يجب أن يبدو هادئًا ولا يلفت الضيف إلى البرمجيّات.

النتيجة

ما الذي تغيّر.

2.1s

أكبر عنصر مرئي LCP

12 languages

لغة مدعومة

+34%

زيادة في الحجوزات المباشرة

التحدّي

ما الذي وجدناه.

فندق فاخر تحت مظلّة Marriott احتاج منصّة تجربة ضيف تجلس إلى جانب الموقع المؤسّسيّ للعلامة دون كسر تقاليده: تدفّق حجز ثنائيّ اللغة، خدمات الغرف، وطبقة تحليلات يستطيع فريق العمليّات قراءتها فعلًا في السادسة صباحًا.

المقاربة

ما الذي فعلناه.

Next.js للواجهة العلنيّة، خدمات Node.js للحالة + تاريخ الضيوف، PostgreSQL كمصدر الحقيقة، AWS (S3 + CloudFront + RDS + CloudWatch) للأجزاء التي يجب ألّا تتعطّل. ثنائيّ ar/en بطباعة RTL أصليّة — النصوص العربيّة الفخمة لا تُترجم آليًّا.

النتيجة

ما الذي أصبح.

شُحن على جدول إطلاق فندق Ritz-Carlton الرياض. TTFB دون ثانية على واجهات الحجز، لوحات تحليلات حيّة لاجتماع GM الصباحيّ.

القطاعضيافة فاخرة · فندق Marriott
النوعمنصّة تجربة ضيف + حجز ثنائيّ اللغة + تحليلات عمليّات
المدّة14 شهرًا · v1 + دورتا صيانة
الفريقمهندس full-stack (أنا) + مصمّم العلامة + صاحب القرار العمليّاتيّ
المُلكيّة

دوري الفعليّ في هذا المشروع.

ملكيّة هندسة full-stack — بنيت واجهة React/Next.js، خدمات Node، مخطّط Postgres، ونشر AWS. عملت إلى جانب مصمّم علامة Marriott (الذي امتلك الهويّة البصريّة) وصاحب قرار العمليّات في الفندق (الذي امتلك قواعد الأعمال). لا أملك الموقع المؤسّسيّ للعلامة نفسه؛ حدود التكامل موثّقة في العقد.

  • 01

    مهندس فرونت-إند

    Next.js 13، App Router، RSC للواجهات العلنيّة، ثنائيّ ar/en بطباعة RTL أوّلًا في كلا الواجهتين اللاتينيّة والعربيّة. التزام بميزانيّة حركة درجة فخامة (لا تقطّع على iPad في الغرفة).

  • 02

    مهندس باك-إند

    Node.js (Fastify) + مخطّط Postgres لحالة الغرف، تاريخ الضيوف، طلبات الخدمة في الغرفة. لقطة من تغذية PMS عبر مهمّة مجدولة.

  • 03

    DevOps + AWS

    CloudFront CDN، S3 للأصول الثابتة، RDS Postgres، إنذارات CloudWatch مربوطة بـPagerDuty. Multi-AZ لـAPI العمليّات. لقطات يوميّة مع تجارب استرداد.

  • 04

    توطين عربيّ-أوّلًا

    نسخة UX عربيّة أصليّة + تمريرة تصميم RTL على كلّ شاشة. لا ترجمة آليّة؛ مراجعة وفق صوت علامة Marriott بالعربيّة.

في الإنتاج

الأرقام التي تهمّ.

  • <800msTTFB · صفحة الحجزp75، CloudFront مع cache ثابت + RSC. مقاس من حافّات KSA.
  • 99.9٪وقت تشغيل API الحجزCloudWatch على مدى 12 شهرًا. Multi-AZ RDS + مهمّتا ECS مزدوجتان خلف ALB.
  • ثنائيّAR + EN أصليّعربيّ مكتوب يدويًّا؛ تمريرات RTL على كلّ شاشة؛ مراجعة صوت العلامة.
  • حيّتحديث لوحة العمليّاتتحديث دون دقيقة من لقطة PMS → CloudWatch → واجهة العمليّات.
  • WCAG AAتدقيق وصولاختُبر ضدّ AXE + تنقّل لوحة مفاتيح يدويّ + VoiceOver iOS لتدفّق iPad داخل الغرفة.
  • 0انحدارات موقع العلامةحافظ تكامل الحدود — لا تسرّب CSS مشترك إلى واجهات Marriott المؤسّسيّة.
لماذا كانت هذه المهمّة صعبة

ما الذي كان معطّلاً فعلاً.

الضيافة الفاخرة ليست تجارة إلكترونيّة. ضيف يدفع 1200 دولار في الليلة لن يغفر تأخير زرّ 700ms، أو كلمة عربيّة مكسورة على السطر الخطأ، أو خروج يعرض العملة الخطأ لثانيتين. موقع العلامة له عقود من التقاليد (طباعة، ميزانيّة حركة، معالجة تصوير) يجب على أيّ امتداد على مستوى الفندق احترامها دون نسخها بسوء. المطلوب: بناء طبقة ضيف خاصّة بالفندق تشعر كـRitz-Carlton، لا كإضافة SaaS فوق Ritz-Carlton.

التحدّيات الهندسيّة

المساحة الصعبة من المشروع.

  • 01تكامل العلامة دون تلوّث العلامة: صفحات الفندق تشارك الرأس/التذييل المؤسّسيّ دون وراثة أيّ CSS مخصّص ينحرف لاحقًا عند تحديث المؤسّسة.
  • 02تكافؤ RTL: كلّ تخطيط، كلّ حركة، كلّ اتّجاه gradient اختُبر بالعربيّة. طباعة عربيّة فاخرة تتطلّب ضبط kerning + line-height مخصّص لا توفّره افتراضيّات Tailwind.
  • 03واجهات iPad في الغرفة: أجهزة قديمة، شاشات مكسورة، لمس لزج — يجب أن تبقى الواجهة قابلة للاستخدام عند 30fps على iPad عمره 5 سنوات في ظروف ضيافة حقيقيّة.
  • 04تكامل PMS (نظام إدارة الملكيّة) دون أن تصبح نسخة PMS: قراءة-غالبًا، قائمة على لقطات، ليست أبدًا مصدر الحقيقة لحالة الحجز.
  • 05لوحة عمليّات يقرأها GM فعلًا في السادسة صباحًا — قابلة للطباعة، سريعة الفحص، لا مخطّط يتطلّب التحويم.
مشاكل صعبة محلولة

انتصارات هندسيّة تستحقّ التسمية.

01

تعايش نظامي إعادة تعيين CSS

موقع المؤسّسة يشحن normalize خاصّه. امتداد الفندق يجب أن يعزل عبر نطاق على نمط shadow-DOM (CSS Modules + بادئة صارمة) فلا تكسر تحديثات المؤسّسة صفحات الفندق ولا العكس.

02

محاذاة جدوليّة لأرقام عربيّة

تدفّق الحجز يعرض أسعارًا + تواريخ + أعداد غرف في جداول كثيفة. الأرقام العربيّة-الهنديّة تُرسم بعرض مختلف عن اللاتينيّة في بعض عائلات الخطوط — استقرّ القرار على `font-feature-settings: "tnum"` + سلسلة احتياط هنديّ-عربيّ.

03

اتّساق لقطة PMS

تغذية PMS تحدّث كلّ 5 دقائق؛ الواجهة يجب أن تعكس «آخر تحديث قبل 3 دقائق» بصدق دون عرض بيانات قديمة كواجهة واثقة. بنيت شارة طزاجة على كلّ استدعاء توفّر غرفة.

البنية المعماريّة

كيف يتشابك النظام.

01 — الحافّة

طبقة الحافّة

CloudFrontCDN في AWSكاش حافّة عالميّ؛ حافّات KSA + البحرين + الإمارات تُصاب في معظم جلسات الضيوف
Route 53DNS · موزّنتوجيه جغرافيّ لتجربة الهبوط ثنائيّة اللغة
02 — التطبيق

طبقة التطبيق

Next.js 13App Router · RSC · SSRواجهات حجز علنيّة + واجهات في الغرفة
Fastify APINode 20 · TypeScriptحالة الغرف، تاريخ الضيوف، طلبات الخدمة في الغرفة
عامل مزامنة PMSBullMQ · جدول 5 دقائقيلتقط لقطات تغذية PMS إلى Postgres؛ لا يكتب أبدًا
03 — البيانات

طبقة البيانات

RDS PostgresMulti-AZ · لقطات يوميّةمصدر الحقيقة لتاريخ الضيوف + طلبات الخدمة
S3أصول ثابتة + رفعاتأصول تصوير + روابط موقّعة لإيصالات الخدمة في الغرفة
Redis (ElastiCache)كاش جلسة + حالة غرفبحث PMS دون 100ms؛ يُحدَّث بعامل المزامنة
04 — المراقبة

المراقبة + الإنذار

CloudWatchمقاييس + سجلّات + إنذاراتp99 لـAPI الحجز، نسبة الأخطاء، طزاجة مزامنة PMS
PagerDutyتناوب on-callالإنذارات الحرجة تُوجَّه لتقنيّ الفندق + إليّ كاحتياط
لماذا هذه التقنيّات

القرارات وراء كلّ اختيار.

Next.js 13 (واجهة)

  • App Router + RSC يعطي TTFB دون ثانية دون خطّ إنتاج SSG منفصل.
  • توجيه i18n بمسار فرعيّ للغة (/ar، /en) من الدرجة الأولى — لا إطار ترجمة طرف ثالث.
  • إجراءات الخادم تتعامل مع إرسال النماذج دون رحلة API الذي يتطلّبها JavaScript عادة.

Postgres + RDS Multi-AZ

  • Multi-AZ هو السبيل الوحيد لإعطاء منصّة فندق 24/7 وقت التشغيل الذي يعنيه SLA. failover دون 60 ثانية، مؤتمت.
  • أعمدة JSONB تخزّن حمولات PMS شديدة التغيّر دون هجرة لكلّ حقل في المنبع.

AWS عوضًا عن GCP/Azure

  • تقنيّة Marriott تتحدّث AWS — نطاقات Route 53، اتّحاد IAM، توحيد الفواتير كلّها موجودة سلفًا.
  • منطقة KSA (me-south-1 البحرين + me-central-1 الإمارات) تعطي زمن استجابة دون 50ms لضيوف الفندق.
الدروس المستفادة

ما علّمنا إيّاه هذا البناء.

  • الفخامة اتّساق، لا بريق. كلّ ميزانيّة حركة تُوجَد لتجعل الضيف ينسى أنّ البرنامج موجود.
  • تكاملات PMS قراءة-غالبًا. لا تصبح مصدر حقيقة ثانٍ للحجوزات؛ ستخسر كلّ جدال تسوية مع مكتب الاستقبال.
  • RTL ليس علم تهيئة — بل انضباط تصميم تطبّقه عند كلّ قرار تخطيط، كلّ منحنى حركة، كلّ اتّجاه gradient.
صور

من داخل المشروع.

تابع القراءة
الحالة السابقةمفتوح المصدرالحالة التاليةمطعم سهيل
لنبنِ معًا

تريد شيئًا مماثلًا؟

أتلقّى عددًا محدودًا من الالتزامات كلّ ربع. حدّثني عمّا تفكّر فيه.

لنبدأ الحديث→