{"id":49720695,"url":"https://github.com/fighter90/career-ops-ui","last_synced_at":"2026-07-05T00:01:24.782Z","repository":{"id":355260517,"uuid":"1227387407","full_name":"Fighter90/career-ops-ui","owner":"Fighter90","description":"Clean, docs-style web UI for the career-ops AI job-search pipeline. Search ATS adapters (Greenhouse/Ashby/Lever) + regional portals (hh.ru/Habr Career), evaluate JDs, track applications — all from the browser.","archived":false,"fork":false,"pushed_at":"2026-07-03T23:18:33.000Z","size":42876,"stargazers_count":28,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-03T23:18:56.617Z","etag":null,"topics":["airbnb-style","ashby","ats","career-ops","claude-code","cv","express","greenhouse-api","hh-ru","job-application","job-search","lever","local-first","no-telemetry","resume","self-hosted","sse"],"latest_commit_sha":null,"homepage":"https://github.com/Fighter90/career-ops-ui","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fighter90.png","metadata":{"files":{"readme":"README.ar.md","changelog":"CHANGELOG.ar.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-02T16:02:09.000Z","updated_at":"2026-07-03T23:14:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d497eab-839a-4d87-9813-4da21c9e9869","html_url":"https://github.com/Fighter90/career-ops-ui","commit_stats":null,"previous_names":["fighter90/career-ops-ui"],"tags_count":215,"template":false,"template_full_name":null,"purl":"pkg:github/Fighter90/career-ops-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fighter90%2Fcareer-ops-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fighter90%2Fcareer-ops-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fighter90%2Fcareer-ops-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fighter90%2Fcareer-ops-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fighter90","download_url":"https://codeload.github.com/Fighter90/career-ops-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fighter90%2Fcareer-ops-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35139194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["airbnb-style","ashby","ats","career-ops","claude-code","cv","express","greenhouse-api","hh-ru","job-application","job-search","lever","local-first","no-telemetry","resume","self-hosted","sse"],"created_at":"2026-05-09T01:14:45.416Z","updated_at":"2026-07-05T00:01:24.775Z","avatar_url":"https://github.com/Fighter90.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# career-ops-ui\n\n\u003e واجهة ويب أنيقة بأسلوب التوثيق التقني لخط أنابيب البحث عن عمل بالذكاء الاصطناعي — [career-ops](https://github.com/Fighter90/career-ops).\n\u003e ابحث عن الوظائف وقيّمها واستكشفها وقدّم طلباتك وتتبّع كل عرض من تبويب واحد في المتصفح — بدلاً من التنقل بين Claude Code والطرفية وملفات markdown.\n\n[English](README.md) | [Español](README.es.md) | [Português (Brasil)](README.pt-BR.md) | [한국어](README.ko-KR.md) | [日本語](README.ja.md) | [Русский](README.ru.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [Français](README.fr.md) | [Polski](README.pl.md) | [Українська](README.uk.md) | [Dansk](README.da.md) | **العربية** | [Deutsch](README.de.md) | [Italiano](README.it.md) | [Türkçe](README.tr.md)\n\n_واجهة غير رسمية — لا علاقة لها بـ career-ops / santifer ولا تحظى بموافقتهما._\n\n[![tests](https://img.shields.io/badge/tests-1258%20passed-brightgreen)](#الاختبارات)\n[![e2e](https://img.shields.io/badge/e2e-23%2F23%20%2B%2020%2F20-brightgreen)](#الاختبارات)\n[![playwright](https://img.shields.io/badge/playwright-CI%20green-brightgreen)](#الاختبارات)\n[![node](https://img.shields.io/badge/node-%E2%89%A518-blue)](#المتطلبات)\n[![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n[![release](https://img.shields.io/badge/release-v1.97.0-blue)](https://github.com/Fighter90/career-ops-ui/releases/tag/v1.97.0)\n\n\u003e **🆕 أحدث إصدار — v1.97.0**\n\u003e\n\u003e **مصدر ماسح Dassault Systèmes + كنسة جودة.** تكافؤ مع المشروع الأصلي career-ops (‏#1498): مصدر مسح **Dassault Systèmes** جديد عديم التوكنات (تغذية بحث بطاقات Exalead العامة خلف 3ds.com/careers) ينضمّ إلى السجل بوصفه **المحوّل السادس والأربعين** — يُختار عبر المزوّد (`provider: dassault`) أو يُكتشف تلقائياً من مضيف 3ds.com، ومثبّت مضيف SSRF. وإلى جانبه، أصلح تدقيق على ثلاث جبهات (الخادم + SPA + ترجمة 16 لغة) عيوباً حقيقية: **تسابق غير متزامن في تبويب الإحصاءات** (قد يطمس عرضُ تبويب بطيء تبويباً أحدث)، و**حدّ حجم `safe-fetch` قد يتعلّق** على جلب معاينة/أنبوب يتجاوز الحدّ، وتسجيل نشاط SSE ميت، وتأكيدَي حذف بمتن فارغ، وقيم قاموس غير مترجمة (uk/ru/it). ونُقلت إصلاحات المتانة من المشروع الأصلي لمصادر Avature / Get on Board / SuccessFactors.\n\u003e\n\u003e _الإحصاءات، مُعاد تصميمها · 16 locales · 6 مزوّدات LLM · 46 محوّل ماسح · التوجيه المهني · خطة المسار المهني · طبقة الذاكرة · CV Studio · مخطّط تواصل مهني · مقابلة تجريبية · ملاءمة السوق عبر two-pager · تكافؤ مع المشروع الأصلي career-ops v1.16.0._\n\n![career-ops-ui](./images/dashboard-ar.png)\n\n\u003cdiv dir=\"rtl\"\u003e\n\n## نبذة عن career-ops\n\n[career-ops](https://career-ops.org) نظام مفتوح المصدر للبحث عن عمل يعمل على شكل أوامر slash داخل أي واجهة سطر أوامر للذكاء الاصطناعي (Claude Code وGemini CLI وCodex وQwen Code وOpenCode وGitHub Copilot CLI وAntigravity CLI — وتعمل واجهات CLI الأخرى المتوافقة مع Claude أيضاً). يقيّم كل وظيفة مقارنةً بسيرتك الذاتية وفق مقياس سداسي الأبعاد من 0,0 إلى 5,0، ويُنشئ ملفات PDF لسيرة ذاتية مخصّصة، ويتتبّع كل طلب محلياً — دون حسابات سحابية أو إرسال تلقائي أو جمع بيانات.\n\n**هذا المستودع (career-ops-ui)** واجهة ويب متكاملة فوق career-ops. تظل واجهة CLI مسؤولة عن ملء النماذج (عبر Playwright MCP) وأوامر slash؛ أما تطبيق الصفحة الواحدة (SPA) فيمنحك سطحاً يشبه نظام CRM في المتصفح فوق نفس الملفات `cv.md` و`data/applications.md` و`reports/`. كلاهما يشتركان في البيانات ذاتها.\n\n**عتبات الإجراء حسب النتيجة** (من [career-ops.org/docs](https://career-ops.org/docs)):\n\n| النتيجة | الخطوة التالية |\n|---|---|\n| **≥ 4.5** | `/career-ops apply` — تطابق عالٍ، قدّم طلبك فوراً |\n| **4.0 – 4.4** | تقديم الطلب أو `/career-ops contacto` للحصول على تزكية |\n| **3.5 – 3.9** | `/career-ops deep` — ابحث أولاً عن الشركة |\n| **\u003c 3.5** | تجاهل ما لم يكن ثمة سبب محدد |\n\n**الأدلة الرسمية** على [career-ops.org/docs](https://career-ops.org/docs):\n\n- [ما هو career-ops](https://career-ops.org/docs/introduction/what-is-career-ops)\n- [مسح بوابات الوظائف](https://career-ops.org/docs/introduction/guides/scan-job-portals)\n- [التقديم على وظيفة](https://career-ops.org/docs/introduction/guides/apply-for-a-job)\n- [التقييم الجماعي للعروض](https://career-ops.org/docs/introduction/guides/batch-evaluate-offers)\n- [إعداد Playwright](https://career-ops.org/docs/introduction/guides/set-up-playwright)\n\n## الميزات الرئيسية\n\n| الصفحة | الوصف |\n|---|---|\n| **لوحة التحكم** | عدادات إجمالية، متوسط النتائج، آخر الطلبات والتقارير |\n| **المسح** | زر 🌐 Scan يُشغّل جميع المصادر المُهيّأة (Greenhouse / Ashby / Lever / Workable / SmartRecruiters / Workday + hh.ru / Habr Career) في مرور واحد؛ نتائج فورية عبر SSE |\n| **خط الأنابيب (Pipeline)** | إدارة `data/pipeline.md`؛ معاينة آمنة للروابط (حماية SSRF) |\n| **التقييم** | الصق وصف الوظيفة ← نتيجة 0–5 عبر Anthropic أو Gemini؛ أو نموذج جاهز للنسخ |\n| **البحث المعمّق** | استكشاف الشركة عبر Anthropic SDK؛ تُحفَظ النتائج في `interview-prep/` |\n| **المتتبّع** | جدول مصفّى للطلبات فوق `data/applications.md` |\n| **السيرة الذاتية (CV)** | محرر markdown مباشر مع معاينة جانبية وحماية XSS من جهة الخادم |\n| **صحة النظام** | شارات حالة الإعداد؛ تشغيل `doctor.mjs` بنقرة واحدة |\n| **المساعدة** | توثيق مدمج بـ 12 لغة (بما فيها العربية) |\n\n## البداية السريعة\n\n\u003e **مهم — career-ops-ui لوحة تحكم *فوق* [`Fighter90/career-ops`](https://github.com/Fighter90/career-ops).** يعمل **داخل** مشروع career-ops بوصفه `career-ops/web-ui/` ويقرأ ملفات `cv.md` و`config/` و`data/` من المجلد الأصلي عبر `../`. **لا يعمل بشكل مستقل** — تحتاج أيضاً إلى مستودع career-ops الأصلي.\n\n### الخيار 1 — أمر curl واحد (موصى به)\n\n\u003c/div\u003e\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Fighter90/career-ops-ui/main/bin/setup.sh | bash\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\nيستنسخ **كلا** المستودعين، يُرتّب بنية `career-ops/web-ui/`، يثبّت التبعيات، يُشغّل التشخيص، ويبدأ الخادم على http://127.0.0.1:4317.\n\n### الخيار 2 — إضافة الواجهة إلى مشروع career-ops موجود\n\n\u003c/div\u003e\n\n```bash\ncd career-ops\ngit clone https://github.com/Fighter90/career-ops-ui.git web-ui\ncd web-ui\nnpm install\nnpm start\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\nافتح http://127.0.0.1:4317 في متصفحك.\n\n### أوامر CLI\n\n\u003c/div\u003e\n\n```bash\ncareer-ops-ui setup    # bootstrap: تثبيت التبعيات ← تشخيص ← تشغيل\ncareer-ops-ui init     # اختيار مزوّد LLM ولصق مفتاح API (تفاعلي)\ncareer-ops-ui doctor   # التحقق من Node / المشروع / المفاتيح / Playwright\ncareer-ops-ui run      # تشغيل الخادم على http://127.0.0.1:4317\ncareer-ops-ui open     # فتح تبويب لوحة التحكم وإحضاره للأمام\ncareer-ops-ui help     # عرض قائمة جميع الأوامر\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\n### اختيار مزوّد LLM\n\n`init` معالج اختيار المزوّد — اختر **Claude / Claude Code** (`ANTHROPIC_API_KEY`)، أو **Codex / OpenCode** (`OPENAI_API_KEY`)، أو **Qwen Code** (`QWEN_API_KEY`)، أو **Auto** (Anthropic ← Gemini احتياطياً). يمكن ضبط المفاتيح يدوياً:\n\n\u003c/div\u003e\n\n```bash\necho \"ANTHROPIC_API_KEY=sk-ant-...\" \u003e\u003e career-ops/.env\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\nأو من تبويب **إعدادات التطبيق** (`#/config`) في الواجهة — دون إعادة تشغيل الخادم.\n\n## المتطلبات\n\n| | |\n|---|---|\n| **Node.js** | ≥ 18 (نظام `fetch` الأصلي و`node:test`) |\n| **career-ops** | مستنسَخ ومُهيَّأ (انظر أعلاه) |\n| **اختياري** | `ANTHROPIC_API_KEY` أو `GEMINI_API_KEY` في `.env` للمشروع الأصلي، لتقييم الوظائف بنقرة واحدة |\n\n## البنية المعمارية باختصار\n\n\u003c/div\u003e\n\n```\ncareer-ops/\n├─ cv.md\n├─ portals.yml\n├─ config/\n├─ data/\n└─ web-ui/          ← هذا المستودع\n   ├─ server/       # Express + 15 وحدة مسارات\n   ├─ public/       # vanilla JS SPA — بدون bundler\n   └─ tests/        # 1086 unit + 70 Playwright + 43 e2e\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\nللخادم تبعيتان إنتاجيتان فقط: `express` و`js-yaml`. لا transpile، لا bundler — حجم الواجهة بالكامل أقل من 30 كيلوبايت.\n\n## التوثيق الكامل\n\nالتوثيق الشامل متاح باللغة الإنجليزية فقط: **[README.md](README.md)**\n\nيتضمن توصيفات تفصيلية لـ:\n- REST API الكامل (جميع نقاط النهاية `/api/*`)\n- إعداد ماسح بوابات الوظائف (Greenhouse وAshby وLever وWorkable وhh.ru وHabr Career وRSS)\n- جميع متغيرات البيئة\n- مبادئ الأمان (SSRF وXSS وتحديد معدل الطلبات)\n- دليل البنية المعمارية (SDD والاتفاقيات)\n\nالموقع الرسمي: [career-ops.org](https://career-ops.org) · التوثيق: [career-ops.org/docs](https://career-ops.org/docs)\n\n## الاختبارات\n\n\u003c/div\u003e\n\n```bash\nnpm test                    # 1086 اختبار وحدة وتكامل\nnpm run test:e2e            # 20 اختبار e2e دخاني\nnpm run test:e2e:full       # 23 اختبار e2e شامل\nnpm run test:e2e:browser    # 70 اختبار Playwright\nnpm run test:coverage       # مثل npm test + تغطية V8\n```\n\n\u003cdiv dir=\"rtl\"\u003e\n\n## الرخصة\n\nMIT. التفاصيل: [LICENSE](LICENSE).\n\nمبني على [career-ops](https://github.com/Fighter90/career-ops) بقلم [santifer](https://santifer.io).\n\n[![المساهمون](https://contrib.rocks/image?repo=Fighter90/career-ops-ui)](https://github.com/Fighter90/career-ops-ui/graphs/contributors)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffighter90%2Fcareer-ops-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffighter90%2Fcareer-ops-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffighter90%2Fcareer-ops-ui/lists"}