# 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 # [2026-08-11] Target shifted to Junior+/Middle- for response-volume strategy — # Junior+/middle keywords boosted; Senior/Lead kept for scoring completeness only. - "Junior+" - "Junior +" - "Джуниор+" - "Джуниор +" - "Junior" - "Джуниор" - "Middle-" - "Мидл-" - "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 разработчик" junior OR middle' enabled: true - name: hh.ru — Junior+ Frontend (Vue) query: 'site:hh.ru "Frontend-разработчик" OR "Vue.js разработчик" "junior+" OR "middle-" OR "1-3 года"' 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: Общий поиск — Junior+ Frontend Vue query: '"Frontend-разработчик" OR "Vue.js разработчик" "junior+" OR "middle-" -стажёр' enabled: true - name: Общий поиск — Flutter удалённо query: '"Flutter-разработчик" OR "Flutter разработчик" удалённо -стажёр' enabled: true # -- Зарубежные сайты — Junior remote (added 2026-08-13) -- - name: LinkedIn — Junior Frontend (Vue) Remote query: 'site:linkedin.com/jobs "Junior Frontend" OR "Junior Frontend Developer" Vue Remote' enabled: true - name: LinkedIn — Junior Flutter Remote query: 'site:linkedin.com/jobs "Junior Flutter Developer" OR "Junior Mobile Developer" Flutter Remote' enabled: true - name: Wellfound (AngelList) — Junior Frontend Remote query: 'site:wellfound.com "Frontend Developer" Junior Remote Vue' enabled: true - name: Общий поиск — Junior Frontend Developer Remote (international) query: '"Junior Frontend Developer" OR "Entry Level Frontend Developer" Vue Remote International' enabled: true - name: Общий поиск — Junior Flutter Developer Remote (international) query: '"Junior Flutter Developer" OR "Entry Level Mobile Developer" Flutter Remote International' 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, без ключа." # ── International remote-first boards (foreign sites, added 2026-08-13) ── # Zero-token, board-wide feeds. English-language, open to remote candidates # worldwide — no RU-market coverage, which is the point for this scan. # Existing title_filter (Frontend/Vue/Flutter/JS/TS/Fullstack) already applies. - name: RemoteOK provider: remoteok enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: Remotive provider: remotive enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: We Work Remotely provider: weworkremotely enabled: true notes: "Board-wide remote job aggregator, RSS feed (global, English)." - name: Himalayas provider: himalayas enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: Jobicy provider: jobicy enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: Jobspresso provider: jobspresso enabled: true notes: "Curated remote tech job board (global, English)." - name: Working Nomads provider: workingnomads enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: NoDesk provider: nodesk enabled: true notes: "Board-wide remote job aggregator (global, English)." - name: The Hub provider: thehub enabled: true notes: "Nordic/EU startup job board." - name: Landing.jobs provider: landingjobs enabled: true notes: "European tech job board (Portugal-based, EU-wide postings)." - name: Arbeitnow provider: arbeitnow enabled: true notes: "EU/DACH-heavy job board, many remote listings." - name: Get on Board provider: getonbrd enabled: false notes: "Remote/LatAm-heavy tech job board (Spanish/English mixed). Disabled 2026-08-13: first scan returned ~100 hits, ~99% Senior/Middle full-stack, dominated by one staffing agency (BC Tecnología) reposting the same roles — doesn't fit Junior target, too noisy to keep." # ── 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