case study · 2019 · 2026

Recruitment App: a lightweight applicant tracker

A small applicant-tracking tool for recruiters: add candidates, see them as cards and filter by position, experience, availability and location. Data stays private in your browser.

role
Solo project
timeline
2019, updated 2026
stack
React, Redux, CSS, Jest
status
Live demo
01

What it does

  • Add candidates in a validated modal form with a photo, position, experience, notice period and location.
  • Combine four live filters, with a “Showing X of Y” count.
  • Candidate cards show the photo, or coloured initials when there isn't one.
  • Remove candidates with a confirmation dialog.
  • Responsive, with keyboard focus styles and screen-reader labels.
02

How it's built

  • Redux stores only the candidates and filters; the filtered list is derived by a selector, so it can't fall out of date.
  • The form and the filter bar read their options from one shared file, so they can't drift apart.
  • Saving to localStorage happens in a single store subscription that runs only when candidates change.
  • Photos are centre-cropped and shrunk to 160×160 with a canvas, so no file server is needed.
  • A reusable confirmation dialog focuses Cancel by default, so a stray Enter can't delete anyone.
03

Architecture

A static React app; all state lives in Redux and is persisted to the browser.

  1. Form & filters
  2. Redux store
  3. Selector
  4. localStorage
next projectReact Applications