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, звідки періодично завантажується та імпортується дамп вакансій.
Команда проєкту:
- Артем
Backend розробник
- Сергій
iOS розробник
- Артур Мкртичян
Керівник проєктів
- Олександр
Android розробник
- Антон
Android розробник
- Олександр К.
Android розробник