Files
career-ops-vbleroy/portals.yml
T
redlineo d295c7f139
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s
init
2026-07-13 10:14:00 +03:00

843 lines
32 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Portal Scanner Configuration
# Used by /career-ops scan to discover new offers automatically.
#
# Strategy (4 levels):
# 0. Local parser → per-company `parser:` script for SSR/static career pages (zero-token)
# 1. Playwright → careers_url of each company (real-time, reliable)
# 2. HTTP JSON (WebFetch) → per-company `api:` on tracked_companies (see board_api_catalog below)
# 3. WebSearch with site: filters (broad discovery, may be stale)
#
# IMPORTANT: Each company in tracked_companies MUST have careers_url.
# Prefer the BRANDED company careers URL whenever available; use ATS-hosted URL only as fallback.
# ✅ https://careers.mastercard.com ⚠️ https://mastercard.wd1.myworkdayjobs.com (fallback only)
# ✅ https://openai.com/careers ⚠️ https://job-boards.greenhouse.io/openai (fallback only)
# Exception: ATS-hosted careers_url is acceptable when no branded careers page exists.
# Using raw ATS URLs when a branded page exists can cause false 410 errors (job ID mismatch).
#
# HOW TO CUSTOMIZE:
# 1. Copy this file to portals.yml in the project root
# 2. Edit title_filter.positive with YOUR target role keywords
# 3. Add/remove companies in tracked_companies
# 4. Adjust search_queries for your preferred job boards
# 5. Set enabled: false on companies you don't care about
# -- Scan history recheck policy (optional) --
# By default, URLs recorded in data/scan-history.tsv are deduped forever.
# Set recheck_after_days to let previously added URLs become eligible again
# after N days, useful for roles that reopen or are republished at the same URL.
# Permanent invalid statuses such as blocked host or malformed URL still remain
# deduped forever.
#
# scan_history:
# recheck_after_days: 30
# -- Location filter (optional) --
# Filter scanned jobs by location. Applied AFTER title filter, BEFORE dedup.
# If this entire block is absent, all locations pass (current default behavior).
#
# Semantics (case-insensitive substring, in this order):
# - Empty location string on a job → pass (don't penalize missing data)
# - Any `always_allow` keyword present → pass (takes precedence over `block`)
# - Any `block` keyword present → reject
# - `allow` empty → pass (already cleared block)
# - `allow` non-empty → must match at least one keyword
#
# `always_allow` is optional. It rescues multi-location postings that name your
# home region: with always_allow ["New York"] and block ["India"], a job listed
# "Remote, New York or India" passes (New York wins), while "Remote, India" is
# still rejected. Omit always_allow entirely and the filter behaves as before.
#
# Example below targets US-based remote + a couple of US metros, blocking
# common foreign hubs. Customize to your geography.
# location_filter:
# # always_allow is checked BEFORE block — keep this list to your home region only
# always_allow:
# - "United States" # (replace with your home region)
# - "New York"
# allow:
# - "Remote"
# - "United States"
# - "USA"
# - "Atlanta"
# - "New York"
# block:
# - "India"
# - "Bengaluru"
# - "United Kingdom"
# - "London"
# - "Germany"
# - "France"
# - "Singapore"
# - "Japan"
# - "Brazil"
# - "Australia"
# -- Salary filter (optional) --
# Filter scanned jobs by annual compensation range. Applied AFTER location
# filter, BEFORE dedup. Only applies when structured salary data exists.
#
# Semantics:
# - min/max are annual compensation filters (use annualized values)
# - max: 0 means "no upper limit"
# - If no salary data exists on a job, it passes (conservative behavior)
# - If both currencies are known and differ, the job is rejected by the salary filter
# - Partial ranges (min only or max only) work correctly
# - If this entire block is absent, salary is not filtered (default behavior)
#
# Example: target roles paying at least $100k, no upper limit
# salary_filter:
# min: 100000
# max: 0
# currency: "USD"
# Active: 100,000 ₽/month net minimum (see config/profile.yml) → annualized
salary_filter:
min: 1200000
max: 0
currency: "RUB"
# -- Trust filter (optional) --
# Enriches each scanned job with a trust score (0-100) and flags.
# Jobs are NEVER dropped — only annotated. The trust score helps you
# prioritize which postings to evaluate first.
#
# Heuristics (V1):
# 1. URL structure validation (malformed or non-http URLs)
# 2. Missing application URL
# 3. Suspicious domain detection (link shorteners, form builders)
# 4. Company ↔ domain mismatch (with ATS allowlist)
#
# If this block is absent or enabled: false, all jobs get score 100.
#
# trust_filter:
# enabled: true
# suspicious_domains:
# - "bit.ly"
# - "tinyurl.com"
# - "t.co"
# - "forms.gle"
# - "goo.gl"
# - "shorturl.at"
# # Override the built-in ATS allowlist (greenhouse, lever, workday, etc.).
# # URLs hosted on these domains skip the company↔domain mismatch check.
# # ats_allowlist:
# # - "greenhouse.io"
# # - "ashbyhq.com"
# # - "lever.co"
# # - "custom-ats.example.com"
# -- Content filter (optional) --
# Filters on the job DESCRIPTION text, not just the title — useful when
# companies post generic titles ("Software Engineer") with very different
# stacks. Case-insensitive substring match.
# Semantics:
# - A job with no description always passes (see provider support below)
# - Any `negative` keyword present → reject
# - `positive` empty → pass (after clearing negatives)
# - `positive` non-empty → at least one keyword must be present
# - If this entire block is absent, descriptions are not filtered (default)
#
# Provider support: the scanner is zero-token and only reads descriptions that
# a provider already returns in its list payload — it never fetches each job
# page. Currently Lever (`descriptionPlain`) supplies descriptions; jobs from
# providers that don't always pass this filter (they're never silently dropped).
#
# Example: keep roles that mention Rust/Go, drop legacy PHP/WordPress shops
# content_filter:
# positive:
# - "rust"
# - "golang"
# negative:
# - "php"
# - "wordpress"
# -- Title filter --
# The scanner uses these keywords to decide if a title is relevant.
# At least 1 positive must match AND 0 negatives must match (case-insensitive).
#
# skip_tiers: [intern, entry] # optional: skip listings by seniority tier (note: unrecognized/plain titles fall back to 'mid')
title_filter:
positive:
# [CUSTOMIZE] Add keywords matching YOUR target roles
# -- Frontend (Vue.js) --
- "Frontend"
- "Front-end"
- "Фронтенд"
- "Фронтенд-разработчик"
- "Vue"
- "Vue.js"
- "Nuxt"
- "Frontend-разработчик"
- "Web-разработчик"
- "Веб-разработчик"
# -- Mobile (Flutter) --
- "Flutter"
- "Dart"
- "Mobile Developer"
- "Мобильный разработчик"
# -- Adjacent (fullstack, JS/TS generalist) --
- "JavaScript"
- "TypeScript"
- "Fullstack"
- "Full-stack"
- "Full stack"
negative:
# [CUSTOMIZE] Add keywords for roles you want to exclude
- "iOS-разработчик"
- "Android-разработчик"
- "Swift"
- "Kotlin"
- "Java "
- ".NET"
- "PHP"
- "Ruby"
- "C++"
- "1С"
- "1C"
- "SAP "
- "Data Scientist"
- "DevOps"
- "QA-инженер"
- "Тестировщик"
- "Manual QA"
- "Sysadmin"
- "Системный администратор"
- "SMM"
- "Дизайнер"
- "Designer"
- "Продажи"
- "Sales Manager"
- "Embedded"
- "Firmware"
- "Blockchain"
- "Web3"
- "Crypto"
seniority_boost:
# These prefixes add relevance but are not required
- "Middle"
- "Мидл"
- "Senior"
- "Старший"
- "Ведущий"
- "Lead"
# -- Search queries --
# Each query triggers a WebSearch. Use site: to filter by portal.
# The scanner extracts title, URL, and company from results.
search_queries:
# -- hh.ru --
- name: hh.ru — Frontend (Vue)
query: 'site:hh.ru "Frontend-разработчик" OR "Frontend разработчик" Vue удалённо'
enabled: true
- name: hh.ru — Vue.js Developer
query: 'site:hh.ru "Vue.js разработчик" OR "Vue разработчик" middle OR senior'
enabled: true
- name: hh.ru — Flutter Developer
query: 'site:hh.ru "Flutter-разработчик" OR "Flutter разработчик" удалённо'
enabled: true
- name: hh.ru — Mobile Developer
query: 'site:hh.ru "Мобильный разработчик" Flutter удалённо'
enabled: true
# -- Хабр Карьера --
- name: Хабр Карьера — Frontend (Vue)
query: 'site:career.habr.com "Frontend" Vue удалённо'
enabled: true
- name: Хабр Карьера — Flutter
query: 'site:career.habr.com "Flutter" разработчик удалённо'
enabled: true
# -- Хабр Карьера / Хабр Вакансии (общий) --
- name: Хабр — Frontend вакансии
query: 'site:habr.com/ru/vacancies "Frontend-разработчик" Vue'
enabled: true
# -- Superjob --
- name: Superjob — Frontend (Vue)
query: 'site:superjob.ru "Frontend-разработчик" Vue удалённо'
enabled: true
- name: Superjob — Flutter
query: 'site:superjob.ru "Flutter-разработчик" удалённо'
enabled: true
# -- Rabota.ru --
- name: Rabota.ru — Frontend (Vue)
query: 'site:rabota.ru "Frontend-разработчик" Vue удалённо'
enabled: true
# -- Geekjob --
- name: Geekjob — Frontend (Vue)
query: 'site:geekjob.ru "Frontend" Vue удалённо'
enabled: true
- name: Geekjob — Flutter
query: 'site:geekjob.ru "Flutter" удалённо'
enabled: true
# -- Общий поиск: удалённые Frontend/Flutter вакансии --
- name: Общий поиск — Frontend Vue удалённо
query: '"Frontend-разработчик" OR "Frontend разработчик" Vue OR "Vue.js" удалённо -стажёр'
enabled: true
- name: Общий поиск — Flutter удалённо
query: '"Flutter-разработчик" OR "Flutter разработчик" удалённо -стажёр'
enabled: true
# -- Hirify.me — AI meta-aggregator (960+ Telegram channels + career sites) --
# No public API; SSR category pages are crawlable. Covers both Russia-market
# and global/remote roles open to Russian candidates.
- name: Hirify.me — Frontend (Vue)
query: 'site:hirify.me/frontend-dev-jobs Vue OR "Vue.js"'
enabled: true
- name: Hirify.me — Mobile (Flutter)
query: 'site:hirify.me/mobile-development-jobs Flutter'
enabled: true
- name: Hirify.me — Russia / Remote
query: 'site:hirify.me/jobs-in-russia "Frontend" OR "Vue" OR "Flutter"'
enabled: true
- name: Hirify.me — Remote (global, RU-friendly)
query: 'site:hirify.me/remote-jobs "Frontend" OR "Vue" OR "Flutter"'
enabled: true
# -- ГородРабот.ру (aggregates hh.ru/superjob/rabota.ru/zarplata.ru + 330 sources, no public API) --
- name: ГородРабот.ру — Frontend (Vue)
query: 'site:gorodrabot.ru "Frontend" Vue удалённо'
enabled: true
- name: ГородРабот.ру — Flutter
query: 'site:gorodrabot.ru "Flutter" удалённо'
enabled: true
# -- Zarplata.ru (HeadHunter group sister site, no public API) --
- name: Zarplata.ru — Frontend (Vue)
query: 'site:zarplata.ru "Frontend-разработчик" OR "Frontend разработчик" Vue'
enabled: true
- name: Zarplata.ru — Flutter
query: 'site:zarplata.ru "Flutter-разработчик" OR "Flutter разработчик"'
enabled: true
# -- jsJob.ru (JS/frontend-only niche board, no public API) --
- name: jsJob.ru — Frontend/JS
query: 'site:jsjob.ru Vue OR "Vue.js" OR TypeScript'
enabled: true
# -- Remote-job.ru (RU-focused remote-work board, no public API; XML feed exists but undocumented) --
- name: Remote-job.ru — Frontend/Mobile
query: 'site:remote-job.ru "Frontend" OR Vue OR Flutter'
enabled: true
tracked_companies:
# -- Крупные российские tech-компании (own careers pages, websearch discovery) --
- name: Яндекс
careers_url: https://yandex.ru/jobs
scan_method: websearch
scan_query: 'site:yandex.ru/jobs "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Крупнейший российский IT-холдинг."
enabled: true
- name: VK (ВКонтакте)
careers_url: https://team.vk.company/vacancy/
scan_method: websearch
scan_query: 'site:team.vk.company/vacancy "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Соцсети, VK Mini Apps, мобильные продукты."
enabled: true
- name: Ozon
careers_url: https://ozon.tech/vacancies
scan_method: websearch
scan_query: 'site:ozon.tech/vacancies "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. E-commerce, крупная frontend-платформа."
enabled: true
- name: Wildberries
careers_url: https://career.rwb.ru/vacancies
scan_method: websearch
scan_query: '"Wildberries" careers "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. E-commerce маркетплейс."
enabled: true
- name: Avito
careers_url: https://career.avito.com/vacancies/
scan_method: websearch
scan_query: 'site:career.avito.com/vacancies "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Классифайд-платформа, сильная инженерная культура."
enabled: true
- name: Т-Банк (Тинькофф)
careers_url: https://www.tbank.ru/career
scan_method: websearch
scan_query: 'site:tbank.ru/career "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Финтех, много mobile/frontend вакансий."
enabled: true
- name: СберТех / Сбер
careers_url: https://developers.sber.ru/kak-v-sbere/vacancies
scan_method: websearch
scan_query: 'site:developers.sber.ru/kak-v-sbere/vacancies "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Крупнейший банк, большой tech-департамент."
enabled: true
- name: МТС
careers_url: https://job.mts.ru/vacancies
scan_method: websearch
scan_query: 'site:job.mts.ru/vacancy "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Телеком + цифровые сервисы (МТС Digital)."
enabled: true
- name: Kaspersky
careers_url: https://careers.kaspersky.ru/vacancies
scan_method: websearch
scan_query: 'site:careers.kaspersky.ru "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Кибербезопасность — совпадает с профильным ИБ-образованием."
enabled: true
- name: 2ГИС
careers_url: https://job.2gis.ru/
scan_method: websearch
scan_query: 'site:job.2gis.ru "Frontend" OR "Vue" OR "Flutter"'
notes: "Новосибирск + удалённо. Картографический сервис, мобильные и веб-продукты."
enabled: true
- name: Skyeng
careers_url: https://vacancies.skyeng.ru/
scan_method: websearch
scan_query: 'site:vacancies.skyeng.ru "Frontend" OR "Vue" OR "Flutter"'
notes: "Удалённо-first. EdTech, известны Vue/Flutter вакансиями. (careers_url corrected 2026-07-07: old skyeng.ru/vacancies 404s; real board is vacancies.skyeng.ru)"
enabled: true
- name: Купер (СберМаркет)
careers_url: https://team.kuper.ru/catalog-vacancies
scan_method: websearch
scan_query: 'site:team.kuper.ru "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. E-grocery, экс-СберМаркет."
enabled: true
- name: Lamoda
careers_url: https://job.lamoda.ru/vacancies?city=none
scan_method: websearch
scan_query: 'site:career.habr.com/companies/lamodatech "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Fashion e-commerce, отдельный tech-бренд Lamoda Tech (сайт tech.lamoda.ru редиректит на latech.ru; реальные вакансии живут на job.lamoda.ru — careers_url обновлён 2026-07-07)."
enabled: true
- name: Aviasales
careers_url: https://www.aviasales.ru/about/vacancies
scan_method: websearch
scan_query: '"Aviasales" careers "Frontend" OR "Vue" OR "Flutter"'
notes: "Удалённо-first (Кипр/Россия распределённо). Travel-поиск, mobile-friendly культура."
enabled: true
- name: DomClick
careers_url: https://career.domclick.ru/
scan_method: websearch
scan_query: 'site:career.domclick.ru "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Недвижимость, экосистема Сбера."
enabled: true
- name: ivi
careers_url: https://career.habr.com/companies/ivi/vacancies
scan_method: websearch
scan_query: 'site:career.habr.com/companies/ivi "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Видеостриминг, сильная мобильная разработка. (careers_url corrected 2026-07-09: old www.ivi.ru/info/vacancy 404s; no standalone corporate careers page found, using Хабр Карьера company page as fallback per scan.md 'Managing careers_url' rule)"
enabled: true
- name: Ситимобил / Городские сервисы
careers_url: https://city-mobil.ru/career
scan_method: websearch
scan_query: '"Ситимобил" careers "Frontend" OR "Vue" OR "Flutter"'
notes: "Москва + удалённо. Райдхейлинг, мобильные приложения."
enabled: true
- name: HeadHunter (hh.ru как работодатель)
careers_url: https://hh.ru/employer/1455
scan_method: websearch
scan_query: 'site:hh.ru/vacancy employer_id=1455 "Frontend" OR "Vue"'
notes: "Москва + удалённо. Сам hh.ru как работодатель, публичный tech-блог/вакансии."
enabled: true
- name: Positive Technologies
careers_url: https://ptsecurity.com/about/vacancy/
scan_method: websearch
scan_query: 'site:ptsecurity.com/about/vacancy "Frontend" OR "Vue"'
notes: "Москва + удалённо. Кибербезопасность — совпадает с профильным ИБ-образованием."
enabled: true
- name: Ecwid (Lightspeed)
careers_url: https://github.com/Ecwid/new-job
scan_method: websearch
scan_query: '"Ecwid" careers "Frontend" OR "Vue"'
notes: "Удалённо-first, российские корни. E-commerce SaaS. (careers_url corrected 2026-07-07: www.ecwid.com/careers 404s; Ecwid hires via a GitHub 'send us a completed test task' funnel with no discrete per-role listings — TypeScript.md test task exists, no Vue/Flutter-specific one)."
enabled: true
- name: JetBrains
careers_url: https://www.jetbrains.com/careers
scan_method: websearch
scan_query: 'site:jetbrains.com/careers "Frontend" OR "Vue"'
notes: "Санкт-Петербург + удалённо (международная структура). Инструменты для разработчиков."
enabled: true
# ── Job Boards ────────────────────────────────────────────────────────
# Multi-employer aggregators. Unlike tracked_companies (one entry = one employer),
# job boards return offers from many companies in a single API call.
# Same title/location filtering and dedup apply.
job_boards:
# ── SolidJobs (Polish market) ──────────────────────────────────────
# Public API — no auth needed. Division in URL path, campaign=career-ops for tracking.
# Available divisions: it, engineering, marketing, sales, hr, logistics, finances, other
- name: SolidJobs IT
careers_url: https://solid.jobs/public-api/offers/it?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish IT job board — IT division (not RU market, disabled)"
- name: SolidJobs Engineering
careers_url: https://solid.jobs/public-api/offers/engineering?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Engineering & Production division"
- name: SolidJobs Marketing
careers_url: https://solid.jobs/public-api/offers/marketing?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Marketing division"
- name: SolidJobs Sales
careers_url: https://solid.jobs/public-api/offers/sales?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Sales division"
- name: SolidJobs HR
careers_url: https://solid.jobs/public-api/offers/hr?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — HR division"
- name: SolidJobs Logistics
careers_url: https://solid.jobs/public-api/offers/logistics?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Logistics division"
- name: SolidJobs Finances
careers_url: https://solid.jobs/public-api/offers/finances?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Finances division"
- name: SolidJobs Other
careers_url: https://solid.jobs/public-api/offers/other?campaign=career-ops
provider: solidjobs
enabled: false
notes: "Polish job board — Other specialists division"
# ── JustJoin.it / NoFluffJobs (Polish tech market) ────────────────────────
# Public job-board APIs. Disabled by default; enable and rely on the global
# title_filter/location_filter/salary_filter above for your target profile.
- name: JustJoin.it
careers_url: https://justjoin.it/job-offers/all-locations
provider: justjoin
enabled: false
notes: "Polish tech job board — newest public offers"
- name: NoFluffJobs
careers_url: https://nofluffjobs.com/pl
provider: nofluffjobs
enabled: false
notes: "Polish tech job board — newest public postings"
# -- Indonesia job boards (provider: jobstreet / glints) --
- name: Jobstreet Indonesia
provider: jobstreet
api: https://id.jobstreet.com/api/jobsearch/v5/search
siteKey: ID-Main
searchKeywords: "data scientist"
searchLocation: "Jakarta"
pageSize: 30
maxPages: 3
enabled: false
notes: "Indonesia's largest job board (SEEK group). Uses SEEK v5 JobSearch API — zero tokens."
- name: Glints Indonesia
provider: glints
api: https://glints.com/api/v2-alc/graphql # searchJobsV3 endpoint
searchKeywords: "data scientist"
countryCode: ID
pageSize: 30
maxPages: 3
enabled: false
notes: "SEA job platform covering ID/SG/MY/VN. Uses searchJobsV3 GraphQL endpoint (v2-alc). WAF blocks non-browser requests — works best from Playwright context."
# ── Telegram channels (public preview page, no API key/login) ──────
# Reads https://t.me/s/{channel} — zero-token, but title/company/location
# are heuristically parsed from free-form post text, and only the ~20 most
# recent posts are seen per scan. Tune title_filter/content_filter per channel.
#
# jsJob.ru (@jsjobru) intentionally excluded: its posts carry the real
# apply link behind an inline button that only renders in the Telegram
# client, invisible on the public /s/ web preview — so the scanned "JD"
# never has an actual application URL. Not worth parsing.
- name: Javascript jobs (Vue/React/Angular) — Telegram
provider: telegram
channel: jsdevjob
enabled: true
notes: "https://t.me/jsdevjob — вакансии по фронтенду/JS, явно упоминает Vue"
- name: Job for Frontend (JS+Node) — Telegram
provider: telegram
channel: forfrontend
enabled: true
notes: "https://t.me/forfrontend — JS/Node.js frontend вакансии"
- name: Front-end Job Offers — Telegram
provider: telegram
channel: runello_rus_frontend
enabled: true
notes: "https://t.me/runello_rus_frontend"
- name: Frontend — вакансии и стажировки — Telegram
provider: telegram
channel: senior_frontender
enabled: true
notes: "https://t.me/senior_frontender"
- name: JavaScript Job Offers — Telegram
provider: telegram
channel: runello_rus_javascript
enabled: true
notes: "https://t.me/runello_rus_javascript"
- name: TypeScript Job Offers — Telegram
provider: telegram
channel: runello_rus_typescript
enabled: true
notes: "https://t.me/runello_rus_typescript"
- name: React Job — Telegram
provider: telegram
channel: job_react
enabled: true
notes: "https://t.me/job_react — JS/React, adjacent stack to Vue"
- name: Dart Jobs — Telegram
provider: telegram
channel: dartlang_jobs
enabled: true
notes: "https://t.me/dartlang_jobs — Dart = Flutter's language, Mobile (Flutter) archetype"
- name: Mobile App Development Job Offers — Telegram
provider: telegram
channel: runello_rus_mobileappdevelopment
enabled: true
notes: "https://t.me/runello_rus_mobileappdevelopment — mobile dev (Flutter/native mixed)"
- name: Вакансии для разработчиков — Telegram
provider: telegram
channel: backend_frontend_jobs
enabled: true
notes: "https://t.me/backend_frontend_jobs — general dev board, frontend+backend mixed"
# ── Additional Telegram channels found via tgstat.ru tag pages ────────
# (geekjob/it-vacancies/headhunter/vacancies-abroad/vacancies) — curated
# for Frontend (Vue.js) / Mobile (Flutter) / Fullstack (Vue+Node) fit.
- name: Job for Mobile (iOS/Android/React Native) — Telegram
provider: telegram
channel: forallmobile
enabled: true
notes: "https://t.me/forallmobile"
- name: Fullstack / Web Development Job Offers — Telegram
provider: telegram
channel: runello_rus_webdevelopment
enabled: true
notes: "https://t.me/runello_rus_webdevelopment"
- name: Backend / Server-side Job Offers — Telegram
provider: telegram
channel: runello_rus_backend
enabled: true
notes: "https://t.me/runello_rus_backend — Node.js-adjacent, fits Fullstack (Vue+Node)"
- name: JavaScript Job | Вакансии | Стажировки — Telegram
provider: telegram
channel: JScript_jobs
enabled: true
notes: "https://t.me/JScript_jobs"
- name: Mobile jobs — Telegram
provider: telegram
channel: mobiledevjob
enabled: true
notes: "https://t.me/mobiledevjob"
- name: hh.ru official — Telegram
provider: telegram
channel: hh_ru_official
enabled: true
notes: "https://t.me/hh_ru_official — official hh.ru channel"
- name: Хабр Карьера — Telegram
provider: telegram
channel: habr_career
enabled: true
notes: "https://t.me/habr_career"
- name: Яндекс нанимает — Telegram
provider: telegram
channel: ya_jobs
enabled: true
notes: "https://t.me/ya_jobs"
- name: Remote IT (Inflow) — Telegram
provider: telegram
channel: Remoteit
enabled: true
notes: "https://t.me/Remoteit — remote-only, fits location policy"
- name: RemoteGeekjob — Telegram
provider: telegram
channel: remotegeekjob
enabled: true
notes: "https://t.me/remotegeekjob"
- name: Job in IT&Digital — Telegram
provider: telegram
channel: geekjobs
enabled: true
notes: "https://t.me/geekjobs"
- name: Hidden Gurus - Remote IT — Telegram
provider: telegram
channel: hiddengurus
enabled: true
notes: "https://t.me/hiddengurus"
- name: Удаленка — IT и Digital — Telegram
provider: telegram
channel: theyseeku_it
enabled: true
notes: "https://t.me/theyseeku_it"
- name: Job in IT Remote — Telegram
provider: telegram
channel: jobs_in_it_remoute
enabled: true
notes: "https://t.me/jobs_in_it_remoute"
- name: СЕТИ — IT & Digital вакансии — Telegram
provider: telegram
channel: it_vakansii_jobs
enabled: true
notes: "https://t.me/it_vakansii_jobs"
- name: БИГТЕХ - вакансии и стажировки — Telegram
provider: telegram
channel: bigtechjobs
enabled: true
notes: "https://t.me/bigtechjobs — Avito/Yandex/Apple/Google etc."
- name: Connectable Jobs — Telegram
provider: telegram
channel: zarubezhom_jobs
enabled: true
notes: "https://t.me/zarubezhom_jobs — foreign companies w/ RU-speaking founders/teams, remote not relocation-forced"
- name: Dev & ML Connectable Jobs — Telegram
provider: telegram
channel: dev_connectablejobs
enabled: true
notes: "https://t.me/dev_connectablejobs"
- name: CHOICY.WORK Global — Telegram
provider: telegram
channel: choicy_work
enabled: true
notes: "https://t.me/choicy_work"
- name: Selectel [команда] — Telegram
provider: telegram
channel: selectelcareers
enabled: true
notes: "https://t.me/selectelcareers — cloud/hosting company engineering team"
- name: T-Crew (Т-Банк IT) — Telegram
provider: telegram
channel: t_crew
enabled: true
notes: "https://t.me/t_crew"
- name: Alfa Digital — Telegram
provider: telegram
channel: alfadigital_jobs
enabled: true
notes: "https://t.me/alfadigital_jobs — Альфа-Банк IT/Digital"
- name: ЛАНИТ ищет — Telegram
provider: telegram
channel: lanit_in_search
enabled: true
notes: "https://t.me/lanit_in_search — major RU systems integrator"
# ── Trudvsem.ru / "Работа России" (Russian government open-data API) ───
# Public, no-auth JSON API — https://trudvsem.ru/opendata/api. Zero tokens.
# region is optional (omit for all-Russia); see API docs for region codes.
- name: Trudvsem — Frontend (Vue)
provider: trudvsem
searchKeywords: "Frontend Vue"
pageSize: 100
maxPages: 3
enabled: true
notes: "Государственный портал вакансий (Роструд). Официальный open-data API, без ключа."
- name: Trudvsem — Flutter
provider: trudvsem
searchKeywords: "Flutter"
pageSize: 100
maxPages: 2
enabled: true
notes: "Государственный портал вакансий (Роструд). Официальный open-data API, без ключа."
# ── Adzuna (global aggregator, requires free app_id/app_key registration) ──
# https://developer.adzuna.com — does NOT cover Russia (no "ru" country code;
# Western/English-speaking markets + a handful of others). Disabled by
# default for this RU-focused config; no scan.mjs provider exists yet either
# (would need a new providers/adzuna.mjs wired to your app_id/app_key).
- name: Adzuna
careers_url: https://www.adzuna.com/
enabled: false
notes: "Global job aggregator, no Russia coverage. Needs free app_id/app_key + a new provider — disabled until both exist."
# ── HigherEdJobs (university / higher-ed RSS) ────────────────────────
# Public no-auth RSS category feed. cat_id selects the HigherEdJobs
# category. Common ones:
# 68 = Higher Education, 64 = Educational Administration, 22 = Career Development
# Full list: https://www.higheredjobs.com/rss/
# - name: HigherEdJobs — Higher Education
# provider: higheredjobs
# cat_id: 68
# enabled: true