Skip to main content
Navigos Group2019 - 2023

PRIMUS

PRIMUS was Navigos Group's recruitment platform for executive roles. Employers used it to post jobs, shortlist candidates, and manage hiring pipelines. As the sole frontend developer, I consolidated its React apps into one Angular application. Later, I rebuilt the candidate search in SvelteKit for consultants working inside the company's CRM.

Sole Frontend DeveloperAngular 14TypeScriptRxJSSCSS
PRIMUS employer shortlist with candidate status, source channels, and qualification filters

7s to under 1s

Load time

0

Tickets completed solo

0 yrs

Frontend developer

0K+

Crawled jobs

What I inherited

Five React apps with shared state problems

When I took over PRIMUS, separate React apps each loaded their own bundles. They used plain JavaScript, with Redux state crossing app boundaries. Adding a feature often required changes in several codebases. We later needed to bring the same candidate search into a .NET CRM for internal consultants.

7 seconds to load

every time a recruiter opened the dashboard

3 seconds between features

because switching tabs unmounted the entire app

Zero usage data

so product decisions were based on guesswork

Same search, two systems

and the code couldn't move between them

The rewrite

Consolidating five apps into one

I proposed a rewrite because the separate apps needed shared routing, state, and services as well as better performance. I chose Angular and TypeScript for module boundaries, dependency injection, and compile-time checks.

01

Angular + TypeScript for the rewrite

I expected a rewrite to take less time than refactoring the untyped React apps. Angular gave the growing codebase explicit module boundaries, and TypeScript caught integration errors during compilation.

02

One application with lazy-loaded features

I consolidated five React apps into one Angular workspace with shared routing, authentication, and services. New features could use that common setup without changes across several codebases.

03

Adding event tracking

The platform had no usage tracking. I built a pipeline that let components add or modify events before they were sent, giving product managers data on how recruiters used the product.

PRIMUS employer shortlist showing candidate cards with status, source channels, and bulk actions
Candidate Shortlist

The candidate shortlist

The shortlist was the most-used screen on the platform. Recruiters used it throughout an eight-hour day to track candidates from several sources, filter by qualification status, download CVs in bulk, and manage their pipeline. Responsiveness mattered for those repeated actions.

PRIMUS homepage with top companies section, latest job listings, and career consultant profiles
The Employer Gateway

Finding executive roles and employers

The homepage listed top companies, recent executive vacancies, and career consultant profiles. It introduced the service while giving candidates a way to find roles and employers a way to find talent.

Home Credit company profile page on PRIMUS showing office info, photos, and open positions
Company Detail Pages

Company profiles with open positions

Companies such as Home Credit had profiles with office photos, open positions, and an introduction. Candidates could read about an employer before applying.

Phase 22022 - 2024

Moving candidate search into SvelteKit

By 2022, PRIMUS was stable. Internal consultants needed its candidate search inside their .NET CRM, where loading the Angular app was unsuitable. I rebuilt the search in SvelteKit, carrying over the domain logic and using server hooks to handle CRM authentication. Consultants could then search candidates without leaving the CRM.

SvelteKitTypeScript.NET CRM AuthOptimistic Updates
NBS boolean search with candidate list and full CV profile preview panel

Candidate search inside the CRM

I rebuilt the PRIMUS candidate search inside the CRM. Consultants could use keywords and Boolean operators, then filter by location, salary, and language in their usual workspace.

NBS folder management with saved candidate lists and active search filters

Candidate folders and saved searches

Consultants could organize shortlists into folders for each job requisition, save queries, run bulk actions, and switch between recent and active lists. I used optimistic updates in the SvelteKit app so actions appeared while the server processed the request.

NBS add-to-jobs interface showing candidate assignment to open positions

Direct job pipeline integration

Consultants could add a candidate to an open position in two clicks from the search results. Previously, they had copied the information between PRIMUS and the CRM.

What shipped

Candidate search across two platforms

PRIMUS served the employer-facing product, and its Angular candidate search provided the domain logic for the SvelteKit version in the CRM. Keeping that logic separate from the interface made it easier to move between frameworks.

0

Tickets shipped solo

0x

Faster initial load

0x

Faster navigation

0

Platforms, one search engine

PRIMUSNBS
FrontendAngular 14 + TypeScriptSvelteKit + TypeScript
UsersEmployers (external)Consultants (internal)
AuthJWT + Navigos SSO.NET CRM hooks
StateRxJS servicesSvelte stores + optimistic updates