The research, personas and flows behind both Emplora case studies, the web platform and the Android app. One discovery pass produced one product on two surfaces; the case studies cover the decisions, this is the work underneath them.
Five roles that appear in every 50-500 person company, synthesised from review corpora and industry surveys. Two of them buy; all five live with the result.
Six pain points, grouped from review corpora and industry surveys. They are not independent, each one compounds the next.
The gap that falls out of this: the upper-right quadrant of depth versus self-serve is empty. Darwinbox has the depth but needs a sales cycle; BambooHR has the ease but hits a ceiling around a hundred people. Nobody occupies both, which is the 50-500 "graduation gap", and Emplora's beachhead.
The flow the whole product exists to make possible: a 60-day warning that ends in a specific action assigned to a specific person, not a chart.
Design and build were the same loop on this project, so the toolkit spans both.
Five phases, each producing a document the next one is accountable to. The point of writing them down was that later decisions could be checked against earlier reasoning instead of relitigated.
Eight-platform teardown, BambooHR, Rippling, Deel, Zoho People, Darwinbox, Keka, Gusto, Workday, scored on price, real strength and where each one breaks. Positioned the depth/self-serve quadrant and found the empty corner.
Deliverable: market sizing, feature parity matrix, six ranked pain points, four strategic wedges.
Empathy maps for the three daily roles, five field observations, a problem statement, five point-of-view statements, and a How-Might-We set grouped by consolidation, agency, adoption, mobile and trust. Concepts scored on impact × feasibility.
Deliverable: five personas with feature traceability, prioritisation matrix, seven success metrics with baselines and targets.
Organised by employee lifecycle rather than by internal department, under three rules: every screen is a view onto one record; depth capped at three levels for zero-recall; and every node reachable by typing, so hierarchy never becomes a memory test.
Deliverable: sitemap, desktop/tablet/mobile nav models, RBAC matrix, URL scheme, content model, five key flows.
Tokens pulled from Figma through the MCP server rather than transcribed by hand. Colour, type, spacing, radii and the Untitled UI skeuomorphic button ring, which is what stops the buttons reading as flat. Motion specified as a named vocabulary so no component invents its own easing.
Deliverable: token spec, component inventory (primitives, composites, shell), motion spec, accessibility baseline: AA body text, 44px targets, reduced-motion honoured globally.
One Next.js codebase, statically exported and wrapped in Capacitor for Android. Authorisation enforced by Postgres RLS rather than application code, so a query the app never wrote still cannot leak another tenant's roster.
Deliverable: live web app, Android build, 18 RLS checks signed in as real users, 58 end-to-end API checks, deployment runbook.
Asked whether the product would survive procurement at Samsung or Google scale and answered it against the repository rather than from memory. The finding that mattered was not a missing feature: the roster silently truncated at 1,000 rows, so past that point the product displayed a smaller company than the one that existed, with no error anywhere. Reproduced on a throwaway tenant of 1,200 employees before anything was changed.
Deliverable: readiness audit with measured payloads, a prioritised fix list, paging with truncation detection, throttled auth endpoints, and a written decision not to build AI resume screening or individual performance prediction.