Recruitment · B2B SaaS · End-to-End Product Design

Clever Recruit —
High-Density Pipeline for 200+ Candidates

End-to-end product design for a B2B recruitment platform — from user research and information architecture through to high-fidelity Figma prototypes, a scalable design system, and front-end implementation in React. This project demonstrates my complete design process and ability to bridge design and development.

Role
Lead Product Designer
Scope
Research → Design → Code
Year
2026
Platform
Full-Stack Web App
Stack
React · Mantine · Node.js · PostgreSQL

Density as a
design value

CleverRecruit is a B2B recruitment platform I took from problem definition to shipped product. The design challenge: how do you give recruiters the information density they need (200+ candidates scannable at a glance) while keeping the interface learnable and accessible for occasional users like hiring managers?

I led the entire design process — user research, persona development, information architecture, wireframing, component-based design system in Figma, interaction design, usability testing, and responsive cross-platform strategy. Then I validated the design by building the complete front-end in React, proving every interaction, state, and edge case works in production.

Delivered screens: Dashboard · Candidates (full CRUD + filtering) · Jobs (lifecycle management) · Companies · Team · Calendar/Interviews · Reports/Analytics · Settings (profile, appearance, notifications) · Authentication · Dark mode · Global search (⌘K)

UX Research
User interviews · Competitive audit · Persona creation · Jobs-to-be-done mapping
Information Architecture
Screen mapping · User flows · Role-based IA · Navigation systems
UI Design & Systems
Figma design system · Component library · Design tokens · Responsive breakpoints
Interaction Design
Micro-interactions · State management · Dark/light modes · Keyboard shortcuts
Cross-Platform
Desktop-first density · Mobile companion · Responsive layouts · Touch targets
Front-End Development
React · TypeScript · Mantine UI · Design-to-code implementation

Designed for
two users

Petra H.
Senior Recruiter · Daily power user
Goals
  • See all 200+ candidates across 15 roles at once
  • Move candidates through pipeline with minimal clicks
  • Get quick decisions from hiring managers without chasing them
Pain Points
  • Loses track of candidates across email threads
  • No single source of truth for pipeline status
  • Hiring managers respond slowly without structured prompts
Marko L.
Hiring Manager · Approver
Goals
  • Review shortlisted candidates quickly on mobile
  • Give structured feedback without navigating a complex system
  • Make hiring decisions without leaving the tool
Pain Points
  • Gets unstructured CV attachments via email with no context
  • No clarity on why a candidate was shortlisted
  • Mobile experience on most ATS tools is practically unusable

Research
findings

Finding / InsightDesign Response
Recruiters need to scan 20+ candidates at once — density is a feature, not a problemTable view as default: sortable columns, status colour-coding, bulk actions. Whitespace is a liability for power users.
Hiring managers primarily use the system for approvals, not pipeline managementMobile companion designed specifically for the approval use case — not a shrunken desktop.
Status is the primary organiser in every recruiter's mental modelStatus as the dominant visual element — colour-coded, always visible, sortable by default.
Bulk operations are essential for recruiters processing high daily volumesBulk select with checkbox column; bulk action toolbar appears on any selection.
Saved filters are essential for recruiters managing multiple simultaneous rolesPersistent filters at session level; named filter presets for saved common views.

From research
to shipped product

This project followed a structured design thinking process — each phase produced concrete deliverables that informed the next.

Discover
Research
• User interviews with recruiters
• ATS competitive audit (5 tools)
• Jobs-to-be-done mapping
• Pain point synthesis
Define
IA & Strategy
• Information architecture
• Personas & user stories
• Role-based navigation strategy
• Cross-platform scope definition
Design
Wireframes & UI
• Low-fi wireframes (desktop + mobile)
• Design system & component library
• High-fidelity mockups
• Interaction specifications
Validate
Test & Iterate
• Usability testing (recruiter walkthrough)
• Hiring manager mobile test
• Interaction refinement
• Accessibility review
Deliver
Build & Ship
• React front-end implementation
• Design-to-code validation
• Edge case resolution
• Production deployment

Every screen
mapped

Screen / StatePurposeKey elements & implementation
DashboardPipeline overview & metricsStat cards (candidates, jobs, interviews, hires) · Recent activity feed · Clickable navigation to detail pages
CandidatesFull candidate database with CRUDSortable table with colour-coded status · Create/Edit/Delete modals · Filter by stage · Detail drawer with timeline · Search
JobsActive role managementJob table with company logos · Create/Edit/Delete · Close/Reopen actions · Detail drawer with candidate count
CompaniesCompany profiles & managementCard grid with live logos (DeBounce API) · Add/Edit/Delete · Detail drawer · Open positions count
TeamTeam member directoryMember cards · Clickable detail drawer with stats · Managed candidates list · Role-based display
Calendar / InterviewsInterview schedulingMonth calendar view · Navigation arrows · Today button · Schedule interview modal · Event indicators
Reports / AnalyticsPipeline analyticsTime period selector · Pipeline funnel · Source effectiveness · Time-to-hire metrics · CSV export
SettingsUser & app configurationProfile management with avatar upload · Notification preferences · Appearance (light/dark) · Password change with validation
Login / AuthAuthentication & access controlJWT-based auth · Protected routes · UserContext for global state · Persistent sessions
App ShellGlobal layout & navigationCollapsible sidebar · Global search (⌘K) · Notifications panel · Light/Dark mode toggle · Responsive mobile drawer

Step-by-step
journeys

Recruiter — processing a new applicant
Applicant receivedAdd to CandidatesAssign to roleStage: AppliedReview CVStage: ScreeningSchedule callShortlist or RejectNotify hiring manager
Hiring manager — mobile approval flow
Email notificationOpen mobile appView shortlisted candidatesReview each profileAdd feedback noteApprove / DeclineRecruiter notifiedNext stage triggered
End-to-end pipeline
Job createdCandidates sourcedScreening stageInterview stageAssessment stageOffer stageHiredJob closedReport generated

Every choice
justified

Recruiters and hiring managers evaluate design thinking — not just visual output. Here's how I justified each core design decision with evidence, and what I deliberately rejected.

Decision MadeWhy — RationaleAlternative Rejected
Table view as defaultRecruiters with 200+ candidates need density. A table shows 20+ rows simultaneously with sortable columns. Whitespace is a liability for power users.Kanban as default — available as a per-job view for hiring managers, but too sparse for the master candidate list.
Status colour-codingStage must be readable scanning 50 rows in 0.5 seconds. Colour achieves this; text labels alone require reading time.Text-only status labels — tested slower for scan-and-identify tasks in competitive audit.
Mobile as approval toolFull desktop parity on mobile compresses a dense B2B tool into unusability. Different users, different jobs, different designs.Responsive desktop — tested and rejected; table-based workflows do not compress to mobile without losing core value.
Persistent filtersRecruiters who filter by role or stage need that filter to persist. Resetting on every page load adds repetitive friction for daily users.Reset-on-navigate — standard pattern but hostile to power users who filter once and work within that view all day.
Bulk actionsRecruiters process candidates in batches after screening calls. One-at-a-time stage changes for 15 candidates is 15× the work.Individual actions only — simpler to build but fails the primary use case of batch processing.

Results that
matter

< 3 clicksFrom dashboard to any pipeline action — minimal friction for daily power users
200+ rowsScannable at a glance with colour-coded status — density without cognitive overload
2 platformsDesktop for recruiters (density) · Mobile for hiring managers (approvals) — different user, different design
Design system delivered
50+ reusable Figma components with variants, tokens, and responsive behaviour — documented for developer handoff
Design validated in code
Built the complete front-end to prove every interaction, state, and edge case works — 10 production-ready screens in React

Screen-level design

Desktop screens

Hiring manager experience

The mobile experience focuses on the hiring manager approval loop — review shortlisted candidates, add feedback, and approve or decline on the go. Tap through the live prototype below.

Interactive Prototype — Scroll & tap to explore

Swipe and tap to explore the mobile candidate review flow · Open in new tab

Interactive
walkthrough

Explore the live desktop application below — navigate through the dashboard, candidates, jobs, and more to experience the full recruitment workflow. For the hiring manager mobile flow, see the interactive prototype in the Mobile section above.

Tap the menu to navigate on mobile · Open in new tab

From design
to code

LayerTechnologyWhy chosen
FrontendReact 18 · Vite · TypeScriptComponent-based architecture matches the design system; Vite for fast development iteration
UI LibraryMantine v7Accessible components, built-in dark mode, form handling, and notification system — minimal custom CSS needed
IconsTabler IconsConsistent stroke-based icon set; native Mantine integration
BackendNode.js · Express · TypeScriptSame language as frontend; Express for lightweight RESTful API
DatabasePostgreSQL · Prisma ORMType-safe database access; auto-generated migrations; relational data model suits recruitment pipelines
AuthJWT · bcryptjsStateless authentication; protected routes via React Context
StateTanStack Query · React ContextServer state caching with TanStack; global user/theme state via Context API

Brand system

Colour Palette
Primary
Blue 0
#e7f5ff
Blue 2
#a5d8ff
Blue 4
#4dabf7
Blue 6
#228be6
Blue 8
#1971c2
Blue 9
#1864ab
Secondary
Gray 0
#f8f9fa
Gray 3
#dee2e6
Gray 6
#868e96
Gray 7
#495057
Gray 8
#343a40
Gray 9
#212529
Success
Teal 0
#e6fcf5
Teal 3
#63e6be
Teal 6
#12b886
Teal 9
#087f5b
Warning
Yellow 0
#fff9db
Yellow 4
#ffd43b
Yellow 6
#fab005
Yellow 9
#e67700
Danger
Red 0
#fff5f5
Red 4
#ff8787
Red 6
#fa5252
Red 9
#c92a2a
Typography — Roboto
Light
ABCDEFGHIJK LMNOPQRSTU VWXYZ
Regular
ABCDEFGHIJK LMNOPQRSTU VWXYZ
Medium
ABCDEFGHIJK LMNOPQRSTU VWXYZ
Semi Bold
ABCDEFGHIJK LMNOPQRSTU VWXYZ
Bold
ABCDEFGHIJK LMNOPQRSTU VWXYZ
Iconography — Lucide
Candidates
Jobs
Interviews
Search
Alerts
Filters
Reports
Settings
Border Radius
0px — Tables
4px — Badges
8px — Cards
12px — Panels
50% — Avatars
Spacing Scale
8px
12px
16px
24px
32px
48px

What this project demonstrates

This project shows my ability to own a product end-to-end: defining the problem through user research, structuring information architecture for complex data, designing scalable component systems in Figma, making deliberate interaction design decisions backed by rationale, and validating designs by building them. Every design decision on this page is justified — not decorative.

View source on GitHub

Zalex — Enterprise Self-Service Portal Reducing 5-Day Process to Same-Day
Next Project
Zalex
Replacing a 5-Day HR Process with Same-Day Self-Service