Previous project Next project

API and iOS app for‭ HuntsPoynt

HuntsPoynt is a job search service. It is a communication platform for recruiters and job seekers. The service is realized both as a private account in the web version and native Android and iOS apps.

The Problem the Service Solves

Job search is an invariably topical issue. That’s why there are many different job search and vacancy posting services. Almost all developed countries have several local services of this type. They may be either multi-purpose or aiming at the specific employment area or region.

In Great Britain, where the owner and the contractor of HuntsPoynt is from, the market for such services hasn’t been fully formed yet. Having analyzed the market situation, the contractor found some drawbacks with the existing services. Namely, not all of them had a mobile version or, contrary, there were mobile apps without a website realization. To add, most of the competitive services had a limited functionality and charged fee for some functions. After the review of existing solutions, the contractor came to the conclusion that the new HuntsPoynt project should have such properties:

  • realization on the most popular mobile platforms: Android and iOS;
  • web version with the same functionality as that of mobile apps;
  • free access to all functions;
  • simple and intuitive interface.

Options for Candidates

At the point of registration, the job seeker fills in the obligatory fields. This information is used to select suitable vacancies. Registered users can use arbitrary parameters when searching. The users can hide certain fields from the personal profile so that other users don’t see them. They can use the chat to communicate with the recruiters. Candidates periodically receive push-notifications about job offers which fit their profile. Job offers and recruiters can be bookmarked, and recruiters can be blocked.

Options for Recruiters

After the registration, the recruiter can publish job offers and create profiles of the companies which offer jobs. Thus, one recruiter can publish vacancies for several companies. For each vacancy, the recruiter can use both a quick search of suitable candidates or a regular search on the basis of arbitrary parameters. As well as the candidates, the recruiters can send messages - both private and pegged to a certain vacancy. They also can bookmark or block other users.

Android App Design

We had a task to create the app’s design keeping in mind the corporate style and iOS app interface, as well as Material Design guidelines.

For the interface, we used the set of standard icons and Google typography together with Material Design components and patterns (namely, buttons, tabs, text fields, cards, dialogs, sliders, selection controls, search, and navigation). It sped up the designer’s work and the layout.

Android App Development

Following the Material Design principles simplified the work of mobile developers (and, hence, the cost of the project). Because standard components and simple customization were used, the mockup layout and the programming of the visual elements sped up.

We achieved the speeding up and optimization of the app’s traffic by caching the directories on the data storage. For this purpose, we used the Realm mobile database. There is an automated positioning function in the app, which simplifies the search of jobs or candidates by the remoteness filter. Having applied up-to-date approaches to the mobile app architecture design, we implemented the advanced processing of connection errors, which simplified the interaction between the user and the app in case of faulty internet connection.

Service Architecture

HuntsPoyns was under gradual development. First, the iOS version was released. Apart from the external API used by the mobile app, the admin private account was created. After that, the functionality of the app grew and changed. There was released a web version the functionality of which corresponded to that of the mobile app. And then, Android native version was released.

The process of the development influenced the architecture of the project. Since there initially was just one mobile client which needed API, a small admin account was developed. For it, we employed the common database by splitting the functions into different subdomains. It made the development much simpler quicker, and cheaper. When it was time to implement the web version of the app, it turned out that we could use a significant part of the code previously written for API. We only needed to code controllers which would process URL addresses of the frontend side of the service, and to place them on a separate subdomain. Thus, all server parts have been deployed in one project and commonly use most of the internal services. At the upper level, they differ only by controllers which, depending on the subdomain called, re-route the calls to the internal program router.

The project is written in PHP framework Symfony. The router component in the scheme is actually the Symfony Router program component. For it, we specified the rules of routing between the invokes on different subdomains and calls to necessary controllers for their processing. The frontend version uses many internal services which are also used in API and administration panel.

The external API was developed for connecting mobile clients on iOS and Android platforms. For the push-notifications, both to the mobile clients and the web version, Firebase Cloud Messaging service is used. And for such asynchronous tasks as notification distribution processing, the RabbitMQ message broker is used. We applied MySQL database for data storage, and Redis for data caching. There is a full-text search for which we applied the corresponding tool, ElasticSearch. Apart from ordinary indexing settings and ‘value’ specifications for indexed fields, ElasticSearch allows specifying geographic coordinates for the search. HuntsPoynt is configured to work with the external CV-Library service from which the vacancies dump is periodically loaded and imported.

Cast:

  • Artem
    Artem

    Back End Developer

  • Sergei
    Sergei

    iOS Developer

  • Artur Mkrtychian
    Artur Mkrtychian

    Project Manager

  • Oleksandr
    Oleksandr

    Android Developer

  • Anton
    Anton

    Android Developer

  • Oleksandr
    Oleksandr

    Android Developer

Case Studies