Netnyahoo
Mac용 실질적인 Chromium으로, Arc 사이드바와 Dia 폴리시를 갖추고 계정 없이 무료·오픈소스이며 광고·추적·소송에 면역이다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗منصة سعودية تساعد المستخدم على فهم موقفه النظامي وترتيب خطواته، عبر أدوات أسئلة وأجوبة مبنية على محركات قرار مُدارة ومراجَعة قانونيًا.
npm install
cp .env.example .env.local # ثم عدّل القيم
npm run dev
الموقع: http://localhost:3000 · لوحة الإدارة: http://localhost:3000/admin
| المتغيّر | الغرض |
|---|---|
ADMIN_PASSWORD | كلمة مرور لوحة الإدارة — غيّرها قبل النشر |
ADMIN_SESSION_SECRET | مفتاح توقيع جلسة الإدارة (نص عشوائي طويل) |
NEXT_PUBLIC_SITE_URL | عنوان الموقع |
لا توجد أي مفاتيح داخل كود الواجهة.
app/ الصفحات العامة + لوحة الإدارة + مسارات API
components/ مكوّنات الواجهة (بلا أي منطق قانوني)
lib/ store · engine (مشغّل القرار) · custody (وحدة الحضانة) · hijri · auth · analytics
types/ تعريفات كل الكيانات
data/ البيانات — منفصلة تمامًا عن الكود
engines/ محرك لكل ملف (أدوات شجرة الأسئلة)
engine-versions/ أرشيف الإصدارات السابقة
modules/ قواعد الوحدات البرمجية
الأسئلة والقواعد والنتائج والمصادر النظامية لا توجد داخل كود الواجهة إطلاقًا. كلها في data/engines/*.json. يمكن تعديل شجرة القرار أو إنشاء نسخة جديدة منها دون لمس تصميم الموقع.
عند الانتقال إلى قاعدة بيانات حقيقية، التغيير محصور في lib/store.ts وحده.
كل محرك يحمل: معرّفًا ثابتًا، اسمًا، مجالًا قانونيًا، أسئلة وخيارات، مسارًا تاليًا لكل إجابة، شروط ظهور، نتائج، أسباب النتيجة، الوقائع الناقصة، المصادر النظامية، تاريخ آخر مراجعة، اسم المراجع، رقم الإصدار، الحالة (مسودة/تحت المراجعة/منشور/موقوف)، مدة سريان الإصدار، وسجل تعديلات.
فحص السلامة: lib/engine.ts يتحقق قبل النشر من ترابط الشجرة — فروع تشير إلى عناصر غير موجودة، نتائج غير قابلة للوصول، نتائج بلا مصدر، مصادر غير متحقق منها، مراجعة قانونية ناقصة. النتائج تظهر في صفحة المحرك داخل لوحة الإدارة.
الإصدارات: تغيير رقم الإصدار يؤرشف الإصدار الحالي في data/engine-versions/ تلقائيًا ويضيف قيدًا في سجل التعديلات، فيبقى الرجوع ممكنًا.
engine-contract-type)يوجّه المستخدم إلى نوع مدة عقده، بثلاثة أنواع نتائج: محدد المدة · غير محدد المدة · تحتاج مراجعة محامٍ.
غير السعودي (م.37): العقد يجب أن يكون مكتوبًا ومحدد المدة.
السعودي (م.55):
«غير متأكد» في أي سؤال → مراجعة محامٍ، ولا يُصدر الكاشف نتيجة عندئذٍ.
المادة 77 مرفقة مع نتائج التكييف: التعويض في غير محدد المدة أجر 15 يومًا عن كل سنة خدمة، وفي محدد المدة أجر المدة الباقية، وبحد أدنى أجر شهرين.
المحرك بحالة مسودة، ويظهر للمستخدم بتنبيه واضح.
مؤسسة قانونية هادئة: مساحات واسعة، حبر كحلي، ولون تمييز واحد هو الذهبي. الألوان التسعة والخطوط معرّفة في مكان واحد: app/globals.css (--bg --surface --ink --ink-2 --gold --gold-soft --text --muted --line)، وسلالم Tailwind (brand-* gold-* slate-*) موجّهة إليها، فيتغيّر الموقع كله من ذلك الملف. ألوان الحالة (أخضر/أصفر/أحمر) محصورة في نتائج الكواشف لأنها تحمل معنى قانونيًا.
الخط: IBM Plex Sans Arabic للواجهة، وNoto Kufi Arabic لاسم المنصة بجانب الشعار.
الشعار: درع ذهبي بداخله ميزان تمسك عموده قبضة — المستخدم يمسك ميزان العدل بيده. يُعرض على خلفية الحبر (الرأس والتذييل). المصادر في brand/ (الأصل في brand/original، والمشتقات في brand/option-3)، وما يستخدمه الموقع في public/brand وapp/icon.png. المكوّن: components/Logo.tsx.
الخطاب: يُخاطَب الزائر بصيغة المذكّر دائمًا. أما مطابقة التذكير والتأنيث داخل النتائج (الأم/الجدة) فتتبع القاعدة النحوية.
كل أداة في المنصة تجيب عن سؤال واحد محدد وتوجّه المستخدم إلى موقفه النظامي مع مستنده — لا «موجّه مسار» يسرد الخيارات دون أن يصل إلى شيء. وإذا لم تكفِ المعطيات فالمخرج الصريح هو «تحتاج مراجعة محامٍ»، لا نتيجة مظنونة.
لكن المنصة لا تحكم ولا تُصدر قرارًا. النتيجة استرشادية دائمًا: تبيّن ما يقضي به النظام في الغالب بناءً على ما أدخله المستخدم، وللقضاء أن يخالفها. ولذلك يُمنع في نصوص الواجهة استعمال ألفاظ الحسم والقطع («تحسم»، «نتيجة قاطعة»، «المستحق للحضانة» مجردة)، ويُستعمل بدلها: يوجّهك، استرشادية، غالبًا، مع التذكير بأنها لا تُغني عن استشارة محامٍ مرخّص.
kind: "module")بعض الأدوات لا تكفيها شجرة أسئلة خطية: تحتاج حسابات، أو مخرجات متعددة، أو مصفوفة مرشّحين. هذه تُبنى كوحدة لها كود مخصّص، مع بقاء نصوصها وحدودها ومواد استنادها بيانات في data/modules/.
custody-checker)يحدّد المستحق للحضانة لكل محضون على حدة، وفق نظام الأحوال الشخصية (المواد 124–135):
استثناء مصلحة المحضون: سببان يجوز للمحكمة استثناؤهما — زواج الحاضنة (126/1) والسكوت عن المطالبة (128/3) — ويظهران للمستخدم موسومين بذلك.
تنبيه للمطوّر: أحكام الحضانة موزّعة بين النظام واللائحة التنفيذية. لا يكفي الرجوع إلى النظام وحده — فقاعدة العامين ليست فيه بل في اللائحة.
«غير متأكد» لا تُرجَّح ضد صاحبها، بل تُسجَّل كنقطة تحتاج تحققًا وتُرفع راية مراجعة محامٍ.
الأعمار تُحسب بالسنوات الهجرية (تقويم أم القرى) في lib/hijri.ts.
الوحدة بحالة مسودة بانتظار اعتماد المراجع القانوني. تُدار حوكمتها من /admin/engines.
/api/track يقبل أحداثًا من قوائم مغلقة فقط (lib/metrics-schema.ts)، فلا يمكن تسريب نص حر أو إجابة./api/referral يتجاهل sharedSummary عمدًا — المنصة لا تنقل ملخص القضية.دالة واحدة في المتصفح track(event, props) (lib/track.ts) ترسل إلى /api/track، والخادم يزيد عدّاد اليوم في جدول واحد:
metrics_daily (date, event, props_json, count) -- المفتاح: (date, event, props_json)
lib/metrics-schema.ts. أي قيمة خارج القوائم ترفض الحدث كله. لإضافة حدث جديد يُضاف هناك أولًا.data/metrics.json بديلًا محليًا غير مرفوع.عدّاد الاستخدام العام «استُخدمت X مرة» على بطاقة كل أداة وصفحتها: يُحتسب الاستخدام مرة لكل تبويب متصفح (بدء الكاشف الداخلي، أو فتح الخدمة الخارجية)، فتحديث الصفحة لا يزيده. يبدأ من صفر فعليًا ولا يوجد حقل لإدخال رقم. لا يظهر قبل الحد الأدنى (افتراضيًا 20، يُغيَّر من تبويب «الاستخدام») ويمكن إخفاؤه لكل أداة. القراءة العامة: /api/tools/{slug}/uses (مخزّنة مؤقتًا 10 دقائق).
الاختبار: node scripts/metrics-privacy.test.mjs للمخطط، ومع عنوان خادم محلي للاختبار الحي (حمولات خبيثة، كوكي وعنوان مزروعان، تزامن، ثم فحص كل صف مخزَّن).
ثلاثة أنواع منفصلة: google / lawyer / sponsor. كل إعلان يحمل علامة «إعلان» أو «محتوى مدفوع» ظاهرة، ومعزول بصريًا.
قاعدة مفروضة في الكود: إعلانات Google محجوبة في أي أداة allowGoogleAds = false (الحضانة وفسخ النكاح مثلًا) حتى لو أُضيف الإعلان من اللوحة. صفحة النتيجة تبقى نظيفة.
المحامي المعلن (sponsored) والترشيح غير المدفوع (recommended) مميّزان بشارتين مختلفتين دائمًا.
علاقة متعدد-إلى-متعدد عبر lawyer-assignments: المحامي الواحد بعدة أدوات، والأداة الواحدة بعدة محامين، مع تخصيص بحسب النتيجة والمنطقة والمدينة ونوع القضية، ومدة إعلانية، وأولوية ظهور، وإيقاف دون حذف البيانات.
X-Robots-Tag).audit-log.dangerouslySetInnerHTML — لا مجال لحقن HTML من المقالات.http/https — يمنع javascript: وdata:.X-Frame-Options وX-Content-Type-Options وReferrer-Policy.ADMIN_PASSWORD وADMIN_SESSION_SECRET إلى قيم قوية.AdminUser).data وجرّب الاستعادة فعليًا.