Skip to main content
Navigos Group2019 — 2023

PRIMUS

PRIMUS was Navigos Group's premium recruitment dashboard — the tool employers used to post executive roles, shortlist candidates, and manage hiring pipelines. I inherited a fragmented React frontend, rewrote it as a single Angular application, and later rebuilt the core search engine in SvelteKit so internal consultants could use it inside their CRM.

Primary Frontend Owner (Solo)Angular 14TypeScriptRxJSSCSS
PRIMUS employer shortlist — candidate tracking with status, source channels, and qualification filters

7s to under 1s

Load Time

0

Tickets Solo

0 yrs

Sole Frontend

0K+

Crawled Jobs

What I Inherited

Five React apps. No types. No measurement.

When I took over PRIMUS, the frontend was split into separate React applications that each loaded their own bundles. Redux stores crossed app boundaries, everything was plain JavaScript without types, and adding a feature meant touching multiple codebases while hoping nothing else broke. Then a new requirement arrived: the same candidate search needed to work inside a .NET CRM for internal consultants, which was a completely different tech environment.

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

Rewrite, don't patch

I pushed for a full rewrite instead of incremental patching because the problem wasn't just performance — it was architecture. React alone wouldn't have solved the core issue since everything lived in separate silos with no shared foundation. I went with Angular and TypeScript because they gave me module boundaries, dependency injection, and compile-time safety from day one.

01

Angular + TypeScript for the rewrite

I chose Angular because refactoring the untyped React codebase would have taken longer than rewriting it. TypeScript caught integration bugs at compile time instead of production, and Angular's module boundaries kept the codebase from turning into spaghetti again as it grew.

02

One application with lazy-loaded features

I consolidated five separate React apps into a single Angular workspace where routing, auth, and shared services lived in one place. When I added a feature, I added it once instead of coordinating changes across multiple codebases.

03

Built an event tracking pipeline from scratch

The old platform had zero usage data, so product decisions were guesses. I built a composable tracking pipeline where any component could hook in and modify events before they shipped, which gave product managers real numbers on what recruiters were actually doing.

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

The screen recruiters lived in all day

This was the single most-used screen on the platform. Recruiters tracked candidates across multiple sourcing channels, filtered by qualification status, downloaded CVs in bulk, and managed their pipeline from one table. Every interaction needed to feel instant because they were doing this eight hours a day.

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

Where companies found their executive roles

The homepage listed top companies, latest executive positions, and career consultant profiles. It served as both a marketing surface and a functional entry point — candidates discovering roles and companies discovering talent in the same place.

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

Every employer got a living page

Companies like Home Credit had full profiles that pulled together office photos, open positions, and about sections. Candidates could research an employer before applying instead of jumping between websites.

Phase 22022 — 2024

Same search engine, different framework

By 2022, PRIMUS was stable and running. But internal consultants needed the same candidate search power inside their .NET CRM, and I couldn't force the CRM to load an Angular app. I rebuilt the search engine in SvelteKit instead because Svelte's component model was close enough to Angular's that the domain logic ported cleanly. The server hooks handled CRM authentication natively, and consultants got a tool that felt native to their daily workflow without leaving the system they already lived in.

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

Boolean search, zero context switching

The same candidate search logic that powered PRIMUS was rebuilt and embedded directly into the CRM. Consultants filtered by keywords, Boolean operators, location, salary, and language without leaving the system they used all day.

NBS folder management with saved candidate lists and active search filters

Candidate folders and saved searches

Consultants organized shortlists into folders tied to specific job requisitions. They could save search queries, run bulk actions, and toggle between recent and active lists. SvelteKit's optimistic updates kept everything feeling instant even on slower connections.

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

Direct job pipeline integration

Consultants could add candidates to open positions in two clicks from the search results, which replaced the manual copy-paste workflow between CRM and PRIMUS that was costing them time every day.

What Shipped

One search engine. Two platforms. One architecture.

PRIMUS continued to serve Navigos Group's employer-facing operations, and the candidate search I built in Angular became the foundation for the SvelteKit migration into the CRM. The domain logic moved cleanly between frameworks because the platform was designed with clear boundaries from the start. Different stacks, same architectural thinking.

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