دراسة حالة
استوديو يحجز نفسه، ويدير نفسه بين التصويرات
يؤجّر Ottora ستة إعدادات بالساعة، ويدير في الوقت نفسه عملية محتوى على الكاميرات ذاتها والفريق ذاته. صفحة الحجز ونظام التشغيل شيء واحد، فلا يبيع الموقع إلا ما هو متاح فعلًا.
- العميل
- Ottora Studio
- القطاع
- استوديو بودكاست ومحتوى
- الموقع
- أبو هامور، الدوحة
- الخدمات
- بناء متكامل · حجوزات · لوحة تحكم · صلاحيات

01 · التحدي
طقم كاميرات واحد، وثلاثة أنشطة تتنازع عليه
Ottora Studio استوديو محتوى في أبو هامور بستة إعدادات قابلة للحجز، ويكسب بثلاث طرق تتنافس فيما بينها: تأجير الاستوديو بالساعة، وتصوير خارج الموقع، وعقود محتوى شهرية. الثلاثة تسحب من الكاميرات نفسها والفريق نفسه. وكان الموقع يبيع ساعات استوديو انطلاقًا من رقم مثبّت في الصفحة لا يعرف شيئًا عمّا إذا كانت الكاميرا في تصوير خارجي بعد الظهر، وكانت عملية المحتوى تجري خارج النظام تمامًا على الرسائل والذاكرة، وتغيير السعر يعني تعديل سبعة مواضع يدويًا. لم تكن المشكلة صفحة بطيئة، بل بيع ساعة قد لا يستطيع الاستوديو تسليمها.
02 · الأهداف
ما الذي سعينا إليه
- أن يحجز العميل وقته ويدفع ويعيد الجدولة ويدير حجوزاته بنفسه دون رسالة إلى أحد.
- أن يستحيل وعد مهمتين بالكاميرا نفسها.
- وضع عملية المحتوى ويوم التصوير والمال في مكان واحد بدل ثلاث محادثات.
- أن يبقى النظام قابلًا للتشغيل بأربعة شركاء ومشغّل واحد، بلا إدارة خلفية.
- أن يحصل كل شريك والمشغّل على الشاشات التي يحتاجها عملهم بالضبط، وأن تفرض ذلك قاعدة البيانات لا القائمة.
- استبدال جدول المالية دون أن نطلب ممن يحتفظ به أن يتخلى عنه.
03 · الاستكشاف
كيف وجدنا المشكلة الحقيقية
حقيقتان شكّلتا كل شيء. الأولى: التوافر سؤال مخزون لا سؤال تقويم. قد تكون الغرفة شاغرة والكاميرا التي تجعلها مفيدة في تصوير خارجي، فأي إجابة تُحسب من حجوزات الغرف وحدها ستبيع أكثر مما تملك عاجلًا أو آجلًا. والثانية: نشاط العقود، وهو الأكبر بين الثلاثة، كان بلا نظام أصلًا — الملخصات والنصوص والموافقات وجداول النشر في واتساب، ولا أحد يستطيع أن يقول ما المستحق هذا الشهر مقابل ما بيع. وقِسنا الأمر الممل أولًا: كل رحلة إلى قاعدة البيانات من الدوحة تكلّف نحو 300 جزء من الألف من الثانية لأن القاعدة في سيدني؛ وصفحة تقوم بأربع منها بالتتابع كانت تنتظر أكثر من ثانية قبل أن ترسم شيئًا.
04 · الاستراتيجية
الخطة التي التزمنا بها
نبني نظام التشغيل أولًا ونجعل الموقع يقرأ منه، بدل بناء صفحة حجز أجمل فوق تخمين. كل ما يراه العميل هو عرض للجداول نفسها التي يعمل منها الفريق: السعر بالساعة يأتي من سجل الغرفة لا من الصفحة، وعدد الكاميرات التي يبيعها الموقع هو عدد الوحدات المملوكة غير المخصّصة، والموعد المحجوز مؤقتًا ينتهي من تلقاء نفسه. ثم نتوسّع على مراحل، تغلق كل مرحلة بابًا كان النشاط يخسر منه بهدوء: التوافر، ثم يوم التصوير، ثم مسار المحتوى، ثم الدفاتر. والقاعدة في كل ذلك: إن كان الشرط مهمًا فمكانه قاعدة البيانات كقيد، لا التطبيق كفحص قد ينسى أحدهم استدعاءه.

“التوافر سؤال مخزون لا سؤال تقويم. الغرفة ليست شاغرة إلا إذا كانت الكاميرا التي تجعلها مفيدة شاغرة أيضًا — لذلك يسأل الموقع قاعدة البيانات، لا رقمًا مكتوبًا في الصفحة.”
الفكرة في سطرين
05 · التصميم
القرارات خلف الشاشات
الموقع العام كتالوج لا تقويم: يختار الزائر الإعداد المناسب لما سيصوّره، ويرى سعره، ثم يلتقي بالتاريخ والوقت. ستة إعدادات، لكل منها صفحته، بسعر الساعة وقابلة للحجز من العاشرة صباحًا حتى الحادية عشرة مساءً كل يوم. والخصومات تُحسب لا تُفاوَض، فيصير الحجز الأطول أرخص دون أن يسأل أحد: ربع السعر عند ست ساعات، وخمسة عشر بالمئة عند ثلاث، وخمسة عشر بالمئة على أول ثلاثة حجوزات لعميل جديد. وتمنح صفحة الحساب العميل العائد حجوزاته القادمة والاشتراكات والسابقة، وإعادة جدولة لا تحتاج مكالمة. أما لوحة التحكم فمبنية للمكان الذي تُستخدم فيه — شاشة يوم التصوير شاشة هاتف، جلسة واحدة في كل مرة، بأزرار بحجم الإبهام للوصول وساعة إضافية وكاميرا إضافية وتحصيل الدفع.

06 · التطوير
ما بنيناه عليه
Webflow للموقع العام، ثم Next.js على Vercel للوحة التحكم، ومشروع Supabase واحد تحتهما: Postgres والمصادقة والتخزين، واثنتان وعشرون دالة طرفية، مع pg_cron. تتحدث الصفحات العامة إلى Postgres مباشرة بمفتاح anon تحت أمان مستوى الصف، فلا واجهة برمجية خاصة يلزم إبقاؤها متوافقة. والمعدات مُنمذَجة كوحدات فردية بقيد استبعاد على تخصيصاتها، أي أن قاعدة البيانات نفسها ترفض تسليم الكاميرا ذاتها لمهمتين؛ وسقف الكاميرات على الموقع استعلام عمّا هو متاح فعلًا. ويُرسل الدفع إلى سداد، بوابة الدفع القطرية، بنموذج موقّع من الخادم، والمرجع هو إشعار الخادم إلى الخادم لا رحلة عودة المتصفح. وتُحجز الفترات دقيقتين ريثما يقرر العميل، وتنتهي الحجوزات المعلّقة بعد خمس عشرة دقيقة، فيحرّر الدفع المهجور نفسه. وتُتحقّق الجلسات محليًا مقابل مجموعة مفاتيح مخزّنة بدل نداء عبر الشبكة، ونُقلت الدوال إلى سيدني لتجلس بجوار قاعدة البيانات — فصارت قفزة الدوحة إلى سيدني تُدفع مرة لكل صفحة لا مرة لكل استعلام.

07 · لوحة التحكم
ست عشرة شاشة، لكل عمل في الاستوديو شاشته
الموقع العام هو ما يراه العملاء، أما لوحة التحكم فهي المكان الذي يعيش فيه الاستوديو. تعمل على قاعدة البيانات نفسها، فالحجز الذي يُسجَّل على الموقع عند منتصف الليل يظهر في شاشة يوم التصوير في التاسعة صباحًا دون أن ينقله أحد. كل تاريخ يُحسب على أيام قطر لا على التوقيت العالمي، ويبدأ الأسبوع من الأحد، والشاشات التي تُستخدم وقوفًا صُمّمت للهاتف أولًا. وكل وحدة تجيب عن سؤال واحد يطرحه أحد أفراد الفريق كل يوم.
- النظرة العامة — اليوم والشهر في لمحة، والحجوزات وطلبات الاستشارة على تقويم واحد.
- اليوم — شاشة يوم التصوير: من وصل، وساعة إضافية، وكاميرا إضافية، والدفع المحصَّل، وإغلاق الجلسة، بزر بحجم الإبهام في كل مرة.
- الحجوزات — القادمة واليوم والسابقة، مع بحث يشمل العملاء المسجلين والضيوف، ويضيف المدير الحجوزات التي تصل بالهاتف أو حضوريًا.
- التقويم — أسبوع كامل على شبكة واحدة، بطبقات للغرف والمعدات والتصوير الخارجي والأشخاص، وكل عرض رابط يمكن مشاركته.
- المعدات — كل وحدة على جدول واحد، تُسلَّم وتُستعاد، يطلبها المشغّل ويوافق عليها المدير، إلى جانب سجل الأصول كاملًا.
- المحتوى — لوح المراحل التسع، بتبويب لكل عميل تعاقد وآخر لقنوات الاستوديو نفسه، مع الحصص وبوابات الموافقة.
- الطلبات — استفسارات الاستشارة والبودكاست، مقيَّمة عند وصولها ومفلترة على الخادم.
- مسار المبيعات — الصفقات حسب المرحلة، تُقرأ عمودًا عمودًا، وتقول ذلك صراحة إن طال العمود عن العرض الكامل.
- العملاء — قائمة واحدة تجمع العملاء المسجلين وضيوف الحضور والعملاء المضافين يدويًا، وهي في البيانات ثلاثة أنواع مختلفة من السجلات.
- العقود — عقود المحتوى الشهرية ودورات فوترتها.
- المشغّلون — من مكلَّف بماذا، وجلساتهم القادمة.
- المدفوعات — كل دفعة بالبطاقة مع فلتر للتجريبي والفعلي وصفحة لكل طلب، إلى جانب النقد والبطاقة المحصَّلين في الموقع.
- المالية — الدفاتر، والنقد المتاح، ومدة التشغيل المتبقية، والمستحقات، واتجاه الأشهر الستة.
- الإشعارات — جرس بعدد غير المقروء، والصفحة التي خلفه.
- التحليلات — الحجوزات والإيرادات يومًا بيوم على أيام قطر، والأيام الفارغة تظهر فارغة بدل أن تُحذف.
- التحكم في الوصول — الفريق والأدوار والدعوات والحسابات المحظورة.
08 · الصلاحيات والتحكم
كل شخص يرى ما يحتاجه عمله بالضبط، وقاعدة البيانات هي من تفرض ذلك
أربعة شركاء، ومشغّل في الموقع، وعملاء على الموقع العام، كلهم يعملون على الجداول نفسها، فلم يكن ممكنًا أن تكون الصلاحيات مسألة إخفاء عناصر من القائمة. كل قاعدة أدناه تُفرض مرتين: تتحقق الصفحة من الدور قبل أن تُعرض، ثم يتحقق منها أمان مستوى الصف في Postgres مجددًا عند كل قراءة وكتابة، وهو مفعَّل على كل جدول من جداول قاعدة البيانات التسعة والسبعين. إخفاء الرابط مجاملة، أما السياسة فهي القفل. وأثبتنا ذلك بالطريقة المباشرة: انتحلنا كل نوع من الحسابات أمام قاعدة البيانات وعددنا الصفوف التي يراها كل منها، قبل إعادة كتابة السياسات وبعدها.
- المدير الأعلى — الدور الوحيد الذي يستطيع تغيير النظام نفسه: دعوة الفريق، وتحديد الأدوار، وحظر الحسابات. وشاشة التحكم في الوصول له وحده.
- المدير — كل الشاشات والإجراءات التشغيلية: الحجوزات والعملاء والعقود والمدفوعات والمشغّلون والموافقة على طلبات المعدات، دون أي تغيير على مستوى النظام.
- المشغّل — يوم التصوير والتقويم وجدول المعدات ولوح المحتوى. يستطيع طلب المعدات لا الموافقة عليها، وتعيده شاشات المدفوعات والعملاء والعقود إلى لوحة التحكم حتى لو كتب عنوانها مباشرة.
- المالية علامة لا دور. يحملها الرئيس التنفيذي، ولا يحملها بقية الشركاء ولو كانوا مديرين — والمدير الذي لا يحملها يحصل على صفر من صفوف الدفاتر حتى لو سأل قاعدة البيانات مباشرة.
- الإيصالات في تخزين خاص لا يفتحه إلا حساب يحمل علامة المالية، عبر رابط تنتهي صلاحيته.
- يرى المشغّل اسم العلامة التجارية لعميل التعاقد، وهو ما يحتاجه لتخطيط التصوير، عبر دالة ضيقة في قاعدة البيانات لا تفتح العقد وشروطه.
- يقرأ العميل حجوزاته ومدفوعاته هو، ولا شيء غيرها. وشاشة اليوم لا ترى إلا ما حُصِّل مقابل كل حجز، لا سجلات الدفع التي خلفه.
- المواهب لا تسجّل الدخول؛ هي سجلات يديرها المدير.
- والإشعارات على الخط نفسه: كل شخص يتلقى ما أُسند إليه، والمديرون يتلقون الاستثناءات.
- أداة المالية التي تعمل خارج لوحة التحكم تسجّل الدخول باسم من يستخدمها، لا بمفتاح رئيسي أبدًا، فتبقى القواعد سارية حين لا ينظر أحد إلى شاشة.

09 · مسار المبيعات
إلى أين تذهب الطلبات
تعمل عملية المحتوى على لوح من تسع مراحل، من «يحتاج تخطيطًا» مرورًا بالنص وقائمة اللقطات والتصوير والمونتاج حتى «منشور»، مع حصص شهرية لكل عميل تُظهر ما بيع مقابل ما سُلّم فعلًا. وموافقات العميل بوابات لا تذكيرات: ينتظر النص أو النسخة النهائية طلبًا واحدًا مفتوحًا، وإن مضت أربع وعشرون ساعة دون رد لاحقه النظام بنفسه وأبلغ أحد المديرين. وتتصاعد طلبات المعدات من المشغّل إلى كل المديرين إن لم يبتّ فيها أحد خلال يوم. ويصل الفريق ملخص صباحي في السابعة، ولا شيء إطلاقًا في يوم لا شيء فيه. أما الاستفسارات فتصل عبر نموذج استشارة يقيّمها قبل أن يقرأها أحد، وعمل البودكاست بالطلب والموافقة لا بالدفع الفوري، لأن الاستوديو يريد أن يقول نعم عن قصد.

10 · المدفوعات والمالية
من الدفع إلى الدفاتر، دون إعادة كتابة ريال واحد
يُرسَل الدفع إلى سداد بنموذج موقَّع على الخادم، والإشعار من خادم إلى خادم هو ما يعتمد الدفعة؛ أما رحلة عودة المتصفح فتعرض النتيجة على العميل فقط. ولأن Webflow لا يستقبل تلك العودة، تلتقطها دالة صغيرة وتنقل الزائر إلى صفحة تنتظر الحكم. ويُسجَّل النقد والبطاقة المحصَّلان في الموقع من شاشة اليوم مقابل الحجز الذي دُفعا عنه، فتجلس تحصيلات اليوم إلى جانب مدفوعات البطاقات. وخلف ذلك دفاتر بحسابات وتصنيفات وتكاليف متكررة تُرحَّل تلقائيًا كل ليلة، ولوحة مالية تستخرج النقد ومدة التشغيل والمستحقات والاتجاه من استدعاء واحد لقاعدة البيانات بدل سبعة — وهذا مهم حين تكون كل رحلة إلى سيدني. واحتفظ الرئيس التنفيذي بجدوله: تستورده الدفاتر وتصدّر إليه، ووصلت ستة أشهر من التاريخ وتطابقت مع الجدول في حدود ريال من التقريب، واختُبرت أداة الاستيراد على ملف فوضوي عن قصد، فكشفت تواريخ Excel وهي تصل باليوم والشهر مقلوبين، والإيجار وهو يُقرأ دخلًا.

ما يفعله النظام كل يوم
- ٦ إعدادات
- تُحجز بالساعة من العاشرة صباحًا حتى الحادية عشرة مساءً، بسعر من سجل الغرفة لا من الصفحة.
- صفر
- حجوزات مزدوجة يقبلها النظام. تعارض المعدات يرفضه قيد في قاعدة البيانات، لا فحص قد تنساه الشيفرة.
- ١٥ دقيقة
- بعدها يحرّر الحجز غير المدفوع فترته، فلا يحتجز دفعٌ مهجور التقويم.
- ٩ مراحل
- من «يحتاج تخطيطًا» إلى «منشور»، ببوابات موافقة تلاحق نفسها بعد أربع وعشرين ساعة.
- ١٦ وحدة
- في لوحة تحكم واحدة، كل منها مفتوح فقط للأدوار التي هي من عملها.
- صفر صفوف
- ما يحصل عليه مدير بلا صلاحية مالية من الدفاتر، حتى لو سأل قاعدة البيانات مباشرة.
هذه أوصاف للنظام الذي بنيناه. أرقام الاستوديو التجارية تبقى خاصة — موضوع هذه الدراسة الآلة لا الإيراد.
بُني باستخدام
- Webflow
- Supabase Postgres
- أمان مستوى الصف
- 22 دالة طرفية
- pg_cron
- Next.js 14 App Router
- TypeScript
- Tailwind + shadcn/ui
- Vercel
- مدفوعات سداد
- Cloudflare Turnstile

