Как создать Job Board: портал вакансий и рекрутинга
Клиент приходит с жалобой: «Ежемесячно мы тратим значительные средства на hh.ru, а кандидаты всё равно не те». И это не про иррациональность — это про отсутствие нишевого инструмента. Вертикальные Job Board решают проблему точечно: для IT-контракторов, медицинских работников, строителей или региональных рынков. Наша технология позволяет запустить MVP за 2–3 месяца, а не за год, как у конкурентов. При этом с первых дней вы получаете поиск на Elasticsearch, адаптивную вёрстку и готовую монетизацию. Переход на собственный Job Board может сэкономить значительную часть бюджета на комиссиях рекрутинговых платформ. Свяжитесь с нами, чтобы обсудить проект и получить предварительную оценку. Закажите разработку нишевого портала под ваш рынок уже сегодня.
Основные сущности системы
Вакансия: должность, описание, требования, зарплатная вилка (с/без), локация + remote-опция, тип занятости, компания, теги/навыки, статус (active/expired/draft).
Резюме: ФИО (или псевдоним), желаемая должность, опыт (список позиций с датами), образование, навыки, зарплатные ожидания, локация, готовность к переезду/remote.
Отклик (application): связь кандидат ↔ вакансия. Статус, сопроводительное письмо, дата.
Организация поиска: Elasticsearch vs PostgreSQL
Поиск — ключевая функция. Для небольших объёмов (до 100К вакансий) используем PostgreSQL Full-Text Search:
SELECT * FROM vacancies
WHERE to_tsvector('russian', title || ' ' || description)
@@ plainto_tsquery('russian', 'разработчик python')
AND salary_from <= 250000
AND location @> '{"city": "Москва"}'::jsonb
ORDER BY ts_rank(...) DESC;
Для крупных платформ с фасетной фильтрацией, typo-tolerance и релевантным ранжированием выбираем Elasticsearch или Typesense. Elasticsearch быстрее PostgreSQL в 10 раз при объёме 1 млн записей, что критично для пользовательского опыта.
По данным Elasticsearch: The Definitive Guide, при объёме 1 млн записей скорость поиска на Elasticsearch на порядок выше.
Настройка анализатора для русского языка в Elasticsearch
Для корректной морфологии используем анализатор `elasticsearch-analysis-morfologik` или `elasticsearch-analysis-icu` с конфигурацией синонимов и стоп-слов.
Фильтры: зарплата, опыт (нет опыта / 1–3 года / 3–6 лет / 6+ лет), локация, тип занятости, remote/office/hybrid, компания, дата публикации.
| Критерий |
PostgreSQL FTS |
Elasticsearch |
Typesense |
| Скорость |
до 500 мс при 100К |
до 50 мс при 1M |
до 30 мс при 1M |
| Typo-tolerance |
Нет |
Да |
Да |
| Фасетная фильтрация |
Сложно |
Из коробки |
Из коробки |
| Стоимость |
Бесплатно |
Бесплатно / платный кластер |
Платный облачный сервис |
Для индекса вакансий на Elasticsearch мы определяем маппинг с мультифилдами (русский/английский), настраиваем анализатор с морфологией и синонимами. Фасетная фильтрация реализуется через aggregations. Это обеспечивает typo-tolerance и релевантное ранжирование.
Почему быстрый поиск критичен для конверсии?
Time-to-hire напрямую влияет на бизнес. Если поиск тормозит, рекрутеры уходят к конкурентам. Наш стек (Laravel 11 + Vue 3 + Elasticsearch) обеспечивает INP < 200 мс даже на слабых устройствах. Для сравнения: на шаред-хостинге с MySQL поиск занимает 3–5 секунд — это провал Core Web Vitals.
Личные кабинеты: функционал для кандидата и работодателя
Кандидат:
- Создание/редактирование резюме (User Profile система)
- Отклики и их статусы (система откликов)
- Сохранённые вакансии
- Алерты по поиску (email при новых вакансиях по фильтрам)
- Настройки видимости резюме
Работодатель:
- Профиль компании (страница работодателя)
- Управление вакансиями
- Отклики с воронкой (inbox → screening → interview → offer)
- Поиск по базе резюме (при подписке)
- Статистика вакансий (просмотры, отклики)
Email-алерты: кандидат настраивает поисковый алерт «присылай новые вакансии Python разработчик в Москве от 150K». Cron-задача раз в день запускает сохранённые поиски и отправляет дайджест.
Способы монетизации портала
- Pay-per-post: работодатель платит за размещение одной вакансии (30 дней)
- Пакеты: 5/10/20 вакансий по сниженной цене
- Подписка для работодателей: неограниченные вакансии + доступ к базе резюме
- Highlighted/featured вакансии: оплаченное продвижение в топ выдачи
- Branded employer page: расширенная страница компании
| Функция |
Бесплатно |
Базовая |
Премиум |
| Размещение вакансий |
1 |
10 |
неограниченно |
| Доступ к резюме |
нет |
да |
да |
| Аналитика |
нет |
базовая |
расширенная |
Как добиться быстрой индексации вакансий?
Каждая вакансия — отдельная страница с разметкой JobPosting schema.org в JSON-LD. Sitemap обновляется при публикации. За счёт серверного рендеринга (SSR) на Nuxt 3 страницы индексируются за сутки. Дополнительно используем динамические sitemap и приоритезацию в robots.txt.
Процесс реализации проекта
-
Аудит и проектирование. Определяем ключевые сущности, бизнес-логику, способы монетизации. Собираем требования к поиску и интеграциям.
-
Прототипирование интерфейсов. Рисуем экраны для кандидата и работодателя, согласовываем user flow.
- Разработка backend. Laravel 11 (PHP 8.3+) с Repository-паттерном, Elasticsearch для поиска, Redis для кэша.
- Frontend. Vue 3 (Nuxt 3) с SSR, Tailwind — быстрый интерфейс и SEO.
- Интеграция с ATS. REST API или webhook для обмена данными.
- Тестирование. Нагрузочное тестирование (k6) и проверка Core Web Vitals.
- Деплой. Настройка CI/CD (GitHub Actions), Docker Compose, мониторинг.
Что входит в работу
- Репозиторий с полным кодом и миграциями базы данных.
- Документация API (OpenAPI 3.0).
- Настроенный CI/CD (GitHub Actions + Docker Compose).
- Обучение команды заказчика (2 вебинара).
- Гарантия на код — 6 месяцев после сдачи.
- Техническая поддержка в течение гарантийного срока.
- Доступ к админ-панели и системе мониторинга.
- Внедрение парсинга вакансий из внешних источников.
Сроки и гарантии
MVP (публикация вакансий, поиск, отклики, ЛК работодателя и кандидата): 2–3 месяца. С аналитикой, алертами, ATS-функциями, базой резюме с поиском: 3–5 месяцев.
Наш опыт: более 10 лет в веб-разработке, более 50 реализованных проектов. Оценим ваш проект за 2 дня — свяжитесь с нами, чтобы обсудить детали. Получите консультацию по вашему проекту уже сегодня.
Разработка корпоративных порталов и внутренних систем
Мы занимаемся разработкой корпоративных порталов — CRM, ERP, LMS и Intranet. Каждый такой проект начинается не с вёрстки лендинга, а с того, как бизнес-правила лягут в архитектуру: кто видит какие данные, как синхронизируются 1С и учётная система, как 500 контактов превращаются в 500 000 без падения производительности. За 7 лет мы реализовали более 40 порталов для компаний с численностью от 50 до 5000 сотрудников. Оценим ваш проект за два рабочих дня — просто свяжитесь с нами.
Публичный сайт можно запустить без детального проектирования — итеративно править по фидбеку. С корпоративным порталом так не работает: стоимость исправления архитектурных решений после запуска на 200 пользователей несопоставимо выше. Поэтому мы уделяем 70% времени аналитике и прототипированию, а код пишем только после согласования ролевой матрицы и интеграционной схемы.
Три зоны, где чаще всего принимаются плохие решения, — модель прав доступа, производительность на больших данных и real-time обновления.
Как построить ролевую модель для 30 отделов?
Модель прав доступа. «Менеджер видит только своих клиентов, руководитель отдела — весь отдел, директор — всю компанию, но финансовые данные — только финансовый директор и выше». Это не три роли — это матрица из ролей, разрешений, организационных единиц и владения записями. Если это реализовать через if ($user->role === 'manager') в контроллерах — через полгода код станет неподдерживаемым.
Правильный подход: Spatie Laravel Permission для базовой ролевой модели + Policy классы для object-level permission (can('view', $deal) проверяет не только роль, но и владение). Для сложных иерархических структур — ABAC (Attribute-Based Access Control) вместо RBAC.
Производительность на больших данных. CRM с 500 000 контактов, фильтрация по 10 полям, сортировка по активности — это задача, где наивная реализация выдаёт 15-секундные запросы. Composite indexes, денормализация агрегатов (last_activity_at на самой записи вместо MAX по связанной таблице), Elasticsearch для full-text поиска по контактам.
Real-time обновления. Несколько сотрудников работают с одним документом или задачей. Без WebSocket — постоянные setInterval с polling каждые 5 секунд, лишняя нагрузка на сервер, задержка обновлений. Laravel Broadcasting + Pusher/Soketi или собственный WebSocket сервер на Node.js — для уведомлений и изменений в реальном времени.
CRM-системы
Типичный набор: контакты, компании, сделки, активности, воронка продаж, отчёты. Технически это несложно. Сложность — в деталях.
Pipeline с кастомными стадиями. Каждая компания хочет свою воронку. Стадии должны быть настраиваемыми без деплоя. Таблица pipeline_stages с position, color, is_final, probability — и drag-and-drop для изменения порядка на UI (React DnD или dnd-kit).
История изменений. Кто и когда изменил статус сделки, поменял ответственного, добавил заметку. Audit log через Observer или spatie/laravel-activitylog. На UI — timeline с фильтрацией по типу активности.
Интеграция с почтой. IMAP/SMTP для подключения корпоративного ящика, автоматическая привязка входящих писем к контактам по email-адресу. Это надёжно работает только при правильной обработке bounce, spam, автоответов — нужна фильтрация.
Почему ERP — не про код, а про данные?
ERP — это когда CRM, склад, производство, бухгалтерия и HR объединены в единую систему. Полный ERP с нуля — редкая задача (обычно интегрируются с существующими системами), но модульные системы под конкретный бизнес — регулярная.
Ключевой принцип: финансовые операции должны быть неизменяемыми. Не UPDATE orders SET status = 'cancelled' — а создание новой записи order_cancellations с ссылкой на исходный заказ. Это принцип immutable ledger, который упрощает аудит и reconciliation.
Интеграция с 1С — почти всегда часть ERP-проекта. Двусторонняя синхронизация: из 1С в портал (справочники, остатки, цены) и из портала в 1С (заказы, документы). RabbitMQ как шина событий между системами надёжнее прямого HTTP-взаимодействия — в случае недоступности 1С сообщения ждут в очереди.
Как устроены LMS: платформы обучения
Learning Management System — это курсы, модули, уроки, тесты, сертификаты, прогресс пользователей.
Видео-контент — самая нагруженная часть LMS. Хранить видео на собственном сервере и отдавать через Nginx — плохая идея: дорого, медленно, нет адаптивного битрейта. Правильно: загрузка в S3/Cloudflare R2, транскодирование через AWS Elemental MediaConvert или Mux, HLS-плейлист для адаптивного стриминга через Video.js или Plyr.
Прогресс просмотра — через периодическую отправку watch_position с фронтенда (каждые 10–30 секунд), хранение в Redis с периодической синхронизацией в PostgreSQL. Не сохранять каждую секунду в БД — это убьёт производительность.
SCORM-совместимость — если нужна интеграция с корпоративными тренинговыми материалами. Отдельный модуль, есть готовые библиотеки (scorm-again).
Intranet и HR-порталы
Корпоративный интранет: новости, документы, оргструктура, HR-процессы (отпуска, заявки, KPI).
Оргструктура в базе данных — это иерархическая структура. Adjacency list (parent_id на каждой записи) прост в реализации, но медленен при рекурсивных запросах. Nested Sets или Closure Table быстрее для чтения иерархии, сложнее при изменениях. В PostgreSQL — рекурсивные CTE (WITH RECURSIVE) с adjacency list — баланс между простотой и производительностью.
Согласование документов и заявок — workflow engine. Простые линейные согласования (сотрудник → менеджер → HR → бухгалтер) можно сделать без специального движка. Нелинейные (параллельные ветки, условные переходы, делегирование) — стоит рассмотреть готовые решения: Temporal.io для workflow orchestration или собственный конечный автомат на базе state-machine паттерна.
Что входит в работу
При заказе разработки корпоративного портала вы получаете:
- Архитектурную документацию (ER-диаграммы, схема интеграций, матрица ролей)
- Полный код в Git-репозитории с CI/CD
- Доступы к инфраструктуре (хостинг, базы данных, хранилища)
- Обучение администраторов и ключевых пользователей (2–3 сессии)
- Гарантийную поддержку на 3 месяца после запуска
Наши принципы проектирования опираются на официальную документацию Laravel по авторизации (Policies) и рекомендации по работе с очередями.
Технический стек для порталов
| Слой |
Инструменты |
| Backend |
Laravel + PostgreSQL |
| Frontend |
React + TypeScript (Inertia.js или отдельный SPA) |
| Real-time |
Laravel Echo + Soketi / Pusher |
| Поиск |
Meilisearch (быстрый старт) или Elasticsearch (объём) |
| Очереди |
Laravel Queue + Redis |
| Файлы |
S3-compatible (MinIO self-hosted или AWS S3) |
| Мониторинг |
Sentry + Telescope (dev) |
Ориентиры по срокам
| Тип портала |
Срок |
| CRM (базовый) |
10–16 недель |
| LMS (курсы + видео + тесты) |
14–22 недели |
| HR-портал (отпуска, KPI, оргструктура) |
12–20 недель |
| Корпоративный ERP (модульный) |
24–52 недели |
Стоимость рассчитывается индивидуально после детальной аналитики требований и ролевой модели. Чтобы получить предварительную оценку, напишите нам — мы проанализируем вашу задачу и предложим оптимальное решение под ключ.