travishatfield.dev/work
← Back to AI-Assisted Projects

HR Assistant: One Question Box, Four Systems That Never Synced

Status
205 tests · built June–August 2026 · running locally
Stack
Next.jsRipplingGreenhouseDeel

The question box — plain-language questions answered from live data, read-only by design.

01 — The problem

Simple questions — how many people in Canada, who starts in the next two weeks, whether a leave of absence has actually ended — lived across four systems that never synced. Anything crossing two of them meant exporting spreadsheets that were stale before the merge was finished.

02 — What it does

A plain-language question box answers from four live HR systems (Rippling, Greenhouse, Deel, Aidora) and returns a sortable, filterable table. It surfaces cross-system disagreements automatically, such as a leave case marked active in one system but ended in another, or a contractor still active after being terminated elsewhere. Every answer carries its data source and the time it was pulled.

03 — Design & technical approach

The system is read-only by construction, not by convention — there is no write method anywhere in the codebase. Questions are classified by a deterministic query engine with no network call and no model involved, so common questions answer identically every time; only unrecognized questions fall through to an LLM via a company proxy, and the app says it doesn't know rather than guessing. That split kept the common path fast and predictable while still handling open-ended questions.

04 — Outcome & impact

The most useful output turned out to be the disagreements the tool surfaces on its own: leave cases where one system says someone's out while another still shows them active, or a contractor sitting active in one system after being terminated in another. Both used to surface at quarter-end; now they take a minute to find. As of September 2026 it covers roughly 140 employees across 16 departments and 4 countries, with 205 tests.

Every screen, explained

A closer look at each part of the app, in the order you'd actually move through it.

A sourced answer — every result carries where it came from and when it was pulled.
HR dashboard — headcount, hiring, and attrition pulled live rather than exported by hand.
Employee directory — read-only records across systems that don't otherwise sync.
A cross-system disagreement surfaced automatically — the tool's most useful output.
Org chart view — reporting lines drawn from the same live source.
Compensation view — flagged confidential and handled with the same care as the underlying HR system.
EOR reconciliation — contractor records checked against a second system for drift.