مشروع غير ربحي · يصونه شخص واحد · يفتح للمساهمات
نحو اثني عشر مليون شخص يكتبون الدارجة التونسية كلّ يوم — في الرسائل والتعليقات وفي وسط جُمَل فرنسية — ولا يكاد يوجد لها سجلّ سليم. OpenDerja_TN منصّة يكتب فيها التونسيون دارجتهم الجهوية ويصحّحونها ويؤكّدونها بأنفسهم. وينتج عن ذلك مدوّنة قابلة للاستشهاد، ومعجم، ومترجم مبنيّ مباشرة فوقها. النصّ أوّلاً؛ والصوت بالتصميم في مرحلة لاحقة.
جدّة في الشمال الغربي تستعمل كلمة لا يستعملها غيرها. حين تتوقّف عنها تختفي — لم يكتبها أحد. هذا يحدث باستمرار، ولا أحد يتولّاه.
ما هو
تشتغل المنصّة على النصّ من اليوم الأوّل. نموذج الموافقة ومخطّط قاعدة البيانات للصوت موجودان منذ أوّل ترحيل — لا يُضافان بعد سنوات حين يتعذّر جمعهما بأثر رجعي.
التغطية لكلّ جهة رقمٌ يُتابَع ويُنشَر ويُجنَّد له — لا أمل يُرجى. ما هو على الإنترنت يميل نحو تونس العاصمة؛ والاستقطاب الموجَّه هو الموازن.
المدوّنات الأكاديمية تتوقّف يوم صدور الورقة. هذه مبنيّة لتستمرّ في النموّ، وكلّ مساهمة مؤكَّدة تحسّن الأدوات في اليوم نفسه.
يعتمد أعراف الكتابة الموجودة CODA-TUN وNOTA بدل اختراع معيار آخر.
المدوّنة معروضة كأداة للناس سببٌ لفتحها — مترجم، معجم، عرض مقارنة — لا مجرّد ملفّ للباحثين سببٌ للاستشهاد به.
لماذا تستعمله
المدوّنة هي الأساس؛ وهذه هي ما تأتي من أجله فعلاً.
دارجة ← فصحى / فرنسية / إنجليزية بأيّ خطّ، و — وهذا ما لا يقدّمه غيرنا — فصحى / فرنسية / إنجليزية ← دارجة مع اختيار الجهة. «قُلها بدارجة الجنوب» أمرٌ تعجز عنه الأدوات الموجودة.
مجموعة بيانات مُصدَّرة بإصدارات، برخصة مفتوحة، موسومة بالجهة، بإحصاءات تغطية صادقة، وبمعرّف DOI، وبطبقات ترخيص حسب المصدر. يعيد ما كتبه التونسيون فعلاً، أو لا شيء — ولهذا يُستشهد به.
بيانات مفتوحة للتنزيل أو الاستعلام: أزواج متوازية، جُمَل موسومة بالجهة، معجم بمتغيّرات جهوية وأصول الكلمات. لا مفتاح API، لا كلفة، لا شيء في مسار الطلب قد يتعطّل.
خانة واحدة: كلمة أو جملة أو فقرة. الجهة أربعة أزرار، الموافقة خانة واحدة، دون حساب. ثلاث ثوانٍ وتدخل السجلّ.
ما الذي يميّزه
ليست أوّل مدوّنة تونسية (توجد Tunisiya وTARIC وTSAC وغيرها)، ولا أوّل توحيد لكتابة العربية التونسية (فعل ذلك CODA-TUN)، ولا أوّل منصّة تشاركية للهجة عربية. ما لا تجمعه أيّ منصّة موجودة في مكان واحد: النصّ الآن والصوت بالتصميم لاحقًا؛ تأكيد المجتمع بدل كلمة سلطة واحدة؛ وسم الجهة والحقبة معًا، فتجلس الدارجة القديمة قرب جهات اليوم الأربع؛ مترجمٌ يشتغل، لا ملفّ فقط؛ بيانات مفتوحة؛ مصونة باستمرار كخدمة مفتوحة واحدة.
| الجهة | تشمل |
|---|---|
| الشمال الغربي | الكاف، جندوبة، سليانة، القصرين، المرتفعات الغربية |
| الشمال | تونس، بنزرت، نابل، أريانة، منوبة، بن عروس |
| الساحل | سوسة، المنستير، المهدية، صفاقس، الوسط الساحلي |
| الجنوب | قابس، مدنين، تطاوين، توزر، قبلي، دوز، قفصة |
| المحور | القيم | ملاحظة |
|---|---|---|
| النطاق | عموم-تونسي · جهوي | هل هو موسوم أصلاً، لا مدى انتشاره |
| الجهة | مجموعة من: شمال غربي · شمال · ساحل · جنوب | واحدة أو أكثر. فارغة حين يكون عموم-تونسي — اللهجة متّصلة، فالجهة مجموعة لا قيمة واحدة. |
| الحقبة | معاصر · تاريخي | «الدارجة القديمة» هنا، لا في الجهة |
| الوسط | حضري · ريفي · غير معروف | يقطع الجهات، لا يتبعها |
| السجلّ | محايد · رسمي · سوقي · قديم | السوقي مُرشَّح افتراضيًّا مع مفتاح تفعيل صريح، ولا يُحذف من التصدير أبدًا |
«شمال غربي + ريفي + تاريخي» طلبٌ حقيقي يمكن أن تطلبه — وهذا التركيب بالضبط هو المادّة التي لم يجمعها أحد، وهو أهمّ أسباب وجود المشروع.
الحلقة الأساسية
النظام كلّه مبنيّ حول هذه الحلقة — سواء كتب المساهم النصّ أو سحبه جامع بيانات من مصدر عامّ.
يساهم به أحدهم، أو يسحبه جامع بيانات من مصدر مفتوح قائم على النسخ الكاملة (ويكيبيديا، Common Crawl مُرشَّح على نطاقات .tn، Tatoeba، منتديات تونسية وفق شروطها).
هل هو دارجة فعلاً؟ قصير جدًّا أو طويل جدًّا؟ هل هو شبه مكرّر لما هو في المدوّنة (MinHash/LSH)؟
إذا بدا جديدًا وصحيحًا. المكرّر يطلق «عندنا هذه — هل تقولها جهتك بشكل مختلف؟» بدل رفض صامت.
مراجعته، وسم جهته، تأكيده، ترجمته، ربط كلماته بمداخل المعجم.
لا شيء يكتبه شخص واحد يصير «صحيحًا» تلقائيًّا. يبقى الوسم أو الترجمة اقتراحًا حتى يتّفق عدّة أشخاص مستقلّين.
توافق كافٍ ← يصير الجواب الموثوق. خلاف ← يقرّر مراجعٌ موجَّه حسب الجهة. لا يُعرَض علنًا إلا الجواب المتّفَق عليه.
المترجم
البحث عن الكلمة والعبارة يمرّ عبر المعجم: تطابق تامّ، ثمّ تطابق مُطبَّع، ثمّ تشابه ثلاثيّات الحروف للأخطاء المطبعية. الجُمَل تُستَرجَع بتشابه ثلاثيّات الحروف على عناصر المدوّنة المُثبَتة مع ترجماتها البشرية.
إلى الدارجة مع اختيار الجهة هو العرض الذي يجعل الناس يشاركون الرابط.
كلّ تعليق مقبول يحسّنه فورًا — لا إعادة تدريب، لا لقطة تُرقّى، لا خطر تراجُع. المترجم القائم على الاسترجاع لا يمكنه إلا أن يتحسّن.
لا إثبات، لا تخمين. يُظهر ما وجده، وأقرب الجيران التقريبيّين، وما ينقص حسب الجهة («مُثبَت في الشمال والساحل. لا إثبات من الجنوب.»)، ودعوةً بنقرة واحدة لسدّ هذا النقص بالضبط.
عدّادٌ حيّ: هذا المترجم يعرف N كلمة وM جملة عبر أربع جهات، بازدياد عن الشهر الماضي. في اليوم الأوّل يكون الرقم صغيرًا بشكل محرج، ويبقى ظاهرًا رغم ذلك.
إنه بحث في مدوّنة، لا ترجمة آلية. يعيد ما كتبه التونسيون فعلاً، أو لا شيء. منتَجٌ أضعف من نموذج سلس وأصدق منه — وهذا الصدق هو ما يجعل الباحث يستشهد به. أيّ شيء مُولَّد يخصّ مرحلة لاحقة، موسوم دائمًا، ولا يُخلَط أبدًا بالنتائج المُثبَتة.
البنية
هذا الفصل يتيح فهم كلّ قطعة واختبارها وتغييرها وحدها.
| المستوى | اللغة | ما يفعله |
|---|---|---|
| control-plane/ | TypeScript | الخادم (واجهة NestJS)، العامل (مهامّ خلفية)، جامعو البيانات. تقريبًا كلّ المنطق — ويبقى TypeScript دائمًا؛ المشاكل الصعبة هنا هي القواعد لا السرعة الخام. |
| data-plane/ | Rust | عملٌ كثيف على المعالج ثبت بالقياس أنه يحتاجه. اليوم: كشف شبه المكرّرات. البقية مجرّد stub حتى يقول التنميط غير ذلك — لا تُعاد كتابة قطعة بـRust إلا بعد إثبات أنها عنق زجاجة. |
| intelligence-plane/ | Python (FastAPI) | استدلال وتدريب تعلُّم آلي، مشروطان بالمرحلة. مجرّد stub لفحص الصحّة الآن — لا شيء في مسار الطلب ينتظره، عن قصد. |
| frontend/ | TypeScript (Next.js) | القطعة الوحيدة التي يلمسها الزائر. لا تكلّم قاعدة البيانات مباشرةً أبدًا — دائمًا عبر واجهة الخادم، ليكون هناك مكان واحد بالضبط تُطبَّق فيه القواعد. |
الصورة الكاملة مع مخطّطات، للمطوّرين وغير المطوّرين: docs/ARCHITECTURE.md. كلّ endpoint بأشكال طلبه واستجابته: docs/API_REFERENCE.md.
أين تقف الأمور فعلاً
يحتفظ المشروع بسجلّ صادق لما جُرِّب من طرف إلى طرف مقابل ما هو مبنيّ-لكن-غير-متحقَّق مقابل ما لم يُبنَ بعد. باختصار:
المصادقة (كلمة سرّ، OAuth، تحقّق بخطوتين، جلسات مساهم مجهول)، محرّك المهامّ، التوافق، أدوات الإدارة، خطّ جمع بيانات، خدمة Rust للتخلّص من التكرار. تغطية اختبارات وحدوية حقيقية. المعلَم التالي هو تشغيله على نشرٍ حيّ — عملٌ حقيقي لا إجراء شكليّ.
كلّ صفحة في المواصفات موجودة كـstub يُبنى ويعيد 200، لا كصفحة تعمل. سبعة مكوّنات تعليق مشتركة لم توجد بعد. docs/API_REFERENCE.md فيه كلّ endpoint جاهزًا.
مستوى Rust يفعل عملاً واحدًا مقيسًا. مستوى Python مجرّد stub لفحص الصحّة. يبقى كلٌّ منهما كذلك حتى يوجد سبب مقيس — لا مؤقّت مراحل.
إن أخذت PR هنا وأنت تنتظر منتَجًا مكتملاً، ستُصاب بخيبة أمل. وإن كنت تنتظر خادمًا حقيقيًّا يعمل بثغرات واضحة في الواجهة لتملأها — فهذا دقيق.
ساهم
أعلى عمل قيمةً اليوم. تحويل stubs المسارات إلى صفحات حقيقية مقابل واجهة موثَّقة، وبناء مكوّنات التعليق المشتركة.
إصلاحات جراحية — عِلَل، تغطية اختبارات ناقصة، سدّ ثغرة موثَّقة (انظر db/DATABASE_NOTES.md).
ليس بعد — يجب أن يكون تدفّق المساهمة حيًّا ومُراجَعًا أوّلاً. يُفتَح حين تلحق الواجهة.
مفيدة دائمًا، دون حدّ أدنى من الخبرة.
قاعدة واحدة تسري على المشروع كلّه
لا تعليقات في الشيفرة، في أيّ مكان، دون استثناء. إن كنت تعتقد بصدق أنّ تعليقًا ضروريّ، قل ذلك في وصف الـPR ودع الصائن يقرّر الصياغة. الـPR التي تضيف تعليقات يُطلَب منها إزالتها.
تخطّط لشيء كبير؟ افتح issue أوّلاً — توجيه خطّة أرخص من توجيه PR منجزة. مدد المراجعة تتبع توفّر شخص واحد؛ الردّ البطيء ليس إشارةً إلى أنّ مساهمتك غير مرغوبة.
البداية
git clone https://github.com/firaslamouchi21/Open_Derja_Tn.git && cd Open_Derja_Tn pnpm install && cp .env.example .env # postgres, pgbouncer, redis, stubs pnpm infra:up # pnpm --filter @open-derja/db run migrate:deploy # :3000 pnpm --filter @open-derja/backend run start:dev # :3001 pnpm --filter @open-derja/frontend run dev استبدل كلّ قيمة change-me في .env — وخاصّةً AUTH_SECRET (openssl rand -base64 32). التكامل المستمرّ معطَّل بانتظار الإطلاق العامّ، فشغّل مجموعات الاختبار محلّيًّا (pnpm test:unit وcargo test) قبل فتح PR.
الترخيص
Apache 2.0 — المستودع كلّه. متساهل عن قصد: الانتشار أهمّ من التحكّم.
بترخيص منفصل، والاختيار لم يُحسَم بعد بين share-alike وغير التجاري. ليس بشأن الإيرادات — لا وجود لها — بل لمنع أحدهم من تسييج ما بناه المساهمون مجّانًا وبيعه لهم من جديد.
عند الإرسال، خانة صريحة واحدة: يمكن أن تدخل هذه المادّة في مجموعة بيانات مفتوحة الترخيص، بما في ذلك الاستعمال التجاري — وتشمل السجلّ المُعلَّق، لا النصّ الخام فقط. وترافقها بندٌ صوتيّ منفصل منذ اليوم الأوّل، قبل وجود التسجيل بسنوات، لأنه لا يُجمَع بأثر رجعي.
تواصل
تريد المساهمة، أو لديك سؤال عن البنية، أو تعمل على معالجة اللغة التونسية وتودّ المقارنة — يصل هذا مباشرةً إلى بريد فراس وستتلقّى ردًّا تلقائيًّا للتأكيد.