Skip to content

Repository files navigation

رادیکار

رادیکار یک Monorepo ماژولار برای کاریابی هوشمند است؛ رزومه‌سازی یکی از قابلیت‌های آن است، نه هدف نهایی محصول. رادیکار فرصت‌های شغلی را با پروفایل کاربر تطبیق می‌دهد، برای هر موقعیت رزومهٔ هدفمند می‌سازد و کاربر را برای اپلای و مصاحبه آماده می‌کند. رابط کاربری با Next.js App Router، بک‌اند با Node.js و Fastify و دیتابیس با PostgreSQL و Drizzle ساخته شده است.

داده‌های اصلی برنامه فقط از مسیر زیر عبور می‌کنند:

Browser → Next.js Web → Node.js API → PostgreSQL

Web مستقیماً به دیتابیس وصل نمی‌شود و اطلاعات دامنه در Local Storage یا IndexedDB نگهداری نمی‌شوند.

ساختار Monorepo

.
├── apps/
│   ├── web/                 # Next.js رسمی + App Router + Turbopack
│   └── api/                 # Node.js + Fastify modular API
├── packages/
│   ├── ai/                  # اتصال و parsing پاسخ مدل‌های زبانی
│   ├── config/              # اعتبارسنجی تنظیمات محیطی
│   ├── database/            # Drizzle schema, migrations و seed
│   ├── shared-types/        # Typeهای مشترک بدون وابستگی به framework
│   └── validators/          # Schemaهای مشترک Zod
├── docker-compose.yml       # PostgreSQL و API محلی
├── tsconfig.base.json       # تنظیمات مشترک TypeScript
├── turbo.json               # اجرای هماهنگ workspaceها
└── package.json             # npm workspaces و فرمان‌های ریشه

ریشه پروژه فقط نقش orchestrator دارد. Web، API و packageهای مشترک مستقل هستند و می‌توانند جداگانه Build، Deploy و Scale شوند.

پیش‌نیازها

  • Node.js نسخه 22.13.0 یا جدیدتر
  • npm نسخه 10 یا جدیدتر
  • Docker Desktop برای اجرای PostgreSQL محلی
  • پورت‌های آزاد زیر:
    • 3161 برای Web
    • 3162 برای API
    • 5433 برای PostgreSQL روی سیستم میزبان

نسخه‌های نصب‌شده را بررسی کنید:

node --version
npm --version
docker --version
docker compose version

تمام فرمان‌های این README باید از ریشه repository اجرا شوند.

راه‌اندازی سریع پیشنهادی

در این روش PostgreSQL داخل Docker و Web و API روی سیستم شما اجرا می‌شوند. این ساده‌ترین حالت برای توسعه و دیباگ است.

۱. نصب dependencyها

برای اولین اجرا یا بعد از دریافت تغییرات repository:

npm ci

اگر عمداً dependency جدیدی به package.json اضافه کرده‌اید، به‌جای آن از npm install استفاده کنید تا lockfile نیز به‌روزرسانی شود.

۲. ساخت فایل‌های تنظیمات محلی

cp apps/web/.env.example apps/web/.env.local
cp apps/api/.env.example apps/api/.env

فایل‌های .env در Git ثبت نمی‌شوند. اگر این فایل‌ها از قبل وجود دارند، آن‌ها را بدون بررسی overwrite نکنید.

تنظیم پیش‌فرض Web:

NEXT_PUBLIC_API_BASE_URL=http://localhost:3162

تنظیم پیش‌فرض اتصال API به PostgreSQL محلی:

DATABASE_URL=postgresql://radikar:radikar@127.0.0.1:5433/radikar

۳. بالا آوردن PostgreSQL

npm run infra:up

وضعیت container را بررسی کنید:

docker compose ps
docker compose logs postgres

۴. اجرای migrationها

npm run db:migrate

این فرمان migrationهای موجود در packages/database/migrations را روی دیتابیس اعمال می‌کند و مقدار DATABASE_URL را از apps/api/.env می‌خواند.

۵. ایجاد داده اولیه

npm run db:seed

Seed فضای کاری اولیه و سه پلن عضویت را ایجاد می‌کند و تکرار اجرای آن داده تکراری نمی‌سازد.

۶. اجرای هم‌زمان Web و API

npm run dev:stack

پس از آماده‌شدن سرویس‌ها:

سلامت API و اتصال دیتابیس را می‌توانید با این دو فرمان بررسی کنید:

curl http://localhost:3162/health
curl http://localhost:3162/ready

خروجی موفق endpoint دوم باید شبیه زیر باشد:

{"status":"ready"}

اجرای Web و API در terminalهای جدا

اگر می‌خواهید log هر سرویس جدا باشد، بعد از اجرای PostgreSQL و migrationها دو terminal باز کنید.

Terminal اول:

npm run dev:api

Terminal دوم:

npm run dev:web

فرمان npm run dev نیز تمام workspaceهای دارای dev script را از طریق Turborepo اجرا می‌کند؛ برای این پروژه npm run dev:stack صریح‌تر است.

اجرای PostgreSQL و API داخل Docker

در این حالت PostgreSQL و API داخل Docker اجرا می‌شوند و فقط Web روی سیستم شما اجرا می‌شود. ابتدا فایل apps/api/.env را مطابق بخش راه‌اندازی بسازید، سپس:

docker compose --profile full up -d --build

API داخل container هنگام شروع migrationها را اجرا می‌کند. برای ساخت داده اولیه:

npm run db:seed

سپس Web را اجرا کنید:

npm run dev:web

مشاهده logها:

docker compose logs -f api
docker compose logs -f postgres

توقف containerها بدون حذف اطلاعات دیتابیس:

docker compose down

پروفایل full برای توسعه محلی است و API را با NODE_ENV=development اجرا می‌کند. از همین Compose بدون سخت‌سازی تنظیمات برای Production استفاده نکنید.

ورود با OTP در محیط توسعه

در تنظیمات نمونه این دو مقدار فعال‌اند:

EXPOSE_DEVELOPMENT_OTP=true
ALLOW_FIRST_USER_SUPERADMIN=true

در نتیجه:

  1. یک شماره موبایل با الگوی 09xxxxxxxxx در صفحه ورود وارد کنید.
  2. کد شش‌رقمی توسعه در همان صفحه نمایش داده می‌شود.
  3. اولین کاربری که در دیتابیس خالی ثبت شود نقش superadmin می‌گیرد.
  4. سوپرادمین بعد از ورود به /admin هدایت می‌شود؛ کاربران معمولی به /dashboard می‌روند.

برای تعیین یک سوپرادمین مشخص می‌توانید در apps/api/.env مقدار زیر را فعال کنید:

BOOTSTRAP_SUPERADMIN_PHONE=09123456789

پس از ساخت اولین سوپرادمین، بهتر است ALLOW_FIRST_USER_SUPERADMIN را false کنید.

پلن‌ها و درگاه زرین‌پال Sandbox

سه پلن اولیه هنگام اجرای npm run db:seed ثبت می‌شوند:

پلن قیمت مدت رزومه PDF AI تطبیق مصاحبه
رایگان ۰ ۳۰ روز ۱ ۳ ۵ ۱ ۱
جست‌وجوی شغلی ۴۹۹٬۰۰۰ تومان ۳۰ روز ۵ نامحدود ۴۰ ۱۵ ۵
حرفه‌ای ۷۹۹٬۰۰۰ تومان ۳۰ روز نامحدود نامحدود ۱۵۰ ۵۰ ۱۵

پلن رایگان فقط یک‌بار و هم‌زمان با اولین ثبت‌نام کاربر اعطا می‌شود و خودکار تمدید نمی‌شود. تمدید پلن فعلی، ۳۰ روز و اعتبارهای همان پلن را اضافه می‌کند. ارتقا فوری است و ۳۰ روز جدید به تاریخ انقضای موجود افزوده می‌شود. خرید پلن پایین‌تر تا پایان پلن بالاتر غیرفعال است.

برای توسعه، تنظیمات زیر در apps/api/.env قرار می‌گیرند:

API_PUBLIC_URL=http://localhost:3162
WEB_APP_URL=http://localhost:3161
ZARINPAL_BASE_URL=https://sandbox.zarinpal.com
ZARINPAL_MERCHANT_ID=00000000-0000-4000-8000-000000000000

Sandbox طبق مستندات زرین‌پال هر UUID معتبر را به‌عنوان Merchant ID می‌پذیرد. مبالغ ارسالی به API زرین‌پال بر حسب ریال هستند و رابط کاربری آن‌ها را به تومان نمایش می‌دهد. callback روی /api/billing/callback دریافت و سپس نتیجه به /billing/result در Web هدایت می‌شود.

صفحات کاربر:

  • /upgrade: خرید و ارتقای بسته
  • /orders: سفارش‌ها و کدهای پیگیری کاربر
  • /account: نام و اطلاعات حساب؛ شماره همراه قابل تغییر نیست
  • /settings: تنظیمات امنیت و نشست

صفحات مدیریت:

  • /admin/memberships: اعطای پلن، تمدید، تغییر اعتبار، لغو و تعلیق کاربر
  • /admin/orders: سفارش‌ها و وضعیت پیگیری
  • /admin/payments: تراکنش‌ها و واریزی‌های درگاه

تنظیم مدل هوش مصنوعی

بخش‌های معمول برنامه بدون تنظیم LLM بالا می‌آیند، اما تحلیل شغل، تولید رزومه، مصاحبه و import هوشمند به provider مدل نیاز دارند.

API سازگار با OpenAI

در apps/api/.env:

LLM_PROVIDER=openai-compatible
LLM_MODEL=your-model-name
LLM_API_KEY=your-api-key
LLM_BASE_URL=https://your-provider.example/v1
LLM_INPUT_PRICE_PER_MILLION_USD=0
LLM_OUTPUT_PRICE_PER_MILLION_USD=0

برای عملیات نوشتاری می‌توانید provider جدا تعریف کنید. اگر تعریف نشود، تنظیمات اصلی LLM_* استفاده می‌شوند:

LLM_WRITE_PROVIDER=openai-compatible
LLM_WRITE_MODEL=your-writing-model
LLM_WRITE_API_KEY=your-api-key
LLM_WRITE_BASE_URL=https://your-provider.example/v1
LLM_WRITE_INPUT_PRICE_PER_MILLION_USD=0
LLM_WRITE_OUTPUT_PRICE_PER_MILLION_USD=0

Proxy محلی DeepSeek

اگر proxy محلی سازگار با پروژه را روی پورت 9655 اجرا کرده‌اید:

LLM_PROVIDER=freeDeepseekAPI
LLM_MODEL=deepseek-chat
FREE_DEEPSEEK_PORT=9655

بعد از تغییر .env، API را restart کنید.

متغیرهای محیطی API

متغیر پیش‌فرض توسعه توضیح
API_HOST 127.0.0.1 آدرس listen شدن API
API_PORT 3162 پورت API
CORS_ORIGINS http://localhost:3161 originهای مجاز، جداشده با کاما
DATABASE_URL PostgreSQL روی پورت 5433 رشته اتصال دیتابیس
DATABASE_MAX_CONNECTIONS 10 سقف connection pool هر API instance
LOG_LEVEL info سطح log بک‌اند
AUTH_SECRET فقط مقدار توسعه کلید امضای session و OTP؛ در Production حتماً عوض شود
SESSION_TTL_DAYS 30 عمر session
OTP_TTL_SECONDS 180 عمر کد یک‌بارمصرف
EXPOSE_DEVELOPMENT_OTP true نمایش کد OTP فقط در توسعه
ALLOW_FIRST_USER_SUPERADMIN true در env نمونه ارتقای اولین کاربر دیتابیس خالی
BOOTSTRAP_SUPERADMIN_PHONE خالی شماره مجاز برای bootstrap سوپرادمین
OTP_WEBHOOK_URL خالی endpoint سرویس ارسال پیامک
OTP_WEBHOOK_TOKEN خالی Bearer token اختیاری سرویس پیامک
API_PUBLIC_URL http://localhost:3162 آدرس عمومی callback بک‌اند
WEB_APP_URL http://localhost:3161 آدرس Web برای redirect نتیجه پرداخت
ZARINPAL_BASE_URL https://sandbox.zarinpal.com آدرس درگاه؛ در توسعه Sandbox
ZARINPAL_MERCHANT_ID UUID توسعه شناسه پذیرنده Sandbox

مدیریت دیتابیس

اجرای migrationهای موجود:

npm run db:migrate

ساخت migration جدید بعد از تغییر Drizzle schema:

npm run db:generate

اجرای seed:

npm run db:seed

ورود به PostgreSQL داخل Docker:

docker compose exec postgres psql -U radikar -d radikar

اطلاعات PostgreSQL داخل volume با نام radikar_postgres_data باقی می‌ماند؛ بنابراین docker compose down داده‌ها را حذف نمی‌کند.

برای حذف کامل دیتابیس محلی و شروع از صفر، فقط در صورتی که مطمئن هستید داده‌ای لازم ندارید اجرا کنید:

docker compose down -v
npm run infra:up
npm run db:migrate
npm run db:seed

فرمان down -v غیرقابل‌بازگشت است و تمام داده‌های دیتابیس محلی Docker را حذف می‌کند.

تست و کنترل کیفیت

اجرای تمام تست‌های Web، API و AI:

npm run test

فرمان‌های تفکیک‌شده:

npm run test:web
npm run test:api
npm run typecheck
npm run lint

Production build کامل Monorepo:

npm run build

این فرمان dependency graph را با Turborepo رعایت می‌کند، packageها و API را اعتبارسنجی می‌کند و Web را با Build رسمی Next.js در apps/web/.next می‌سازد.

اجرای خروجی Build روی سیستم محلی

ابتدا Build بگیرید:

npm run build

سپس در دو terminal اجرا کنید:

npm run start:api
npm run start:web

PostgreSQL باید قبل از start شدن API در دسترس باشد و migrationها نیز باید اجرا شده باشند.

الزامات Production

در Production حداقل این موارد را رعایت کنید:

  • NODE_ENV=production
  • یک AUTH_SECRET تصادفی و حداقل ۳۲ کاراکتری
  • EXPOSE_DEVELOPMENT_OTP=false
  • ALLOW_FIRST_USER_SUPERADMIN=false
  • تنظیم BOOTSTRAP_SUPERADMIN_PHONE برای bootstrap کنترل‌شده یا مدیریت نقش از قبل
  • تنظیم OTP_WEBHOOK_URL و در صورت نیاز OTP_WEBHOOK_TOKEN
  • محدودکردن CORS_ORIGINS به دامنه واقعی Web
  • استفاده از PostgreSQL production با backup، connection pooling و SSL
  • نگهداری secretها در Secret Manager، نه داخل repository یا Docker image

API در حالت Production با secret توسعه، بدون webhook پیامک یا با نمایش OTP بالا نمی‌آید و عمداً startup را متوقف می‌کند.

فرمان‌های مهم Monorepo

فرمان کاربرد
npm run dev:stack اجرای هم‌زمان Web و API
npm run dev:web فقط Web روی پورت 3161
npm run dev:api فقط API روی پورت 3162
npm run build Build کامل Monorepo با Next.js رسمی
npm run build:web Build فقط Web و dependencyهای آن
npm run build:api بررسی Build API و dependencyهای آن
npm run build:packages Build packageهای مشترک
npm run test تمام تست‌ها
npm run test:web تست‌های Web
npm run test:api تست‌های API
npm run typecheck TypeScript تمام workspaceها
npm run lint lint تمام workspaceها
npm run infra:up اجرای PostgreSQL محلی
npm run infra:down توقف containerها بدون حذف volume
npm run db:generate تولید migration جدید
npm run db:migrate اجرای migrationها
npm run db:seed ایجاد داده اولیه

رفع خطاهای رایج

Web پیام اتصال به Node API می‌دهد

  • مقدار NEXT_PUBLIC_API_BASE_URL را در apps/web/.env.local بررسی کنید.
  • مطمئن شوید API روی http://localhost:3162 اجرا شده است.
  • بعد از تغییر env، Web را restart کنید.

برای حفظ نشست ورود، در مرورگر localhost و 127.0.0.1 را با هم ترکیب نکنید. Web و NEXT_PUBLIC_API_BASE_URL باید هر دو از hostname یکسان localhost استفاده کنند؛ در غیر این صورت مرورگر ممکن است کوکی SameSite را به API نفرستد.

endpoint /ready کد 503 می‌دهد

  • وضعیت PostgreSQL را با docker compose ps بررسی کنید.
  • log دیتابیس را با docker compose logs postgres ببینید.
  • DATABASE_URL در apps/api/.env باید به پورت 5433 میزبان اشاره کند.
  • migrationها را با npm run db:migrate اجرا کنید.

خطای CORS دیده می‌شود

مقدار CORS_ORIGINS باید دقیقاً origin مرورگر، بدون مسیر اضافی، باشد:

CORS_ORIGINS=http://localhost:3161

برای چند origin از کاما استفاده کنید.

Web را فقط از http://localhost:3161 باز کنید. پورت 3162 مخصوص API است. اگر مرورگر صفحه Web را روی localhost:3162 نشان می‌دهد، یک اجرای تکراری Web فعال است؛ همه اجراهای قبلی را متوقف و فقط یک‌بار npm run dev:stack را اجرا کنید. Next.js با پورت صریح 3161 اجرا می‌شود و در صورت اشغال‌بودن آن با خطای واضح متوقف می‌شود.

کد OTP در توسعه نمایش داده نمی‌شود

این مقادیر را بررسی و API را restart کنید:

EXPOSE_DEVELOPMENT_OTP=true
NODE_ENV=development

قابلیت‌های AI خطای provider می‌دهند

حداقل LLM_PROVIDER، LLM_MODEL، LLM_API_KEY و LLM_BASE_URL را در apps/api/.env تنظیم و API را restart کنید.

یکی از پورت‌ها اشغال است

lsof -nP -iTCP:3161 -sTCP:LISTEN
lsof -nP -iTCP:3162 -sTCP:LISTEN
lsof -nP -iTCP:5433 -sTCP:LISTEN

فرآیند درست را متوقف کنید یا پورت متناظر را در تنظیمات تغییر دهید.

dependencyها نامعتبر یا ناقص‌اند

اگر package.json و package-lock.json هماهنگ‌اند:

npm ci

از npm audit fix --force بدون بررسی تغییرات breaking استفاده نکنید.

نقشهٔ راه و بک‌لاگ ایده‌ها

این بخش محل ثبت فازهای محصول و ایده‌هایی است که هنوز برای اجرای آن‌ها زمان‌بندی نشده است. هر قابلیت جدیدی که در گفتگوها یا بررسی محصول به ذهنمان می‌رسد باید ابتدا اینجا ثبت شود و فقط بعد از مشخص‌شدن دامنه، وابستگی‌ها و معیار پذیرش وارد کدنویسی شود. وضعیت‌ها:

  • [x] انجام‌شده یا موجود در نسخهٔ فعلی
  • [~] در حال طراحی یا نیازمند تصمیم
  • [ ] بک‌لاگ؛ هنوز اجرا نشده است

فاز ۰ — زیرساخت و پایهٔ محصول

  • [x] Monorepo با Web، API، دیتابیس و packageهای مشترک
  • [x] احراز هویت OTP و session امن با کوکی HttpOnly
  • [x] پروفایل مسیر شغلی، رزومه، داده‌های فرصت شغلی و مدیریت اپلای
  • [x] تطبیق رزومه و آگهی با امتیاز، مهارت‌های مشترک و شکاف‌ها
  • [x] تولید رزومهٔ هدفمند و تمرین مصاحبه با AI
  • [x] پلن‌ها، اعتبارها، پرداخت و پنل مدیریت پایه
  • [x] مستندسازی، migration، seed، health check و CI/CD

فاز ۱ — تکمیل تجربهٔ کارجو

  • [ ] ورود با Google به‌عنوان روش اصلی کاربران بین‌المللی؛ شماره موبایل برای این کاربران اجباری نباشد و اتصال حساب‌ها فقط با تأیید صریح انجام شود
  • [ ] ورود با Telegram به‌عنوان روش دوم کاربران بین‌المللی، با OIDC و PKCE؛ بدون اجبار شماره موبایل
  • [ ] ارسال کد ورود با WhatsApp OTP به‌عنوان fallback برای کاربرانی که Google یا Telegram ندارند؛ با WhatsApp Business Cloud API و قالب Authentication رسمی
  • [ ] حفظ OTP پیامکی برای کاربران ایران و کاربرانی که روش پیامک را انتخاب می‌کنند
  • [ ] مدل چندروش ورود با جدول auth_accounts برای اتصال Google، Telegram، WhatsApp و phone به یک حساب، بدون merge خودکار صرفاً بر اساس ایمیل

ترتیب پیشنهادی اجرای این بک‌لاگ: Google Login → Telegram Login → WhatsApp OTP به‌عنوان fallback → SMS برای بازار ایران. در هیچ‌یک از دو روش Google و Telegram نباید کاربر بین‌المللی فقط برای تکمیل ورود مجبور به ارائهٔ شماره موبایل شود.

  • [ ] اتصال و import فرصت‌ها از جابینجا، کوئرا، لینکدین و منابع بین‌المللی، با رعایت قوانین و محدودیت‌های هر سرویس
  • [ ] پیشنهاد فرصت‌های شخصی‌سازی‌شده بر اساس هدف شغلی، مهارت، سابقه، مکان، حقوق و امکان دورکاری
  • [ ] امتیازدهی قابل توضیح به‌جای یک عدد مبهم: چرا این فرصت مناسب یا نامناسب است؟
  • [ ] تولید نامهٔ پوششی، پیام معرفی و پاسخ فرم‌های اپلای برای هر فرصت
  • [ ] تقویم اپلای، یادآوری مهلت‌ها و پیگیری follow-up
  • [ ] تحلیل شکاف مهارتی و مسیر یادگیری پیشنهادی برای رسیدن به فرصت هدف
  • [ ] نسخهٔ فارسی/انگلیسی و آماده‌سازی رزومه برای مهاجرت کاری و فرمت‌های رایج

فاز ۲ — پنل کارفرما و مدیریت جذب

هدف این فاز ساخت یک فضای جداگانه برای شرکت‌ها و استخدام‌کننده‌هاست؛ این پنل نباید به داده‌های کارجو بدون رضایت و سطح دسترسی مشخص دسترسی داشته باشد.

  • [ ] workspace مستقل کارفرما با نقش‌های owner، recruiter، interviewer و مدیر سازمان
  • [ ] ساخت، ویرایش، انتشار و آرشیو فرصت شغلی با شرح شغل ساختاریافته
  • [ ] دریافت رزومه‌ها و درخواست‌های اپلای در یک inbox واحد
  • [ ] استخراج و نرمال‌سازی مهارت‌ها، سابقه، سطح شغلی و ترجیحات هر رزومه
  • [ ] امتیازدهی تطابق رزومه با فرصت بر اساس معیارهای قابل مشاهده و قابل تنظیم
  • [ ] مرتب‌سازی، فیلتر و مقایسهٔ چند رزومه در کنار هم
  • [ ] ساخت shortlist، برچسب‌گذاری، یادداشت داخلی و تغییر مرحلهٔ هر نامزد
  • [ ] ثبت امتیاز جداگانه برای مهارت، تجربه، شواهد عملکرد، ارتباط و تناسب با نقش
  • [ ] scorecard مشترک برای جلوگیری از تصمیم‌گیری سلیقه‌ای بین اعضای تیم
  • [ ] تاریخچهٔ تصمیم‌ها و audit log برای مشاهدهٔ اینکه چه کسی، چه امتیازی و چرا ثبت کرده است
  • [ ] امکان دعوت اعضای تیم با سطح دسترسی محدود و قابل لغو

فاز ۳ — دستیار هوشمند مصاحبه برای کارفرما

برای هر فرصت و هر شخص، AI باید یک بستهٔ مصاحبهٔ قابل بازبینی تولید کند؛ خروجی AI پیشنهاد و تصمیم‌یار است و نباید به‌تنهایی باعث رد یا پذیرش خودکار فرد شود.

  • [ ] تولید سؤال‌های اختصاصی بر اساس شرح شغل، رزومه، سطح نقش و مرحلهٔ مصاحبه
  • [ ] دسته‌بندی سؤال‌ها به فنی، رفتاری، موقعیتی، تجربه‌محور و انگیزشی
  • [ ] سؤال‌های راستی‌آزمایی برای ادعاهای مهم رزومه: عددها، دستاوردها، نقش واقعی فرد و فناوری‌های استفاده‌شده
  • [ ] شناسایی موارد مشکوک یا مبهم و تولید سؤال follow-up برای روشن‌سازی آن‌ها
  • [ ] علامت‌گذاری شکاف‌های اطلاعاتی، تناقض‌های زمانی، عنوان‌های نامشخص و ادعاهای بدون شواهد؛ بدون برچسب‌زدن قطعی یا اتهام به کارجو
  • [ ] تولید راهنمای ارزیابی برای هر سؤال: پاسخ قوی چه نشانه‌هایی دارد و چه پاسخ‌هایی نیاز به بررسی بیشتر دارند
  • [ ] تولید سؤال متفاوت برای هر فرد، بدون تبعیض بر اساس جنسیت، سن، قومیت، مذهب، وضعیت تأهل، معلولیت یا ویژگی‌های محافظت‌شده
  • [ ] ثبت یادداشت و امتیاز مصاحبه‌کننده برای هر سؤال و ساخت جمع‌بندی نهایی
  • [ ] امکان ویرایش، حذف یا اضافه‌کردن سؤال توسط کارفرما پیش از مصاحبه
  • [ ] تولید brief مصاحبه برای کارفرما و نسخهٔ آمادهٔ چاپ یا اشتراک‌گذاری
  • [ ] تشخیص تناسب واقعی با نقش از روی شواهد، نه صرفاً شباهت کلیدواژه‌ها

فاز ۴ — تحلیل پیشرفتهٔ جذب و همکاری تیمی

  • [ ] داشبورد قیف جذب: تعداد اپلای، shortlist، مصاحبه، پیشنهاد و استخدام
  • [ ] گزارش زمان رسیدگی، نرخ تبدیل و نقاط ریزش فرایند
  • [ ] مقایسهٔ کیفیت منابع جذب و کانال‌های انتشار آگهی
  • [ ] پیشنهاد shortlist با امکان override کامل انسانی و توضیح دلیل هر پیشنهاد
  • [ ] الگوهای استاندارد scorecard برای نقش‌های مهندسی، محصول، طراحی، فروش و غیره
  • [ ] همکاری هم‌زمان مصاحبه‌کنندگان و جمع‌بندی ناشناس یا نام‌دار مطابق سیاست شرکت
  • [ ] گزارش کیفیت سؤال‌ها و هم‌بستگی آن‌ها با نتیجهٔ واقعی استخدام، بدون استفادهٔ نادرست یا تبعیض‌آمیز از داده‌های تاریخی

فاز ۵ — اکوسیستم و یکپارچه‌سازی

  • [ ] API و webhook برای ATSها و ابزارهای منابع انسانی
  • [ ] import/export استاندارد رزومه و فرصت با JSON/CSV/PDF
  • [ ] اتصال تقویم برای زمان‌بندی مصاحبه و ارسال یادآوری
  • [ ] ارسال ایمیل و پیام‌های transactional با قالب‌های قابل تنظیم
  • [ ] صفحهٔ عمومی فرصت شغلی با SEO و schema مناسب
  • [ ] گزارش‌های سازمانی، صورتحساب تیمی و مدیریت چند شرکت

الزامات مشترک همهٔ فازها

  • رضایت روشن کارجو برای نمایش رزومه و اطلاعات شخصی به هر کارفرما
  • امکان لغو دسترسی، انقضای لینک رزومه و حذف یا export داده‌ها
  • جداسازی کامل tenantهای کارفرما و جلوگیری از نشت داده بین شرکت‌ها
  • ثبت audit log برای مشاهده، دانلود، امتیازدهی و تغییر وضعیت رزومه‌ها
  • رمزنگاری داده‌های حساس، حداقل‌سازی داده و نگهداری محدود بر اساس نیاز واقعی
  • توضیح‌پذیری امتیازهای AI، نمایش عدم قطعیت و امکان اصلاح خروجی توسط انسان
  • تست امنیت، تست دسترسی نقش‌ها، تست بار و پایش خطا پیش از انتشار هر فاز

قالب ثبت ایدهٔ جدید

برای اضافه‌کردن ایده‌های بعدی از این قالب استفاده شود:

### [ ] نام قابلیت — فاز پیشنهادی: X
- مسئله‌ای که حل می‌کند:
- کاربر یا نقش استفاده‌کننده:
- جریان اصلی کاربر:
- داده‌ها و وابستگی‌های لازم:
- ریسک حریم خصوصی/امنیت:
- معیار پذیرش:
- سؤال‌های باز و موارد نیازمند شفاف‌سازی:

مستندات بیشتر

جزئیات مرز داده Web در apps/web/lib/data/README.md آمده است.

نقشهٔ سریع معماری، راه‌اندازی، استقرار و وضعیت‌های شناخته‌شده در PROJECT_KNOWLEDGE.md نگهداری می‌شود.

About

AI resume maker

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages