# IVY Estate Agency

URL: https://qualixsolutions.com/case-studies/ivy-estate-agency/

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.

- 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

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 sees — their own profile, live openings, application status
- Agency sees — the full pipeline, every status change, audit trail
- Client sees — a scoped review window, only what they should

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

- Clients had no window: every “where are we?” became a manual status email
- Candidate data was thin: no structured place for candidates to supply it
- Time lost on unqualified applicants: nothing filtered or staged people first
- 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.

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

1. Applying
2. Screening
3. Client Review
4. Interview
5. Trial
6. Hired / Rejected

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

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