el.offsetParent !== null);
if (search) {
e.preventDefault();
search.focus();
}
return;
}
const cards = Array.from(this.$root.querySelectorAll('.job-card'));
if (cards.length === 0) {
this.resetKeyboardNavigation();
return;
}
// Livewire can remove cards after a filter, refresh or quick
// application. Clamp a remembered index before it is used.
this.focusedIndex = Math.max(-1, Math.min(this.focusedIndex, cards.length - 1));
let handled = true;
if (e.key === 'j' || e.key === 'ArrowDown') {
this.focusedIndex = Math.min(this.focusedIndex + 1, cards.length - 1);
} else if (e.key === 'k' || e.key === 'ArrowUp') {
this.focusedIndex = Math.max(this.focusedIndex - 1, 0);
} else if (e.key === 'Enter' && this.focusedIndex >= 0) {
const focusedCard = cards[this.focusedIndex];
const link = focusedCard?.querySelector('a[href*=\'/jobs/\']');
if (link) link.click();
} else {
handled = false;
}
if (handled) {
e.preventDefault();
cards.forEach((c, i) => c.classList.toggle('keyboard-focused', i === this.focusedIndex));
const focusedCard = cards[this.focusedIndex];
if (focusedCard) {
focusedCard.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
}
};
window.addEventListener('keydown', this.keyHandler);
},
destroy() {
if (this.scrollHandler) window.removeEventListener('scroll', this.scrollHandler);
if (this.keyHandler) window.removeEventListener('keydown', this.keyHandler);
if (this.ptrStart) window.removeEventListener('touchstart', this.ptrStart);
if (this.ptrMove) window.removeEventListener('touchmove', this.ptrMove);
if (this.ptrEnd) window.removeEventListener('touchend', this.ptrEnd);
},
loadMore() {
if (this.isLoading) return;
if (Date.now() < this.cooldownUntil) return;
this.isLoading = true;
$wire.loadMore()
.catch(() => {
this.cooldownUntil = Date.now() + 3000;
window.dispatchEvent(new CustomEvent('notify', {
detail: { message: 'Не удалось загрузить вакансии. Проверьте соединение.', type: 'error' }
}));
})
.finally(() => {
this.isLoading = false;
});
},
scrollToTop() {
window.scrollTo({ top: 0, behavior: 'smooth' });
},
resetKeyboardNavigation() {
this.focusedIndex = -1;
this.$root.querySelectorAll('.job-card.keyboard-focused')
.forEach((card) => card.classList.remove('keyboard-focused'));
}
}"
@jobs-reset.window="resetKeyboardNavigation(); if (!$wire.showMobileFilters) window.scrollTo({ top: 0, behavior: 'smooth' })"
wire:loading.class="opacity-60 pointer-events-none"
wire:target="search, setStack, setStackFromDropdown, setCity, setWorkFormat, setSeniority, setSalaryRange, hasDirectContact, withSalary, hideApplied, hideViewed, recent, sortBy, region, sourceType, resetFilters, applyPreset, applySourceFilter"
>
обновлено сегодня · 3 вакансии за сутки
Все IT-вакансии и зарплаты рынка.
Один поиск вместо семи сайтов: hh.kz, Djinni, Habr, RemoteOK и ещё три. Видно зарплату и сравнение с медианой по рынку для вашего стека. Загрузите резюме, если хочется ещё и Match Score под каждую вакансию.
Всё, что нужно для поиска работы. И пара вещей сверху.
Зарплатный калькулятор
P25, медиана и P75 по стеку, грейду и городу. Считаем по реальным вакансиям за последние 90 дней. Сразу видно, где платят выше рынка, а где откровенно мало.
Загружаете PDF, получаете оценку по 100-балльной шкале, разбор по 7 секциям и конкретные правки по формулировкам. На выходе публичная ссылка taylor.kz/r/…, которую можно отправить рекрутеру.
3 шаблонаdefault · minimal · compact
Match Score под каждую вакансию
Алгоритм считает от 0 до 100% по совпадению технологий, грейда, локации и зарплаты. Видны и сильные стороны, и пробелы. Если score меньше 40, AI отдельно объяснит, чего вашему резюме не хватает под эту вакансию.
70+40–69сортировка по релевантности
Cover letter за минуту
Выбираете вакансию, AI пишет персональное сопроводительное по вашему резюме. Тон и язык настраиваются. Готовые шаблоны можно сохранять и переиспользовать.
в среднем:~40 секунд на письмо
Трекер откликов
Отклик в один клик. Taylor запоминает дату и через неделю напомнит написать follow-up. Статусы applied, interview, offer и rejected, чтобы сразу видеть, как идёт ваша воронка.
appliedinterviewoffer
Уведомления только по делу
Email или Telegram. Шлём только высокий Match Score, ваш стек и ваш город. Никакого «вам может быть интересно». Частоту дайджеста выбираете сами.
email
Telegram
зарплаты · данные за 90 дней
Знаете, сколько вы реально стоите?
Медианы по технологиям и грейдам. Считаются из актуальных вакансий, не из опросов трёхлетней давности.
Вакансии с hh мы собираем тоже, и пользоваться им параллельно никто не мешает. К ним подмешиваются ещё 10 источников (Djinni, Habr Career, Careered, RemoteOK), плюс мы считаем Match Score по вашему резюме. В итоге в одной ленте видно сразу все варианты, которые вам реально подходят.
Это правда бесплатно?
Для соискателей всё бесплатно: резюме, Match Score, отклики, cover letter, уведомления. Регистрация без карты, без подписки, без шантажа лимитами.
Откуда данные по зарплатам?
Парсим зарплатные вилки из вакансий за последние 90 дней. Считаем P25 / медиану / P75 по срезу «стек × грейд × город». Не-KZT суммы пересчитываются в тенге. Кеш обновляется раз в час. Смотрите подробнее в разделе зарплат или в аналитике рынка.
Видно ли моё резюме другим?
По умолчанию резюме доступно по ссылке taylor.kz/r/…, чтобы её можно было удобно отправить рекрутеру. Видимость можно отключить в настройках, тогда страница станет приватной.
Можно искать удалёнку из-за рубежа?
Да. В фильтре регионов выберите International — или смотрите вакансии International. Тогда подмешаются Djinni, RemoteOK, Arbeitnow и We Work Remotely. Там в основном долларовые офферы и удалёнка по всему миру.
Найдите работу, которая вам реально подходит.
Все IT-вакансии и зарплаты Казахстана. Резюме сделает выдачу точнее.