init
This commit is contained in:
commit
d295c7f139
1527 files changed
+270726
No files matched your search
@@ -0,0 +1,35 @@
|
||||
# career-ops — Plugin activation (opt-in)
|
||||
#
|
||||
# cp config/plugins.example.yml config/plugins.yml
|
||||
#
|
||||
# Plugins are OFF by default. The core runs zero-keys and local-first; plugins
|
||||
# are the opt-in home for integrations that need a key or talk to an external
|
||||
# service. Two gates must both be satisfied for a plugin to load:
|
||||
# 1. Enable it here (enabled: true) + any non-secret settings.
|
||||
# 2. Put the SECRET values (API keys/tokens) in your .env — NEVER here.
|
||||
# Each plugin declares which env vars it needs; see .env.example and
|
||||
# `node doctor.mjs` (lists every plugin + whether its keys are present).
|
||||
#
|
||||
# config/plugins.yml is yours: gitignored, never auto-updated. Bundled plugins
|
||||
# live in plugins/; your own private plugins go in plugins.local/.
|
||||
|
||||
plugins:
|
||||
# ── apify (provider) ── keyed job source via an Apify actor. (feature #791, ported from PR #693)
|
||||
# Needs APIFY_TOKEN in .env. Fires only on a portals.yml entry with `provider: apify`
|
||||
# (the actor + field_map live on that portals.yml entry, not here).
|
||||
apify:
|
||||
enabled: false
|
||||
|
||||
# ── notion (export + search) ── mirror your tracker to a Notion DB / read records. (features #667/#668, ported from PR #959)
|
||||
# Needs NOTION_ACCESS_TOKEN + NOTION_PARENT_PAGE_ID in .env. Run via `node plugins.mjs run notion export`.
|
||||
# The DB is resolved by NAME ("Applications") under your parent page — no id needed here.
|
||||
notion:
|
||||
enabled: false
|
||||
|
||||
# ── gmail (ingest) ── pull job leads from a Gmail label into your pipeline. (feature #810, ported from PR #1203)
|
||||
# Needs GMAIL_CLIENT_ID + GMAIL_CLIENT_SECRET + GMAIL_REFRESH_TOKEN in .env.
|
||||
# Run via `node plugins.mjs run gmail`.
|
||||
gmail:
|
||||
enabled: false
|
||||
# label: "Job Leads" # the Gmail label to scan
|
||||
# days_back: 7 # how far back to look
|
||||
@@ -0,0 +1,193 @@
|
||||
# Career-Ops Profile Configuration
|
||||
# Copy this file to config/profile.yml and fill in your details.
|
||||
# This is the single source of truth for your personal data across all modes.
|
||||
|
||||
candidate:
|
||||
full_name: "Jane Smith"
|
||||
email: "jane@example.com"
|
||||
phone: "+1-555-0123"
|
||||
# Optional. Used by `/career-ops email` contact blocks in markets where WeChat
|
||||
# is an expected recruiting channel. Omit or leave blank if not applicable.
|
||||
wechat: ""
|
||||
location: "San Francisco, CA"
|
||||
linkedin: "linkedin.com/in/janesmith"
|
||||
portfolio_url: "https://janesmith.dev"
|
||||
github: "github.com/janesmith"
|
||||
twitter: "https://x.com/janesmith"
|
||||
# Optional profile photo for the PDF CV (opt-in, #264). Leave empty to omit it
|
||||
# entirely: US/UK and many-market ATS penalize photos, so the photoless layout
|
||||
# is the default. Set it only for DACH/European markets (Germany, Austria,
|
||||
# Switzerland) where a professional photo is expected. Use a local file path or
|
||||
# a data: URL — the PDF renderer inlines local images.
|
||||
photo: ""
|
||||
|
||||
target_roles:
|
||||
# Your North Star roles — what you're optimizing for
|
||||
primary:
|
||||
- "Senior AI Engineer"
|
||||
- "Staff ML Engineer"
|
||||
# Archetypes help the evaluation system score fit
|
||||
archetypes:
|
||||
- name: "AI/ML Engineer"
|
||||
level: "Senior/Staff"
|
||||
fit: "primary" # primary = dream role, secondary = good fit, adjacent = stretch
|
||||
- name: "AI Product Manager"
|
||||
level: "Senior"
|
||||
fit: "secondary"
|
||||
- name: "Solutions Architect"
|
||||
level: "Mid-Senior"
|
||||
fit: "adjacent"
|
||||
|
||||
narrative:
|
||||
# Your professional headline (1 line)
|
||||
headline: "ML Engineer turned AI product builder"
|
||||
# Your exit story — what makes you unique
|
||||
exit_story: "Built and sold my SaaS after 5 years. Now focused on applied AI at scale."
|
||||
# Your top 3-5 superpowers
|
||||
superpowers:
|
||||
- "End-to-end ML pipelines"
|
||||
- "Fast prototyping (idea to prod in 2 weeks)"
|
||||
- "Cross-functional communication"
|
||||
# Proof points — projects, articles, case studies with measurable impact
|
||||
proof_points:
|
||||
- name: "Project Alpha"
|
||||
url: "https://janesmith.dev/project-alpha"
|
||||
hero_metric: "Reduced inference latency 40%"
|
||||
- name: "Open Source Tool"
|
||||
url: "https://github.com/janesmith/tool"
|
||||
hero_metric: "2K+ GitHub stars"
|
||||
# Optional: dashboard/demo URL with credentials
|
||||
# dashboard:
|
||||
# url: "https://janesmith.dev/demo"
|
||||
# password: "demo-2026"
|
||||
|
||||
compensation:
|
||||
target_range: "$150K-200K" # Your target total comp
|
||||
currency: "USD"
|
||||
minimum: "$120K" # Walk-away number
|
||||
location_flexibility: "Remote preferred, 1 week/month on-site possible"
|
||||
|
||||
location:
|
||||
country: "United States"
|
||||
city: "San Francisco"
|
||||
timezone: "PST"
|
||||
visa_status: "No sponsorship needed"
|
||||
# For remote roles outside your country:
|
||||
# onsite_availability: "1 week/month in any city"
|
||||
|
||||
# Optional follow-up cadence preferences for `node followup-cadence.mjs`.
|
||||
# CLI flags still win for one-off runs (for example `--applied-days 10`).
|
||||
# followup_cadence:
|
||||
# applied_first_days: 7
|
||||
# applied_subsequent_days: 7
|
||||
# applied_max_followups: 2
|
||||
# responded_initial_days: 1
|
||||
# responded_subsequent_days: 3
|
||||
# interview_thankyou_days: 1
|
||||
|
||||
cv:
|
||||
output_format: "html" # "html" (default) or "latex"
|
||||
# (Optional) Canva resume design ID for visual CV generation via /career-ops pdf.
|
||||
# Find it in your Canva design URL: https://www.canva.com/design/DAxxxxxxx/...
|
||||
# The ID starts with "D" and is 11 characters long.
|
||||
# canva_resume_design_id: "DAxxxxxxxxx"
|
||||
|
||||
# ── Cover Letter Settings ──────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops cover` and the cover letter sub-flow in `/career-ops pdf`.
|
||||
# All fields are optional — omit any you don't need.
|
||||
|
||||
cover_letter:
|
||||
# Your notice period in calendar days. Surfaced as a prompt default when the
|
||||
# JD requests an immediate start. The user confirms the actual value before it
|
||||
# appears in the letter.
|
||||
notice_period_days: 30
|
||||
|
||||
# Your current professional domain (used to detect domain gaps vs the JD).
|
||||
# Plain English, e.g. "digital media", "fintech", "healthcare IT".
|
||||
primary_domain: "your current domain"
|
||||
|
||||
# Languages you are actively learning. Each entry MAY produce a closing
|
||||
# sentence in that language IF the JD location matches one of the listed
|
||||
# countries AND the user confirms inclusion during the cover letter flow.
|
||||
# Remove the block entirely if not applicable.
|
||||
language_learning:
|
||||
- language: Spanish
|
||||
current_level: B1
|
||||
target_level: B2
|
||||
target_date: "end of 2026"
|
||||
# The sentence to include, written in that language. Keep it one line.
|
||||
sentence: "Estoy aprendiendo español y espero alcanzar el nivel B2 a finales de 2026."
|
||||
# Only trigger this entry when the JD location is in one of these countries.
|
||||
countries: [Spain, Mexico, Argentina, Colombia, Chile]
|
||||
|
||||
# ── Contact Preferences ──────────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops contacto` (outreach CTA) and `/career-ops email` (contact
|
||||
# block) to steer drafted messages toward how you actually want to be reached.
|
||||
# Optional. Omit the whole block, or set preferred_channel to "either", to keep
|
||||
# today's behavior unchanged (no channel steering).
|
||||
#
|
||||
# contact_preferences:
|
||||
# preferred_channel: "email" # email | phone | either — default "either" if omitted
|
||||
# # Optional. Surfaced near the contact block in `/career-ops email` drafts and
|
||||
# # can inform the CTA wording in `/career-ops contacto`. Keep it one line.
|
||||
# note: "Screens unknown numbers — please email or text first to schedule a call"
|
||||
|
||||
# ── Outreach / greeting ─────────────────────────────────────────────────────
|
||||
#
|
||||
# Used by the greeting variant of `/career-ops contacto` (the short first-touch
|
||||
# message for BOSS Zhipin 打招呼, job-board chat, or a cold-email opener).
|
||||
#
|
||||
# greeting_max_chars is the hard character budget for that message. Default when
|
||||
# the key is absent: 150 (BOSS Zhipin's greeting limit). Raise or lower it to
|
||||
# match the platform you're messaging on.
|
||||
# outreach:
|
||||
# greeting_max_chars: 150
|
||||
|
||||
# ── Application Email Drafts ────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops email` when drafting formal application emails. This is
|
||||
# separate from `contacto` short outreach and `cover` full cover letters.
|
||||
# All fields are optional.
|
||||
#
|
||||
# application_email:
|
||||
# include_contact_block: true
|
||||
# include_attachment_checklist: true
|
||||
# # Use this when you want the email body to say "the email used to send this
|
||||
# # message" instead of printing a concrete email address from candidate.email.
|
||||
# # default_sender_note: "the email used to send this message"
|
||||
# # signature_name: "Jane Smith"
|
||||
|
||||
# ── Auto-PDF threshold ──────────────────────────────────────────────────────
|
||||
#
|
||||
# Auto-PDF threshold during evaluation (used by `/career-ops pipeline` and
|
||||
# `bash batch/batch-runner.sh`).
|
||||
#
|
||||
# An offer's tailored CV PDF is auto-generated only when its score is
|
||||
# >= this threshold. Generating a PDF costs ~30-60s per offer (Playwright
|
||||
# launch + HTML render), and most offers in a scan score 2.x/3.x and never
|
||||
# become an actual application — so the gate avoids wasted renders.
|
||||
#
|
||||
# Default (key absent OR commented out): 3.0 — the original gate of
|
||||
# `/career-ops pipeline`. Both evaluation paths apply the same default, so
|
||||
# a batch run and an interactive run treat the same offer identically.
|
||||
#
|
||||
# Raise it (e.g. 4.0) to auto-generate PDFs only for stronger matches and
|
||||
# leave the rest report-only — those can still be produced on demand via
|
||||
# `/career-ops pdf {company-slug}`. Fractional thresholds work (e.g. 3.5 —
|
||||
# half-point scores like 3.5/5 occur in evaluations). Set it to 0 to
|
||||
# generate a PDF for every offer.
|
||||
# auto_pdf_score_threshold: 4.0
|
||||
|
||||
# ── Re-apply Cooldown Windows ──────────────────────────────────────────────
|
||||
#
|
||||
# Define cooldown windows for companies where you've recently applied.
|
||||
# The scanner will skip new postings at these companies during the window.
|
||||
#
|
||||
# re_apply_windows:
|
||||
# CompanyA:
|
||||
# same_role_days: 180
|
||||
# cross_role_bucket: "all_EM_roles"
|
||||
# applied_to: ["Senior Software Engineer"]
|
||||
# last_apply_date: "2026-01-01"
|
||||
@@ -0,0 +1,211 @@
|
||||
# Career-Ops Profile Configuration
|
||||
# Copy this file to config/profile.yml and fill in your details.
|
||||
# This is the single source of truth for your personal data across all modes.
|
||||
|
||||
candidate:
|
||||
full_name: "Романова Валерия Вячеславовна"
|
||||
email: "vbleroy@yandex.ru"
|
||||
phone: "+7 (950) 906-61-62"
|
||||
# Telegram — основной канал связи для этого рынка
|
||||
telegram: "@vbleroy"
|
||||
# Optional. Used by `/career-ops email` contact blocks in markets where WeChat
|
||||
# is an expected recruiting channel. Omit or leave blank if not applicable.
|
||||
wechat: ""
|
||||
location: "Тула, Россия"
|
||||
linkedin: ""
|
||||
portfolio_url: ""
|
||||
github: ""
|
||||
twitter: ""
|
||||
# Optional profile photo for the PDF CV (opt-in, #264). Leave empty to omit it
|
||||
# entirely: US/UK and many-market ATS penalize photos, so the photoless layout
|
||||
# is the default. Set it only for DACH/European markets (Germany, Austria,
|
||||
# Switzerland) where a professional photo is expected. Use a local file path or
|
||||
# a data: URL — the PDF renderer inlines local images.
|
||||
photo: ""
|
||||
|
||||
target_roles:
|
||||
# Your North Star roles — what you're optimizing for
|
||||
primary:
|
||||
- "Frontend Developer (Vue.js)"
|
||||
- "Vue.js Developer"
|
||||
# Archetypes help the evaluation system score fit
|
||||
archetypes:
|
||||
- name: "Frontend Developer (Vue.js)"
|
||||
level: "Middle"
|
||||
fit: "primary" # primary = dream role, secondary = good fit, adjacent = stretch
|
||||
- name: "Mobile Developer (Flutter)"
|
||||
level: "Middle"
|
||||
fit: "secondary"
|
||||
- name: "Fullstack Developer (Vue + Node.js)"
|
||||
level: "Middle"
|
||||
fit: "adjacent"
|
||||
|
||||
narrative:
|
||||
# Your professional headline (1 line)
|
||||
headline: "Frontend-разработчик (Vue 3 + Flutter) с опытом проектирования RBAC-авторизации"
|
||||
# Your exit story — what makes you unique
|
||||
exit_story: "Пришла в разработку из информационной безопасности — образование по защите информации даёт нестандартный для frontend-разработчика взгляд на модели доступа и авторизации."
|
||||
# Your top 3-5 superpowers
|
||||
superpowers:
|
||||
- "Проектирование моделей авторизации (RBAC) на стыке frontend и ИБ-образования"
|
||||
- "Веду 3 продукта одновременно: веб (Vue 3, с нуля), legacy-проект (Vue 3) и мобильное приложение (Flutter)"
|
||||
- "Беру на себя дизайнерские задачи (UI-редизайн, app-иконки) в компании без штатного дизайнера"
|
||||
- "Проактивно поднимаю вопросы приоритизации бэклога — стала участником стратегического планирования спринтов"
|
||||
- "Внедрение процессов в команде (Git/GitLab, Feature Branching, версионирование, менторство)"
|
||||
# Proof points — projects, articles, case studies with measurable impact
|
||||
proof_points:
|
||||
- name: "Здесь ЕКОМ — ролевая модель авторизации (RBAC)"
|
||||
url: ""
|
||||
hero_metric: "Спроектировала и объяснила бэкенд-команде модель ролей для ~20 пользователей в офисе с разграничением по отделам (логистика/заказы)"
|
||||
- name: "Здесь ЕКОМ — график курьеров (vue-cal, drag-and-drop)"
|
||||
url: ""
|
||||
hero_metric: "Заменила ручной ввод расписания SQL-запросами разработчиков — теперь отдел логистики работает полностью самостоятельно"
|
||||
- name: "Здесь ЕКОМ — список заказов с 9 фильтрами"
|
||||
url: ""
|
||||
hero_metric: "Заменила неудобные таблицы 1С; используется логистикой, клиентским отделом, техподдержкой и разработчиками"
|
||||
- name: "«Здесь Аптека» — диагностика и фикс бага «Избранное»"
|
||||
url: ""
|
||||
hero_metric: "Нашла причину (загрузка одним запросом), реализовала постраничную загрузку — жалобы пользователей прекратились"
|
||||
- name: "РМК — WebSocket-оповещения в реальном времени"
|
||||
url: ""
|
||||
hero_metric: "Впервые видно, сколько из ~1200 аптек онлайн и кто прочитал оповещение и когда"
|
||||
# Optional: dashboard/demo URL with credentials
|
||||
# dashboard:
|
||||
# url: ""
|
||||
# password: ""
|
||||
|
||||
compensation:
|
||||
target_range: "100 000 - 120 000+ ₽/мес на руки" # Your target total comp
|
||||
currency: "RUB"
|
||||
minimum: "100 000 ₽/мес на руки" # Walk-away number
|
||||
location_flexibility: "Удалённо (предпочтительно) или гибрид/офис в Туле, только дневной график. Переезд и командировки — нет."
|
||||
|
||||
location:
|
||||
country: "Россия"
|
||||
city: "Тула"
|
||||
timezone: "GMT+3 (МСК)"
|
||||
visa_status: "Гражданство РФ, разрешение на работу не требуется"
|
||||
# For remote roles outside your country:
|
||||
# onsite_availability: "1 week/month in any city"
|
||||
|
||||
# Русскоязычный рынок — используем русские режимы (modes/ru/) по умолчанию
|
||||
language:
|
||||
primary: ru
|
||||
modes_dir: modes/ru
|
||||
|
||||
# Optional follow-up cadence preferences for `node followup-cadence.mjs`.
|
||||
# CLI flags still win for one-off runs (for example `--applied-days 10`).
|
||||
# followup_cadence:
|
||||
# applied_first_days: 7
|
||||
# applied_subsequent_days: 7
|
||||
# applied_max_followups: 2
|
||||
# responded_initial_days: 1
|
||||
# responded_subsequent_days: 3
|
||||
# interview_thankyou_days: 1
|
||||
|
||||
cv:
|
||||
output_format: "html" # "html" (default) or "latex"
|
||||
# (Optional) Canva resume design ID for visual CV generation via /career-ops pdf.
|
||||
# Find it in your Canva design URL: https://www.canva.com/design/DAxxxxxxx/...
|
||||
# The ID starts with "D" and is 11 characters long.
|
||||
# canva_resume_design_id: "DAxxxxxxxxx"
|
||||
|
||||
# ── Cover Letter Settings ──────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops cover` and the cover letter sub-flow in `/career-ops pdf`.
|
||||
# All fields are optional — omit any you don't need.
|
||||
|
||||
cover_letter:
|
||||
# Your notice period in calendar days. Surfaced as a prompt default when the
|
||||
# JD requests an immediate start. The user confirms the actual value before it
|
||||
# appears in the letter.
|
||||
notice_period_days: 30
|
||||
|
||||
# Your current professional domain (used to detect domain gaps vs the JD).
|
||||
# Plain English, e.g. "digital media", "fintech", "healthcare IT".
|
||||
primary_domain: "your current domain"
|
||||
|
||||
# Languages you are actively learning. Each entry MAY produce a closing
|
||||
# sentence in that language IF the JD location matches one of the listed
|
||||
# countries AND the user confirms inclusion during the cover letter flow.
|
||||
# Remove the block entirely if not applicable.
|
||||
language_learning:
|
||||
- language: Spanish
|
||||
current_level: B1
|
||||
target_level: B2
|
||||
target_date: "end of 2026"
|
||||
# The sentence to include, written in that language. Keep it one line.
|
||||
sentence: "Estoy aprendiendo español y espero alcanzar el nivel B2 a finales de 2026."
|
||||
# Only trigger this entry when the JD location is in one of these countries.
|
||||
countries: [Spain, Mexico, Argentina, Colombia, Chile]
|
||||
|
||||
# ── Contact Preferences ──────────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops contacto` (outreach CTA) and `/career-ops email` (contact
|
||||
# block) to steer drafted messages toward how you actually want to be reached.
|
||||
# Optional. Omit the whole block, or set preferred_channel to "either", to keep
|
||||
# today's behavior unchanged (no channel steering).
|
||||
#
|
||||
# contact_preferences:
|
||||
# preferred_channel: "email" # email | phone | either — default "either" if omitted
|
||||
# # Optional. Surfaced near the contact block in `/career-ops email` drafts and
|
||||
# # can inform the CTA wording in `/career-ops contacto`. Keep it one line.
|
||||
# note: "Screens unknown numbers — please email or text first to schedule a call"
|
||||
|
||||
# ── Outreach / greeting ─────────────────────────────────────────────────────
|
||||
#
|
||||
# Used by the greeting variant of `/career-ops contacto` (the short first-touch
|
||||
# message for BOSS Zhipin 打招呼, job-board chat, or a cold-email opener).
|
||||
#
|
||||
# greeting_max_chars is the hard character budget for that message. Default when
|
||||
# the key is absent: 150 (BOSS Zhipin's greeting limit). Raise or lower it to
|
||||
# match the platform you're messaging on.
|
||||
# outreach:
|
||||
# greeting_max_chars: 150
|
||||
|
||||
# ── Application Email Drafts ────────────────────────────────────────────────
|
||||
#
|
||||
# Used by `/career-ops email` when drafting formal application emails. This is
|
||||
# separate from `contacto` short outreach and `cover` full cover letters.
|
||||
# All fields are optional.
|
||||
#
|
||||
# application_email:
|
||||
# include_contact_block: true
|
||||
# include_attachment_checklist: true
|
||||
# # Use this when you want the email body to say "the email used to send this
|
||||
# # message" instead of printing a concrete email address from candidate.email.
|
||||
# # default_sender_note: "the email used to send this message"
|
||||
# # signature_name: "Романова Валерия"
|
||||
|
||||
# ── Auto-PDF threshold ──────────────────────────────────────────────────────
|
||||
#
|
||||
# Auto-PDF threshold during evaluation (used by `/career-ops pipeline` and
|
||||
# `bash batch/batch-runner.sh`).
|
||||
#
|
||||
# An offer's tailored CV PDF is auto-generated only when its score is
|
||||
# >= this threshold. Generating a PDF costs ~30-60s per offer (Playwright
|
||||
# launch + HTML render), and most offers in a scan score 2.x/3.x and never
|
||||
# become an actual application — so the gate avoids wasted renders.
|
||||
#
|
||||
# Default (key absent OR commented out): 3.0 — the original gate of
|
||||
# `/career-ops pipeline`. Both evaluation paths apply the same default, so
|
||||
# a batch run and an interactive run treat the same offer identically.
|
||||
#
|
||||
# Raise it (e.g. 4.0) to auto-generate PDFs only for stronger matches and
|
||||
# leave the rest report-only — those can still be produced on demand via
|
||||
# `/career-ops pdf {company-slug}`. Fractional thresholds work (e.g. 3.5 —
|
||||
# half-point scores like 3.5/5 occur in evaluations). Set it to 0 to
|
||||
# generate a PDF for every offer.
|
||||
# auto_pdf_score_threshold: 4.0
|
||||
|
||||
# ── Re-apply Cooldown Windows ──────────────────────────────────────────────
|
||||
#
|
||||
# Define cooldown windows for companies where you've recently applied.
|
||||
# The scanner will skip new postings at these companies during the window.
|
||||
#
|
||||
# re_apply_windows:
|
||||
# CompanyA:
|
||||
# same_role_days: 180
|
||||
# cross_role_bucket: "all_EM_roles"
|
||||
# applied_to: ["Senior Software Engineer"]
|
||||
# last_apply_date: "2026-01-01"
|
||||
Reference in new issue
Block a user