انتقل إلى المحتوى
cutty.dev
All posts

المجموعة التقنية لـ cutty.dev — خيارات مدروسة

ما الذي يكمن خلف cutty.dev ولماذا؟ بدون تبشير — الفلسفة: تقنيات (stack) مملة ومستقرة، استضافة في الاتحاد الأوروبي، وخصوصية متأصلة في البنية التحتية، بحيث يمكن لشخص واحد فقط إدارتها.

معظم منشورات "مجموعتي التقنية" هي قائمة فخورة بكل ما هو جديد. انظر، لدي هذا، ولدي ذاك، وهنا أيضاً مكتبة جديدة تماماً من الأسبوع الماضي. سيكون هذا المنشور مختلفاً.

فالحقيقة هي أنك عندما تدير مشروعاً بمفردك، فأنت لا تبحث عن الشيء الأكثر رواجاً. بل تبحث عن شيء لا يوقظك في الثالثة فجراً. وهذا هو بالضبط جوهر هذه المجموعة التقنية (tech stack) الخاصة بـ cutty.dev: ممل بدلاً من كونه عصرياً، أوروبي بدلاً من أمريكي، خاص منذ الأساس، وبسيط بما يكفي لكي يتمكن زوج واحد من الأيدي من إدارته.

سأشرح لك الأمر بالتتابع، كما لو كنت أشرحه لك أثناء احتساء القهوة.

Astro يتم رندرتها على الخادم (ولماذا ليس شيئاً "أكثر روعة")

cutty.dev هو Astro مع رندر (rendering) من جانب الخادم. كل طلب يمر عبر الخادم، يقوم بتجميع الصفحة، ويرسل ملف HTML جاهزاً. ممل؟ هذا هو الهدف تماماً.

أردت ثلاثة أشياء: رندر (rendering) على الخادم بدون آلات ثقيلة، دعم حقيقي للعديد من اللغات فوراً، والسرعة دون أي عبء إضافي. يوفر Astro كل هذا، ويظل الكود مقروءاً. عندما أعود إليه بعد انقطاع لمدة شهرين، أعرف تماماً ما الذي يحدث هناك. في المشاريع الفردية، هذا يستحق أكثر من أي إضافة عصرية لا يدعمها أحد بعد عام واحد.

ملف واحد بدلاً من قاعدة بيانات مع ألعاب نارية

SQLite. قاعدة بيانات واحدة، ملف واحد على القرص. بالإضافة إلى ذلك، هناك طبقة استعلامات تتحدث مع TypeScript، لذا عندما أقوم بتغيير هيكل البيانات، يظهر الخطأ لي في المحرر، وليس في بيئة الإنتاج عند منتصف الليل.

لماذا هذا تحديداً؟ cutty هو نظام "read-heavy". شخص ما ينقر على رابط مختصر، نحن نقوم بعملية القراءة ونزيد العداد. هذا كل شيء. SQLite يمكنه التعامل مع مثل هذه الحركة بسهولة، حتى لأرقام كبيرة جداً يومياً. وماذا عن النسخ الاحتياطي؟ تقوم بنسخ الملف. انتهى الأمر. بدون طقوس إعادة التكرار (replication)، وبدون سكربتات لا يتذكر أحد كيف تعمل.

هنا يجب الحذر من شيء واحد، لأنه فخ شائع: الناس يسمعون "SQLite" ويعتقدون أنها "لعبة لمشروع تخرج". هذا غير صحيح. عدد أقل من الأجزاء المتحركة يعني عدداً أقل من الأشياء التي يمكن أن تتعطل. هذا ليس توفيراً في الجودة، بل هو قرار مدروس.

الخادم موجود في أوروبا وهذا ليس صدفة

خادم مخصص في الاتحاد الأوروبي. TLS خاص، وكيل عكسي (reverse proxy) مع HTTPS تلقائي، وتطبيق في حاويات.

هذا هو الأساس لكيفية تعامل cutty مع البيانات. أنا أعرف تماماً أين توجد فعلياً (بالنسبة للعملاء في الاتحاد الأوروبي وGDPR، هذا ليس مجرد معلومة مثيرة للاهتمام، بل هو شرط)، ولست مرتبطاً بمزود واحد، لا يتسرب أي شيء تلقائياً إلى ما وراء المحيط، والتكلفة قابلة للتوقع بدلاً من القفز مع تقلبات الحركة.

نعم، المنصات المريحة من الغرب كانت ستعطي بداية أسرع. تضغط، deploy، يعمل. لكن الثمن هو المكان الذي تستقر فيه بيانات مستخدميك. بالنسبة لي، كانت هذه صفقة سيئة.

الترجمات يقوم بنموذجه الخاص، لديه

cutty يتحدث 25 لغة. يتم ترجمة ذلك بواسطة نموذج ذكاء اصطناعي محلي ومفتوح المصدر، يعمل على بنيتي التحتية الخاصة. أنا لا أرسل النص من الواجهة إلى أي مزود خارجي.

الفوائد عملية. الترجمة الفردية تكلفتها صفر. لدي سيطرة كاملة على الجودة ويمكنني تحديثها وقتما أريد. وبالإضافة إلى ذلك، الآلة تحتاج دائماً إلى عين بشرية، لذا فإن كل لغة من هذه اللغات الـ 25 قد خضعت للمراجعة. ولكن حقيقة أنني أفعل ذلك بنفسي تعني أن الخصوصية ليست مجرد بند في قائمة الأسعار، بل هي خاصية متأصلة في كيفية بناء النظام بأكمله.

Tailwind، الحاويات وبعض القرارات الأصغر

الأسلوب؟ Utility-first، أي Tailwind. بدون CSS-in-JS، وبدون ملفات أنماط منفصلة، كل شيء مباشرة في القوالب. لا أضيع الوقت في ابتكار أسماء الفئات، والأنماط غير المستخدمة لن تصل إلى الصفحة النهائية على أي حال، والتصميم متماسك لأن النظام نفسه يفرض ذلك. بالنسبة لشخص واحد، كل دقيقة لا تُهدر في توافه الأمور لها قيمتها.

هذا هو Docker. نفس البيئة محلياً وفي الإنتاج، وداعاً لعبارة "كان يعمل على جهازي". وإذا احتجت يوماً ما، يمكنني نقل كل شيء إلى خادم آخر في حوالي نصف ساعة. القدرة على النقل هي شكل صامت من أشكال الاستقلال.

ما الذي استخلصته من هذا

المجموعة المملة هي التي تفوز. Astro، SQLite، Tailwind، الحاويات (containers). كل شيء ناضج، مجرب، وموثق. لا شيء ينهار في اللحظة التي تكون فيها في أمسّ الحاجة إليه.

الاستضافة في الاتحاد الأوروبي جاهزة للإنتاج، حقاً. فكرة أنك "يجب أن تذهب إلى السحابة الأمريكية الضخمة لكي يكون الأمر جاداً" هي مجرد خرافة. الذكاء الاصطناعي المحلي حقيقي أيضاً، ولا داعي لتسليم البيانات إلى API خارجي للحصول على ترجمات جيدة. والشيء الأخير: يمكن لشخص واحد إطلاق شيء يبدو وكأنه عمل فريق كامل. يجب فقط تذكر أن الوقت أغلى من المال، ومن هذا المنطلق يجب اختيار كل قطعة بعناية.

عندما تبني شيئاً خاصاً بك، اطرح على نفسك سؤالاً واحداً مع كل تقنية: هل سأتمكن من صيانته بنفسي بعد عام من الآن؟ إذا كانت الإجابة لا، فلديك الإجابة على الأرجح.

كل هذا يعمل هنا: cutty.dev. وإذا كنت ترغب في التحدث عن أي من هذه القرارات، فاكتب إلى [email protected]، سأرد في نفس اليوم.