01 - Context & Problem

Real users, real feedback, no designer

HastyHire is a multi-tenant SaaS platform that automates hiring through AI powered video interviews. Companies post positions, candidates record responses via a public link, and seven AI agents analyse each submission and generate a detailed hiring report.
When I joined, the product was already live with paying clients. Three recruitment campaigns had been completed. The entire UI had been built by developers and it worked, but it wasn't designed. More critically, the client team had documented exactly what was wrong.

+2000

+2000

Real applicants already in the hastyhire system

Real applicants already in the hastyhire system

10+

10+

Companies use the system before redesign

Companies use the system before redesign

4+

4+

AI Agents powering the interview pipeline

AI Agents powering the interview pipeline

Client feedback, documented from 3 live campaigns

"The WYSIWYG is too small. Can't see which candidates I've already reviewed. Not clear when credits were used. How do I close a position for new submissions?"

HastyHire Meeting With CTO : In this session the CTO, PM, Full-Stack, and me were discussing about all the feedbacks from client which are urgent to be executed following with UI improvement as soon as possible.

So, here some of the feedbacks that we discussed above:

Urgent - Must Have (Blockers)

WYSIWYG too small for real job descriptions

No way to track which candidates were reviewed

Can't set candidate status (rejected / shortlist)

Credit consumption unclear

No way to close a position for submissions

Can't see question text without opening each video

Improve UI visual and adjust clear UX for position, applicant, and job listing page.

Nice to Have (Friction)

Dashboard widgets not clickable

AI report scroll-within-scroll layout

Wrong date format (mm/dd/yyyy)

AI analysis too generic for the role

Position status misaligned with applicant status

No shareable interview, only link

Can't edit existing email that already set before

Can't manage hiring pipeline stages

I treated the client feedback document as the primary brief. Everything I designed was traceable back to a specific item in that list.

02 - Design System & Landing Page

Design system first. Landing page second. Dashboard third.

The brief was simple: HastyHire needed a landing page. No reference, no existing brand, no design system. Before I opened Figma, I made one decision that shaped everything that came after, so I would build the design system first, not the screens.
That meant setting up semantic colour tokens, typography scale, spacing variables, and component variants in Figma which all wired to light and dark mode natively. Only after the system was documented, I start designing the landing page. Then I developed it directly in Framer, mirroring the Figma token structure as Framer variables so both environments stayed in sync.
And here we go for the design system. Actually This wasn't bureaucracy. It was the only way to make both surfaces sustainable and visually coherent without having to maintain two separate design directions.

First, I setup Design System in Figma

Colour tokens, type scale, spacing, and component variants and all documented before a single screen was designed. Every decision here would carry forward to both the landing page and the dashboard.
Colour tokens, type scale, spacing, and component variants and all documented before a single screen was designed. Every decision here would carry forward to both the landing page and the dashboard.

Design System in Figma : Semantic colour tokens, typography scale, spacing variables, component variants which all connected to light/dark mode via Figma variables.

Next, I Create Landing Page Design in Figma

With the system in place, I designed the landing page. Every component referenced the token system and nothing was hardcoded. This made the Framer development phase faster and kept both environments visually consistent.
With the system in place, I designed the landing page. Every component referenced the token system and nothing was hardcoded. This made the Framer development phase faster and kept both environments visually consistent.

Landing Page Design in Figma : Full page layout built on the token system. Dark mode variant generated automatically from the same components.

Developed in Framer

I developed the landing page directly in Framer, no handoff to another developer. The Figma token structure was mirrored as Framer variables, with colour theme and style guide configured to match the Figma system exactly. One source of truth, two environments.
I developed the landing page directly in Framer, no handoff to another developer. The Figma token structure was mirrored as Framer variables, with colour theme and style guide configured to match the Figma system exactly. One source of truth, two environments.
BeforeAfterLightDark
BeforeAfterLightDark

Framer Develop : Variables connected to Figma and it has light & dark theme with toggle switch. Also here I create a custom component code that can switch between two different images when changing across light and dark theme. (This landing page preview is after post-launched V2.0 completed)

Shipped to Production (Version 1.0)

The landing page went live at hastyhire.io with sections: hero, how it works, pricing tiers, testimonials, and FAQ included all responsive with working light/dark mode.
The landing page went live at hastyhire.io with sections: hero, how it works, pricing tiers, testimonials, and FAQ included all responsive with working light/dark mode.

Then the second brief arrived

With the landing page live and the design system proven in production, the second brief came in: redesign the entire product dashboard including Positions, Applicants, Public Job Listing, Email, and Settings. The foundation was already there. The work could begin properly.
With the landing page live and the design system proven in production, the second brief came in: redesign the entire product dashboard including Positions, Applicants, Public Job Listing, Email, and Settings. The foundation was already there. The work could begin properly.

03 - The Work

Six surfaces, one visual language

Dashboard

The original had four static zero-state cards and a text only "Getting Started" block. Nothing was clickable. No data visualisation. No sense of what the product could do.
The original had four static zero-state cards and a text only "Getting Started" block. Nothing was clickable. No data visualisation. No sense of what the product could do.

Stat cards → navigable shortcuts with growth context

Must Have

Before

Static cards. Clicking them did nothing. Explicitly flagged in client feedback.

After

Each card navigates to its section + shows growth delta (+3.14%). A metric that goes nowhere is a dead end.

Static text → onboarding checklist with progress state

UX Improvement

Before

Three plain text items. No state, no interaction, no progress.

After

Step-by-step checklist with completion tracking. Converts an empty state into momentum — users know exactly what to do next.

No chart → Applicants vs Open Positions trend line

New Addition

Before

No visualisation. No sense of trend, velocity, or pipeline health.

After

Line chart with 1M/3M/1Y filter, interactive tooltip per date. Hiring managers think in pipelines — a chart communicates what a number can't.

HastyHire Dashboard : This is a live preview before redesign. It looks so simple and the clients don't like it, so they request to upgrade the UI but still clean and simple without much data.

Iteration - what I designed first was wrong

My initial dashboard had multiple charts and a live feed container replacing the Getting Started panel. The CTO and CEO rejected it: too complex, too much dev time. I stripped back to a single trend chart and a recent positions table. The simpler version shipped. The right design is the one that can actually be built in the time available.
My initial dashboard had multiple charts and a live feed container replacing the Getting Started panel. The CTO and CEO rejected it: too complex, too much dev time. I stripped back to a single trend chart and a recent positions table. The simpler version shipped. The right design is the one that can actually be built in the time available.

HastyHire New Dashboard : This is a a redesign result that keeps clean and not too much data.

Position

Next step is creating a position involves five genuinely distinct mental modes: defining the role, configuring AI behaviour, selecting questions, customising interview rules, and publishing. The original crammed everything into a single unstructured page with no progress and no way to save partial work.
Next step is creating a position involves five genuinely distinct mental modes: defining the role, configuring AI behaviour, selecting questions, customising interview rules, and publishing. The original crammed everything into a single unstructured page with no progress and no way to save partial work.
Before Redesign
Before Redesign
  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

  • Step 5 : Review & publish position.

  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

  • Step 5 : Review & publish position.

Step 5 (Launch & Publication) was the direct answer to: "How do I close a position for new submissions?" . This step actually want to introducing Draft/Public/Private visibility, expiration date with auto-close, and a maximum applicant cap, but there are no functions inside.

Iteration - two things I got wrong here

My first version opened in a full-page view without the sidebar and included significantly more fields with detailed salary breakdown, compensation specifics, extended location fields. The CEO and CTO rejected it: too many new fields, too much dev effort, sidebar removal broke the navigation mental model. I reverted to keeping the sidebar throughout and trimmed fields to essentials. Adding fields feels like adding value. It usually adds friction.
My first version opened in a full-page view without the sidebar and included significantly more fields with detailed salary breakdown, compensation specifics, extended location fields. The CEO and CTO rejected it: too many new fields, too much dev effort, sidebar removal broke the navigation mental model. I reverted to keeping the sidebar throughout and trimmed fields to essentials. Adding fields feels like adding value. It usually adds friction.
First Draft for create new position
First Draft for create new position

HastyHire New Dashboard : This is a a redesign result that keeps clean and not too much data.

After Redesign - Final Decisions
After Redesign - Final Decisions
  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

  • Step 5 : Review & publish position.

  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

  • Step 5 : Review & publish position.

First Draft for job listing page
First Draft for job listing page
Final Decision for job listing page
Final Decision for job listing page

Applicants

The densest cluster of Must Have issues. Recruiters had no visibility into who they'd reviewed, couldn't track hiring decisions, and had no question context before committing to a video.
The densest cluster of Must Have issues. Recruiters had no visibility into who they'd reviewed, couldn't track hiring decisions, and had no question context before committing to a video.
Before Redesign
Before Redesign
  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

  • Position : this page is for the list of position created.

  • Step 1 : Create position and fill the description details

  • Step 2 : Select Ai agent that will be used to evaluate candidate

  • Step 3 : Setup interview questions.

  • Step 4 : Review & customize position details.

04 - KEY DESIGN DECISIONS

The choices that weren't obvious

Most of the work was clear problem solving. These three decisions required genuine deliberation where each of it had a valid competing option I considered and rejected.

Decision 1

Wizard vs single long form for position creation

Situation

I could have kept the single page structure and just cleaned it up. Less dev work, simpler to implement. The wizard was a bigger change.

Why wizard won?

AI agent selection and question curation are different cognitive modes from filling a job description and they shouldn't share the same visual frame. More importantly, Step 5 (Launch & Publication) needed to feel consequential and separate. It's the moment the position becomes visible to candidates. Burying that decision in a long-form page would undermine its weight.

Decision 2

Question text at the list level, not just inside the video

Situation

The original put question text only inside the video player. The reasoning: questions are part of the video experience.

Why I moved it up?

A recruiter reviewing 40 applicants isn't watching videos sequentially and they're triaging. Question text at the list level is a triage tool. It lets recruiters decide which submissions to prioritise before committing to watching anything. Move context to where decisions are made, not where content is consumed.

Decision 3

How to display AI scores without over indexing on the number

Situation

The original showed "36/100" in an aggressive red badge and a single number, no interpretation.

So, How Do I Approach?

Three approaches: raw number only (false precision, decontextualised), category labels only (removes the number hiring managers need for ranking), and finally score + contextual label + colour. Three layers of the same information for three reading speeds: colour for fast scanning, number for comparison, label for human interpretation.

05 - Constraints & Tensions

Shipping fast for a team already in motion

The client was actively waiting. Dev was building new features in parallel. I was the only designer. No design reviews, no user research sessions, no comfortable discovery phase.

Azrul, on the first round of feedback

"My initial designs had too many new UI patterns. The CTO pushed back and the client needed the product usable fast. I had to find the highest impact UX improvements within what was technically feasible, not just what looked best."

What I let go

Ambitious components that didn't exist in ShadCN

User research before shipping

First-round designs flagged as too many new patterns at once

What I protected

Token based design system with non-negotiable foundation

Dark mode from day one via architecture

Every Must Have item from client's documented feedback

There was also a component debt problem mid-sprint. Some Figma components had no ShadCN counterpart. When flagged, I redesigned to use what existed except where the UX gap was significant enough to justify the new component. That negotiation happened several times and made me faster at distinguishing "design preference" from "user need."

06 - Outcomes

Shipped before deadline. Zero unresolved blockers.

6

6

Major product surfaces redesigned

Major product surfaces redesigned

2mo

2mo

From brief to production

From brief to production

0

0

Must Have items unresolved at launch

Must Have items unresolved at launch

All blockers addressed

Every Must Have from client feedback had a design solution such as WYSIWYG, candidate status, position closing, question visibility, credit clarity.

Dark mode at launch

Built into the token architecture from day one, not a separate feature. Shipped with zero additional design effort.

System extended by dev

Email and Settings built after my engagement. Its use the same tokens and components without my involvement.

No post-launch complaints

Client resumed campaigns on the redesigned product. The silence is the signal that they still enjoy all redesigned core features.

07 - Post-Launch: CEO Feedback & Landing Page v2.0

The page was live. Then the CEO sent feedback.

The landing page had been live for some time when the CEO called a short meeting. The feedback was direct and comprehensive with a detailed written guide covering every section of the page, with specific diagnosis, recommended rewrites, and visual hierarchy rules. Almost everything needed to change.
The core diagnosis: the page had strong raw ingredients but no single story. Multiple competing narratives such as "AI agent interviewer," "first interview automation," "fast and fair hiring," "smart screening" where were all present but never tied together into one coherent buyer journey. The result was a page that was informative but not persuasive.

What the CEO identified

The hero focused on "Handles Your Interview" narrower than the actual product promise. Section headers were generic or grammatically awkward. Pricing cards all used the same irrelevant boilerplate: "All the basics for starting a new business." The FAQ answered setup questions but avoided the trust and control questions HR buyers actually have. And the page repeated the same promise in slightly different words across multiple sections without ever building to a decision.
The hero focused on "Handles Your Interview" narrower than the actual product promise. Section headers were generic or grammatically awkward. Pricing cards all used the same irrelevant boilerplate: "All the basics for starting a new business." The FAQ answered setup questions but avoided the trust and control questions HR buyers actually have. And the page repeated the same promise in slightly different words across multiple sections without ever building to a decision.

What I’d What changed for every section

The redesign touched all 12 sections. The most significant changes:

Hero Section: Rewritten and decluttered copy

Priority 1

Before

"The AI Agent That Handles Your Interview", This copy is too narrow, buried the broader product value. Crowded visual with competing interface fragments, badges, and CTA buttons all fighting for attention.

After

"AI Agent Interviewer That Supercharges Recruitment", The new copy looks broader positioning, one dominant visual, three concise trust bullets below the CTA. Calm and authoritative instead of overloaded.

Adding a new section for AI Agent Customization

Priority 2

Before

There is no AI Agent section that show how users can customize their AI with all requirements needed for every candidate interview report.

After

I redesigned AI agent flow in Figma that can show how users easily create their AI agent. After redesigning completed, I show it also as the main section before features section in HastyHire landing page.

Page structure must be reordered around buyer journey

priotity 2

Before

Sections appeared in a product-logic order, not a buyer-decision order. Pain points appeared too late. Trust signals were scattered.

After

New sequence: Hero → Trust bar → Problem → Solution → AI Agent Customization → Features → Workflow → Proof → Pricing → FAQ → Final CTA. Each section serves one stage of the buyer's decision journey.

FAQ must be expanded to address real buyer concerns

priotity 2

Before

FAQ covered setup and free trial. Missed the questions HR buyers actually have around trust, control, fairness, and candidate experience.

After

Reorganised into 4 groups: Product & use case / Trust & control / Candidate experience / Pricing & billing. Added questions like "Does HastyHire make the hiring decision for me?" and "Can candidates game the AI?"

Illustrations & visuals rebuilt throughout

Full Redesign

Before

Decorative UI fragments and floating elements competed with headlines and CTAs. Screenshots didn't match the claims made in their sections.

After

Real product screens paired to each section's claim. Decorative elements removed. One dominant visual per section. Mobile-optimised with accordions, stacked cards, and swipeable pricing.

Final Approved - Post Launch V2.0 ✅

08 - Reflection

What a live product teaches you

Three months. One designer. A live product with real users. Here's what I'd do differently, what surprised me, and what I carry into every project after this.

What I'd do differently

  1. Ask which brief I'm solving before designing

The email feature taught me this. I designed full automation & trigger rules, template creation, send flows. Dev pushed back immediately: not enough time, infrastructure wasn't ready. I was designing what the feature should eventually be, not what could ship this sprint. Those are two different briefs, and I should have asked which one before opening Figma.

  1. Validate component availability before designing

Mid-sprint I discovered that some Figma components I'd designed had no ShadCN counterpart. I had to redesign them to use what already existed. This was avoidable and a quick audit of the existing component library at the start would have saved revision cycles. Design system decisions made without knowing the implementation reality create debt immediately.

What worked better than expected

  1. Building the design system for the landing page first

I expected this to slow things down. It didn't. Because the token system was proven in a live Framer environment before dashboard redesign started, every component decision I made for the dashboard had a reference point. Dark mode came for free. Dev could extend the system without me. What felt like overhead at the start became the fastest part of the project.

  1. Intense, direct communication with developers

As the only designer, I had no buffer between my decisions and implementation reality. Every conversation was direct, no intermediary, no delayed feedback loops. I expected this to be stressful. Instead it made me faster at distinguishing "design preference" from "user need," because I had to justify every decision in real time to someone who was about to build it.

Principles I carry forward

Real user frustration is the best brief

Three campaigns' worth of documented failures, not personas, not journey maps, but gave me problems that were already prioritised. Starting from real data made every decision defensible.

Constraints sharpen, not limit

The CTO's pushback on ambitious first designs forced me to separate preference from need. Every rollback has live feed, extra fields, email automation. It made the shipped product sharper.

Designing for AI output is designing for uncertainty

When the content schema is variable, design for structural containers, not content. Collapsible sections and semantic headings that work regardless of what the AI returns are now one of the most transferable things I know.

ROLE

Solo Product Designer

timeline

2 Months

timeline

3 - 4 Months

Scope

AI Assignment & Assessment Flow

Scope

AI Assignment & Assessment Flow

Collaboration

1 CTO, 1 PM, 1 Designer, 1 QA, 1 Lead Dev, and 4 Engineers

Ownership

End to end ownership design system, UX, UI, and dev handoff.

Let’s build something meaningful!

Available for freelance, collaboration, or full-time opportunities.

Or send me an email to:

azrulspace@gmail.com

Find me where I build and share

Product Segment Capabilities

Product Design

Product Thinking

AI Integrated Workflow

Design System

UI Design

Figma MCP

Framer

Webflow

Wix

Branding & Illustration

Motion

Let’s build something meaningful!

Available for freelance, collaboration, or full-time opportunities.

Or send me an email to:

azrulspace@gmail.com

Find me where I build and share

Product Segment Capabilities

Product Design

Product Thinking

AI Integrated Workflow

Design System

UI Design

Figma MCP

Framer

Webflow

Wix

Branding & Illustration

Motion

Let’s build something meaningful!

Available for freelance, collaboration, or full-time opportunities.

Or send me an email to:

azrulspace@gmail.com

Find me where I build and share

Product Segment Capabilities

Product Design

Product Thinking

AI Integrated Workflow

Design System

UI Design

Figma MCP

Framer

Webflow

Wix

Branding & Illustration

Motion

Let’s Connect

Book a call

Let’s Connect

Book a call

ON THIS PAGE

Go to top