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.

7s to under 1s
Load time
0
Tickets completed solo
0 yrs
Frontend developer
0K+
Crawled jobs
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
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.
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.
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.
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.

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.

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.

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.
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.

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.

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.

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.
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
| PRIMUS | NBS | |
|---|---|---|
| Frontend | Angular 14 + TypeScript | SvelteKit + TypeScript |
| Users | Employers (external) | Consultants (internal) |
| Auth | JWT + Navigos SSO | .NET CRM hooks |
| State | RxJS services | Svelte stores + optimistic updates |