HuntsPoynt — сервис для поиска работы. Это платформа для коммуникации рекрутеров и соискателей. Сервис реализован как в виде личного кабинета в веб-версии, так и в виде нативных мобильных приложений под платформы Android и iOS.
Проблема, которую решает сервис
Проблема поиска работы всегда актуальна. Поэтому существует много разнообразных сервисов для поиска работы и публикации вакансий. Почти в каждой развитой стране есть несколько подобных локальных сервисов. Они могут быть либо универсальными, либо нацеленными на конкретную сферу деятельности или регион.
В Великобритании, где проживает владелец и заказчик сервиса HuntsPoynt, рынок подобных сервисов еще не сформировался окончательно. Проанализировав ситуацию на рынке, заказчик обнаружил ряд недостатков у существующих сервисов. А именно: не все из них имели мобильную версию, либо наоборот, были мобильные приложения без реализации в качестве веб-сайта. Также большинство конкурирующих сервисов были ограничены в функционале и предоставляли часть функций за плату. Прорезюмировав существующие решения, заказчик пришел к выводу, что его новый проект HuntsPoynt должен обладать следующими характеристиками:
- реализация на наиболее востребованных мобильных платформах: Android и iOS;
- веб-версия, повторяющая функционал мобильных приложений;
- бесплатное предоставление всего функционала;
- простой и понятный интерфейс.
Возможности для соискателей
В момент регистрации пользователь, ищущий работу, заполняет обязательные поля, по которым он сможет находить подходящие вакансии. Зарегистрированным пользователям доступен функционал поиска вакансий по произвольным параметрам. Можно скрывать определенные поля из личного профиля, чтобы они не были видны другим пользователям. Для общения с рекрутерами настроен чат. Периодически соискатель получает push-уведомления о вакансиях, соответствующих его профилю. Также есть возможность добавлять рекрутеров и вакансии в “Избранное” либо же блокировать рекрутеров.
Возможности для рекрутеров
После регистрации рекрутер имеет возможность публиковать вакансии и создавать профили компаний, от имени которых публикуется вакансия. Таким образом, один рекрутер может публиковать вакансии от разных компаний. Для каждой вакансии можно воспользоваться быстрым поиском подходящих кандидатов либо обычным поиском по произвольным параметрам. Как и у соискателя, у рекрутера есть возможность писать сообщения — как личные, так и в контексте конкретной вакансии, а также добавлять пользователей в избранное или блокировать.
Дизайн Android приложения
Перед нами стояла задача разработать дизайн с учетом фирменного стиля и интерфейса iOS приложения, а также в соответствии с гайдлайнами Material Design.
Для реализации интерфейса мы использовали набор стандартных пиктограмм и типографику Google, а также компоненты и паттерны Material Design, а именно: buttons, tabs, text fields, cards, dialogs, sliders, selection controls, search, navigation. Это позволило ускорить работу дизайнера и верстку приложения.
Разработка Android приложения
Следование принципам Material Design упростило работу мобильным разработчикам (а значит, уменьшило конечную стоимость проекта). За счет использования стандартных компонентов и простотой кастомизации, верстка макетов и программирование поведения визуальных элементов ускорились.
Быстродействие и оптимизация трафика приложения были достигнуты благодаря кэшированию справочников в хранилище данных. Для этого мы использовали мобильную базу данных Realm. В приложении есть функция автоопределения местоположения устройства, что упрощает поиск работы или исполнителей по фильтру отдаленности. Использовав современные подходы в построении архитектуры мобильных приложений, мы реализовали продвинутую обработку ошибок соединения, упростив тем самым взаимодействие пользователя с приложением в условиях плохого интернет-соединения.
Архитектура
Сервис HuntsPoynt развивался поэтапно. Сначала была выпущена iOS-версия. Кроме внешнего API, который использует мобильное приложение, был разработан личный кабинет администратора. После этого функционал мобильного приложения расширялся и изменялся. Была выпущена веб-версия, повторяющая функционал приложения. После этого была выпущена нативная Android-версия.
История развития проекта повлияла на его архитектуру. Так как изначально был только один мобильный клиент, которому было необходимо API, то небольшой кабинет для администратора было решено сделать с использованием общей базы, просто разделив функционал на разные поддомены. Это значительно упростило, ускорило и удешевило разработку. Когда пришло время реализовывать веб-версию приложения, оказалось, что она может использовать значительную часть уже написанного для API кода, осталось только написать контроллеры, которые бы обрабатывали URL-адреса фронтенд-части сервиса и разместить на отдельном поддомене. Таким образом, все части сервиса размещены в одном проекте и совместно используют большинство внутренних сервисов. На верхнем уровне они различаются только контроллерами, на которые, в зависимости от запрошенного поддомена, перенаправляет запросы на внутренний программный роутер.
Проект реализован на PHP с использованием фреймворка Symfony. Под компонентом Router, который указан на схеме, имеется в виду программный компонент Router из Symfony, для которого были описаны правила маршрутизации между запросами на разные поддомены и вызовами необходимых контроллеров для их обработки. Frontend-версия использует много внутренних сервисов, которые также используются в API и панели администратора.
Внешний API разработан для подключения мобильных клиентов на платформах iOS и Android. Для отправки push-уведомлений как на мобильные клиенты, так и в веб-версию используется сервис Firebase Cloud Messaging. Для таких асинхронных задач, как обработка рассылки уведомлений, используется брокер сообщений RabbitMQ. В качестве хранилища данных используется база данных MySQL, а для кэширования данных — Redis. В проекте реализован полнотекстовый поиск. Для этого мы использовали соответствующий инструмент — ElasticSearch. Кроме обычных настроек по индексированию текста и указанию “стоимости” для каждого индексированного поля, ElasticSearch позволяет осуществлять поиск по гео-координатам. HuntsPoynt настроен на работу с внешним сервисом CV-Library, откуда периодически скачивается и импортируется дамп вакансий.
Команда проекта:
- Артем Г.
Back-end разработчик
- Сергей
iOS разработчик
- Артур Мкртычян
Руководитель проектов
- Александр
Android разработчик
- Антон Б.
Android разработчик
- Александр К.
Android разработчик