← All work

Revamping Scaler’s job platform to drive 15% more qualified applications in the first month.

Scaler is an Indian edtech company that helps people upskill and build careers in tech.

Careers Hub is where learners go once they’re done with their course, to find the jobs companies have posted and apply.

  • Pod 1 PM · 2 engineers · 1 designer
  • Timeline 3 months · Nov ’25–Jan ’26
  • My role Product designer
Tools FigmaClaudeGPTVS CodeVercelMixpanelMetabase

What shipped was labels on the job list, reasons on the job page, and a resume score before you apply.

Careers Hub was built for companies to post jobs, but it failed to help learners find suitable jobs and apply.

Posting a role worked fine. Learners were the ones left behind.

Here is how a learner moved through it

  1. Lands on jobs & sees job card
  2. Opens job card
  3. Clicks apply
  4. Completes application
  5. Applied successfully

Drop-offs noted in the flow

66.2%

go on to open a job card

46%

go on to click apply

30.9%

go on to complete the application

12%

end up applied successfully

About 102 learners a day move through Careers Hub.

Careers Hub should help learners land jobs once their course ends, but many feel stuck and unsure when they try to apply because…

  1. They only know if they’re eligible, not why.
  2. They find out if they qualify before they know if the job fits.
  3. They don’t know if they’re sending their best resume.

So most who open a job never apply, and the few who do don’t know if they sent their best shot.

Before the redesign · the old UI
The old Careers Hub job list: six cards to a fold carrying only Eligible or Not Eligible, with a magnifier over All Filters. A card one step from qualifying wears the same label as one with no chance at all
01
  • Cards are set-up in rows of 3 with no clear CTA
  • The list had no idea what you wanted. No role, salary or location to sort by, so finding a job worth applying to meant scrolling all 120
The old job detail view, leading with a skills-required and tech-stack checklist instead of any reason the role is worth applying to, with magnifiers over the Not Eligible tag, an Eligible tag and the Tech stack table
02
  • You had to open the job to learn what the tag meant
  • The card opens to a checklist, not a reason to want the role
  • Qualified learners hesitate afraid of rejection

What we thought would fix it

If learners can see why a job fits, what blocks them, and which resume to send, more qualified learners will apply.

Primary
eligible click-to-apply rate
Secondary
completed applications
Guardrail
applications from ineligible learners

So we went looking for where learners stopped

PRD
  1. Two research sources side by side: the interview sheet, a grid of answers across five Academy personas magnified on the note about job role, salary and location, and the Mixpanel funnel showing job card clicked at 100% falling to 11.76% at Apply Now, each on its own panel
    From the interview sheet and Mixpanel. Learners wanted role, salary and location upfront; the funnel shows where they stopped.

    First we read the data

    • The funnel showed that everyone opened a card, but only 11.76% went on to apply. One day’s read (7 Nov), pulled early to gauge volume. The funnel above covers a month.
    • Across 25+ interviews, three questions kept coming up. Is this job right for me, am I ready, and if not, can I fix it?
    • Labels weren’t enough. Learners needed their status and the next step.
    • The gap wasn’t confidence in the role. It was confidence in themselves.
  2. Two competitor job surfaces: Naukri.com recommended jobs above, and a LinkedIn job page below showing how your profile fits the role
    Naukri.com above, LinkedIn below. Both show one job at a time and explain the profile match before asking for the click.

    Then we looked at how other job sites do it

    • Naukri and LinkedIn showed one job at a time instead of a grid.
    • LinkedIn explained why a profile fit the role before asking for the click.
    • Both ranked by profile match, then explained the match back.
Prototypes built with AI

The work had to fit inside a few hard limits

Small team, tight window
One PM, two engineers, one designer, three months, all on Ant Design, so new patterns reused existing pieces.
Three stakeholders, one tool
Learners, the Scaler team and hiring companies share one tagging system. A fix for one couldn’t break the others.
Nothing shipped without proof
Every change ran as an A/B split first, so each had to be testable on its own.
Problem

The old tags could say no, but never whether it was fixable or final. Now they explain themselves.

I want to know exactly what’s stopping me from applying, so that I can work on fixing it instead of guessing.

Personalised job discovery
Fewer cards, clearer signals for the next action

Shipped

Each label says whether you can apply, and why. The sidebar keeps results relevant without re-filtering.

The shipped tag system: Quick apply, Eligible and Applied share one success colour; 2 steps away marks almost-ready; Not Eligible, Notice Period Mismatch and Expired share one failure colour. Below, the job list with the preferences sidebar, and an edge case showing the reason for ineligibility stated on the card itself
Shows only what fits your preferences
Saved preference, no repeat input

How we got from the first idea to what shipped

Click the tabs to see each iteration

Shipped

Reduced the grid to one clear reason

One column, so each status and its next action read at a glance.

The shipped Job Card Tags prototype: one job card per row, each carrying Quick apply, 2 steps away or Not Eligible with the next action stated under it, beside the preferences sidebar
Shipped version · better viewed on desktop

Each tab retunes the frame below.

Open full prototype →

Why a label test turned into a full redesign

01 · Evidence

Clearer labels helped, but people still had no next step.

02 · Constraint

The next intake created a hard shipping deadline.

Problem

Job listings showed requirements, but never why a job was worth wanting. Now they do.

I want to know why a job suits me before I check whether I qualify, so that I don’t scroll past roles that actually fit.

The shipped Job Highlights: a Top Reasons to Apply block capped at two bullets and four tags, placed above the requirements, with pending eligibility steps surfaced inline. Top right shows the fallback when highlight generation fails, which still lets the learner read the job description and apply
Status shown in context, no page switch
Two reasons, kept scannable
Supporting tag, secondary to the reasons

Reasons to apply sit above the requirements, not below.

Leading with intent
LLM-generated job insights matched to each profile

Shipped

Job Highlights now lead with value before the requirements ever show up, so learners see why the job is worth applying for.

Eligible roles · click to apply
55.44% 63.82%

A 15% relative increase, among eligible learners who opened a job.

Ineligible roles · click to apply
4.83% 6.84%
Total outcome +72

more applications
65 qualified, 7 not qualified

How this idea got to what shipped

Click the tabs to see each iteration

Shipped

Reduced the insight to one short block

Two lines and four tags made the value clear in seconds.

The shipped Job Highlights prototype: a job list beside a detail panel where a Top Reasons to Apply block gives two reasons and four tags above the requirements, with the pending eligibility steps inline
Shipped version · better viewed on desktop

Each tab retunes the frame below.

Open full prototype →
Visual Studio Code with the Claude Code session that produced the highlights prompt, source control panel open on the left
I wrote the rules, the AI wrote to them, I reviewed every change.
app/services/job_highlights_prompt.rb
STRUCTURE = {
  name: "job_profile_highlights",
  parameters: {
    properties: {
      highlights: {
        type: "array",
        description: "An array of 4-6 compelling job
          highlights that showcase the most attractive
          aspects of the role, company, and opportunity"
      },
      keywords: {
        type: "array",
        description: "An array of 4-6 key terms or
          phrases that summarize the job opportunity"
      },
      quality_score: {
        type: "string",
        enum: ["HIGH", "MEDIUM", "LOW"]
      },
      confidence_note: { type: "string" }
    },
    required: %w[highlights keywords
                 quality_score confidence_note]
  }
}

SYSTEM_INSTRUCTION = <<~INSTRUCTION
  You are a career coach helping job seekers quickly
  understand if a role is right for them. Generate
  “Top Reasons to Apply” by analyzing BOTH the Job
  Description AND the About the Company section.

  CRITICAL RULES:

  NEVER hallucinate or fabricate information not
  present in EITHER input

  If information is missing or vague in BOTH sections,
  your highlights MUST reflect that limitation

  For LOW quality inputs, generate 3 minimal
  highlights only (not 5)

  Do not make exaggerated claims

  EXCEPTION: Always add “Career Development” tag for
  fresher/intern/entry-level roles regardless of
  content
INSTRUCTION

How leading with value increased applications

User problem

No reason to care yet

It answered ‘can I apply?’ before ‘do I want this?’

Design decision

Sell the role first

A short block above the requirements.

Impact

More qualified applications

Eligible-role click-to-apply rose from 55.44% to 63.82% in a month.

Problem

Learners could send any saved resume, but never knew which one fit. Now a score tells them.

I want to know which of my saved resumes has the best chance at this job, so that I send the strongest one.

Improving resume selection accuracy
Applying with the most suitable resume

Shipped

The score compares your saved resumes for this role, so you know which one has the best chance and why.

If the score can’t load Applying isn’t blocked. Continue, or retry the score.

Step 2 of the application flow: three saved resumes ranked by fit for this role at 80%, 60% and 40%, each with its own list of improvements and an Edit link, beside a live preview of the selected resume. Below, the improvement checklist shown inside the resume itself, and the fallback when resume analysis fails to load

The pilot that justified this

We sent a plain version of the report to 100 learners first.

Pilot sample 100 learners
96% found the report useful
91% understood their rejection

It landed, so we built it.

Resume fit was the one rejection cause we could move. It still isn’t a callback.

resume_job_fitment_score_config
Step 1 - experience_check
  meets_minimum = candidate_yoe >= jd_min_yoe

Step 3 - component_scores
  skills_score              (0-50): coverage + depth
  experience_projects_score (0-50): relevance, seniority, impact

Step 4 - score
  score = skills_score + experience_projects_score
  if not meets_minimum: score is capped at 40

  Bands:
  0-20    profile unrelated to the role
  21-45   major gaps in must-haves
  46-60   partial fit, several requirements missing
  61-74   reasonable fit, missing one or more must-haves
  75-89   strong fit, meets requirements with evidence
  90-100  exceptional fit, clearly exceeds requirements

Step 5 - decision
  candidate_status = "shortlist" if score >= 75, else "reject"

Under the minimum experience the score caps at 40. 75+ is shortlisted.

What moved after we shipped

An A/B split on 4,000 learners, 2,000 to each bucket. Every figure below comes from that split, not a full rollout.

480 applications before, 552 after, a 15% lift that came from the three features together rather than any one. Only 7 came from ineligible learners.

+65 ≈ 15%

more applications from people who qualified, over a month

+72

more applications in total, 65 who qualified and 7 who did not

63.82%

of people who qualified clicked apply, up from 55.44%

And this is what learners said got better

98 learners answered and could choose more than one area.

Survey results for the question What is better, answered by 98 of 98 people: Jobs Views 59, Application Process 43, Navigation 38, Resume Feedback before application 36, other 12

The job list before and after

The old Careers Hub job list: three cards to a row carrying only Eligible or Not Eligible, with no next action on any card
Before. Three cards a row, two labels, no next step.
The shipped Careers Hub job list: one card per row with Quick apply, 2 steps away and Eligible tags, each stating the next action, beside the preferences sidebar
After. One card a row, four tags, each naming what to do next.

What I would carry forward

01

A label only helps if it names the next step. “Eligible” never did.

02

Two rough versions, shown fast and thrown away, got us to the single-card layout.

03

A 100-person pilot proved the idea before we built it.

What this does not prove yet

  • We measured applications, not interviews or hires.
  • A month is still too short to speak to job quality.
  • Next we track shortlist and interview rates by fitment score.
Explore next

Redesigning Scaler’s career-prep journey to 2.4× weekly resume completions

How we made preparing for jobs easy and visible by cutting the steps to build a resume 3 → 1

The redesigned preparation homepage: a checklist that unlocks job access beside the in-built resume builder