→ العودة إلى المدونة

كيف يُبنى هذا الموقع: مولّد مخصّص بالكامل بلغة Kotlin

Mohamad Almousli · 2026-10-06 · 3 دقائق قراءة

#kotlin#static-site#web#seo

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

لماذا مشروعي الخاص

أدوات بناء المواقع الجاهزة رائعة إلى أن تريد شيئًا لم تُصمَّم له. حينها تقضي وقتك في الالتفاف على الأداة بدل العمل على الموقع.

أما مع مشروعي الخاص فلا شيء ألتفّ عليه. Kotlin هي اللغة التي أستمتع بها أكثر من غيرها، لذا فالموقع كله شيفرة Kotlin: الصفحات والمكوّنات والأنماط. والمترجم يفحص كل ذلك، فيظهر الخطأ أثناء البناء لا على الموقع المنشور.

ثلاث لغات بلا عناء

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

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

كل ما هو مخصّص مجرد شيفرة

لأنني أملك كل جزء، فكل ميزة أريدها مجرد مكوّن آخر: لوحة الأوامر، والبحث في المشاريع والمدونة، ومشغّل الفيديو المخصّص، والوضعان الفاتح والداكن، وقسم التنزيلات مع مجاميع التحقق. أكتبها مرة واحدة فتحصل عليها كل الصفحات.

وأقرّر أيضًا بالضبط ما يحمّله الموقع. الخطوط والأيقونات والصور مستضافة مع الموقع نفسه، والأنماط مدمجة في كل صفحة، والصفحات تعمل حتى دون JavaScript.

شيفرة أفضل تنظيمًا

كل صفحة تتبع الشكل نفسه: ملف لبنيتها وملف لنص كل لغة. وكل عنصر مكوّن مستقل بأنماطه وسلوكه. والألوان والمسافات والخطوط تأتي من مكان واحد مشترك، فيبقى التصميم متّسقًا، وتغييره في موضع واحد يغيّره في كل مكان.

لذلك أعرف دائمًا أين يوجد كل شيء، ولا يكسر تعديلٌ في مكان شيئًا آخر بصمت.

تحسين محركات البحث مدمج

كل صفحة تحدّد عنوانها ووصفها وصورة معاينتها، والموقع يتكفّل بالباقي. بدائل اللغات، والبيانات المنظّمة لمحركات البحث، وخريطة الموقع، وخلاصة المدونة، كلها تُولَّد من المحتوى نفسه الذي تُبنى منه الصفحات.

ولأن كل شيء يأتي من مصدر واحد، لا يمكن أن تختلف بيانات محركات البحث عمّا هو موجود فعلًا على الصفحة. وعندما أضيف تدوينة أو مشروعًا يظهر تلقائيًا في كل مكان يجب أن يظهر فيه.

مبني ليكون متينًا

البيانات التي يجلبها الموقع من مصادر أخرى، مثل إحصاءات المشاريع وملفات الإصدارات، تُحفظ مؤقتًا بين عمليات البناء. وإذا تعطّلت خدمة ما أو قيّدت طلباتي، يستخدم البناء آخر نسخة سليمة بدل أن يفشل.

لا يُعاد كتابة إلا الملفات التي تغيّر محتواها فعلًا. والتنزيلات موثّقة بمجاميع تحقق تُحسب أثناء البناء، والموقع يعيد بناء نفسه وينشرها كلما تغيّر شيء. وإذا فشل البناء يومًا فلا يُنشر شيء، وتبقى آخر نسخة سليمة على الإنترنت ببساطة.

هل كان الأمر يستحق؟

بالنسبة لي، بالتأكيد. الموقع سريع ويحترم خصوصية الزوار افتراضيًا ويعمل كما أريد تمامًا. وأنا أستمتع بالعمل عليه، وهذا هو السبب الحقيقي الذي يجعل أي موقع شخصي يُحدَّث أصلًا.

تابع القراءة

2026-10-06

موقفي من الذكاء الاصطناعي، من مبرمج منذ سن الرابعة عشرة

استغرق مني تقبّل الذكاء الاصطناعي وقتًا. اليوم أستخدمه كل يوم، لكن البحث والتخطيط والبنية تبقى لي، وأحاول أن أستخدمه بشكل أخلاقي.

#ai#claude-code#opinion#ethics
ThreeTabs متاحة الآن في متجر Chrome الإلكتروني
2026-10-06

ThreeTabs متاحة الآن في متجر Chrome الإلكتروني

يمكن الآن تثبيت إضافة تحديد التبويبات بنقرة واحدة من متجر Chrome الإلكتروني، مع تحديثات تلقائية.

#browser#extension#chrome-web-store
WayWayBack: تصفّح تاريخ أي موقع كاملًا على تقويم حراري
2026-10-05

WayWayBack: تصفّح تاريخ أي موقع كاملًا على تقويم حراري

متصفّح غير رسمي يعمل بالكامل على جهازك لآلة Wayback: اختر السنة والشهر واليوم وافتح أي لقطة.

#android#flutter#wayback-machine#open-source
Claude Status Bar: حدود Claude Code أمامك دائمًا
2026-10-05

Claude Status Bar: حدود Claude Code أمامك دائمًا

مقياس استخدام يعرض الحدّين وعدّ تنازلي لكل إعادة ضبط، في لوحة Xfce أو علبة النظام.

#linux#windows#macos#claude-code#tray
2026-10-05

Floating Mute: كتم هاتفك بنقرة واحدة من أي تطبيق

زر عائم صغير لأندرويد يكتم ويُلغي الكتم بنقرة واحدة، صُمّم لمقاطع الفيديو القصيرة، ويعيد مستوى الصوت كما كان.

#android#kotlin#f-droid#open-source
2026-10-05

Floating Volume: شريط صوت يطفو فوق كل تطبيق

تحكّم بمستوى صوت جهازك من أي مكان بشريط عائم على أندرويد، مبني بـ Flutter وطبقة Kotlin أصلية.

#android#flutter#kotlin#f-droid
sddm-simplisim: شاشة تسجيل دخول سوداء وفقط
2026-10-05

sddm-simplisim: شاشة تسجيل دخول سوداء وفقط

سمة SDDM بسيطة بخلفية سوداء خالصة مع ساعة حيّة وحقلي اسم المستخدم وكلمة المرور وزر إيقاف التشغيل.

#linux#sddm#theme#minimal
2026-10-05

FiAE-AP2: موقع مذاكرة لامتحان IHK AP2

مواضيع واختبارات وبطاقات تعليمية ودورات مكثفة لامتحان Fachinformatiker Anwendungsentwicklung، بجافاسكربت خالص ومن دون خطوة بناء.

#web#javascript#ihk#study
FullShot: لقطات شاشة للصفحة كاملة بنقرة واحدة، دون رفع أي شيء
2026-10-04

FullShot: لقطات شاشة للصفحة كاملة بنقرة واحدة، دون رفع أي شيء

إضافة مجانية مفتوحة المصدر تمرّر الصفحة وتدمجها وتحفظها بصيغة PNG أو JPEG أو PDF — كل ذلك على جهازك.

#browser#extension#screenshot
ThreeTabs: متصفح لا يسمح إلا بثلاث تبويبات
2026-10-04

ThreeTabs: متصفح لا يسمح إلا بثلاث تبويبات

لماذا يتفوق حدّ التبويبات الصارم على مديري التبويبات، وكيف تطبّقه ThreeTabs، وما الذي تلمسه وما لا تلمسه.

#browser#extension#focus
لماذا يهم التدرج الرمادي (ولماذا تجعله أنظمة سطح المكتب صعبًا)
2026-09-29

لماذا يهم التدرج الرمادي (ولماذا تجعله أنظمة سطح المكتب صعبًا)

الألوان أداة صُمّمت لتجذبك مرارًا. لماذا بنيت graytoggle لـ XFCE، وما البديل في GNOME وKDE، ولماذا لا ينبغي أن يكون كل هذا بهذه الصعوبة.

#linux#xfce#gnome#kde#accessibility
↑↓ تنقّل · Enter فتح · Esc إغلاق