init
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

This commit is contained in:
redlineo committed 2026-07-13 10:14:00 +03:00
commit d295c7f139
1527 files changed
+270726

No files matched your search

+842
View File
@@ -0,0 +1,842 @@
# 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