AI candidate & employee assessment module
A self-contained assessment loop: the candidate takes the test, the admin sees role, level, scores, trends and a kaizen verdict — on one structured dataset.
Context
Candidate testing in most organisations lives in a spreadsheet: inconsistent scoring, no history, no way to compare this hire against the last one. Internal employee evaluation has exactly the same gap — periodic, subjective, and unrecorded.
The module turns assessment into a proper contour: a candidate-facing test and an admin-facing review, operating on shared, structured data instead of ad-hoc files.
Approach
Two surfaces, one dataset. The candidate takes the test in a React/Vite front end; every submission lands in Supabase through an Express service hosted on Railway. The administrator then works with a complete result record — seven dimensions per candidate: role, level, scores, trends, the prompts used in the evaluation, a kaizen verdict and current status.
Recording the prompts alongside the scores makes every AI-assisted evaluation auditable: the admin sees not just the verdict but the exact instructions that produced it.
Architecture
The stack is deliberately thin: a React/Vite single-page app for the candidate, an Express API as the only write path, Supabase Postgres as the store, Railway as the runtime. No background workers, no queue — the assessment flow is synchronous and simple to reason about.
The defining decision is the isolated database schema. Assessment data never mixes with other product tables: the module can be deployed next to an existing system — a CRM, a team-ops platform, an HR cabinet — and share the same Supabase project without entangling migrations or permissions.
Key engineering details
Scores are stored as structured records rather than free text, which is what makes trends possible: the admin view charts a candidate's results over repeated assessments and compares candidates on identical axes. The kaizen verdict is a first-class field — a continuous-improvement judgement per candidate, not a comment buried in notes.
Candidate status is modelled explicitly in the schema, so the pipeline stage of every person — invited, tested, reviewed, decided — is a queryable fact rather than tribal knowledge.
Outcome and what shipped
The result is a working application package: a deployed candidate test, an admin review interface covering all seven result dimensions, and an isolated schema that plugs alongside other systems cleanly. It serves three uses out of the box — candidate testing, internal employee evaluation, and the assessment core of a digital HR cabinet.
The extension path is defined: role-specific test banks, benchmarking scores against actual hiring outcomes, and integration into a broader HR contour.
What we built
Candidate test
A React/Vite front end for the candidate to take the assessment.
Admin review
Role, level, scores, trends, prompts, kaizen verdict and status in one admin view.
Isolated schema
Assessment data kept in a separate Supabase schema, cleanly decoupled.
Trend tracking
Score trends tracked across candidates over time.