IVY Estate Agency project wordmark, highlighted color card logo

Built for a business where discretion is the product

A high end household and estate staffing agency was running its pipeline across spreadsheets, email, and WhatsApp. We replaced it with a two sided, stage gated platform where each side sees only the view it needs.

ivy-estate-agency-logo
Industry
Staffing
Type
Two Sided Platform
Timeline
3 Months
Stack
ASP.NET 8, PostgreSQL 17, Swagger, React 19 + Vite, Ant Design, Tailwind CSS, AWS (ECS, RDS, S3, CloudFront, Amplify), GitHub Actions CI/CD
Tell us what you're building

An average job ad pulls 250 resumes and up to 88% are unqualified. IVY filters and stages every candidate before a client ever sees one.

Candidate seestheir own profile, live openings, application status
Agency seesthe full pipeline, every status change, audit trail
Client seesa scoped review window, only what they should
IVY admin dashboard in dark theme on a MacBook against a dark backdrop
The problem

The pipeline lived in three places at once

A candidate's information, the job they were tied to, and where they stood were three different things in three different systems, held together by hand. In a discreet, high trust placement business, a candidate falling through the cracks or a client feeling out of the loop isn't an admin slip. It's the product.

Four pain points

[01]

Clients had no window

every “where are we?” became a manual status email

[02]

Candidate data was thin

no structured place for candidates to supply it

[03]

Time lost on unqualified applicants

nothing filtered or staged people first

[04]

Scattered data

nothing could be trusted as current

Did you know?

An average job ad pulls nearly 250 resumes, of which up to 88% are unqualified.

The U.S. Department of Labor estimates a bad hire costs at least 30% of first year earnings. For a $60,000 salary, that is $18,000 in immediate damage.

The average time to fill a position in the US is 42 to 44 days according to SHRM, and unfilled positions cost about $98 per day, on top of an average recruiting cost per hire of $4,683.

The design

We didn't build an ATS. We moved the work to where it belongs.

Candidates own and build their own profiles, so the data entry burden and the accuracy shift to the person who actually has the information. Jobs run through a defined pipeline, so unqualified people are filtered before a client ever sees them. Clients get controlled, scoped visibility instead of a status email.

  1. [01]Applying
  2. [02]Screening
  3. [03]Client Review
  4. [04]Interview
  5. [05]Trial
  6. [06]Hired / Rejected
THE DECISION THAT SHAPED THE BUILD

Two sided and stage gated, not an internal tool with reporting bolted on. Public versus private jobs and a dedicated client review stage replaced the status email and kept visibility scoped.

Development

Inside the build

This wasn't a clean linear build. Significant changes came in during development. Workflow statuses, candidate portal and form field options, dashboard refinements, a full dark theme, broader design updates. We absorbed them by shipping the core pipeline first and saying no to additions that didn't serve the immediate launch.

The honest part (QA)

The candidate module was the hardest to stabilise. The portal, the forms, and the workflow statuses all touched the same flows, so the first release surfaced a cluster of bugs there. We earned confidence back through focused regression on those touchpoints rather than declaring victory at launch. That's the realistic version of how this kind of build actually goes.

The requirement that surfaced mid build

Sensitive candidate documents and resumes had to be encrypted at rest. We applied encryption and decryption. For a discreet clientele business, that's a credibility marker, not a footnote.

What we said no to

Prioritised releases and actively minimised scope creep. Core pipeline first, the rest deferred to keep the launch clean.

Ivy Candidate Review
Delivery

What the client can now do

Run a job from open to hire without leaving the system. Start from clean, structured data because candidates do the heavy lifting. Move everyone through a single shared pipeline where each stage is explicit and counted. Give clients a controlled review window instead of a status email. And see the whole operation at a glance.

Timeline

4 to 5 months to first release, then a deliberate stabilisation and iteration phase. We were upfront that it wasn't a clean linear build, and it showed in how we hardened the candidate module after launch.

Image

Metrics to watch

Candidate applications and successful placements are the numbers worth tracking as they mature. Post launch, the team's own requests, which include invite candidate, application and approval status, pending workflow, and job visibility permissions, show they're actively living inside the tool.

Image 1

Read more case studies

Internal Platform
westrow food group logo

One platform to run the whole brokerage

Westrow brokers perishable food into every major Canadian retailer. We rebuilt the system that connects their client, their retail customers, and every product spec in between, retiring a legacy database and a wall of spreadsheets for a single source of truth.

Read Case Study
See All Case Studies

Running placements across spreadsheets and WhatsApp?

Tell us what you're building