The average company runs 6.17 HR systems across one employee lifecycle. Emplora collapses that into a single employee record, wraps it in a copilot that finishes the work rather than suggesting it, and publishes the price. For the 50-500 companies that have outgrown BambooHR and can't justify Rippling.
It is short on HR systems people actually use. 82% of deployments report adoption challenges while 45% of HR leaders lose over half their week to admin, which means the category competes on time-to-value and interface quality, not on module count. Everyone already has the modules.
Plot the eight platforms that matter on depth against self-serve time-to-value and one quadrant is empty. Darwinbox has enterprise depth but needs a sales cycle. BambooHR has the ease but hits a ceiling. Nobody occupies both corners at once.
That gap has a name and a size: the 50-500 graduation gap, where companies resolve their needs by accumulating point solutions. Emplora attacks it with four wedges. One record, agents that close the loop, mobile parity, and a published all-in price.
Drawn from five personas, two of whom sign the contract and three of whom live in the product. Every story traces to a shipped module.
Parity on the table stakes is assumed. The rows that decide anything are the bottom five.
| Capability | BambooHR | Rippling | Darwinbox | Zoho | Emplora |
|---|---|---|---|---|---|
| Core HRIS & directory | ✓ | ✓ | ✓ | ✓ | ✓ |
| Integrated payroll | Add-on | ✓ | ✓ | Add-on | ✓ |
| People analytics | Basic | ✓ | ✓ | Basic | Predictive |
| Attrition risk scoring | , | , | ✓ | , | Explainable |
| Agentic task execution | , | Partial | Partial | , | Core |
| Natural-language command bar | , | , | , | , | ✓ |
| Mobile capability parity | , | , | ✓ | , | ✓ |
| Published all-in price | , | , | , | ✓ | ✓ |
| Seat floor | $250/mo | Yes | Yes | None | None |
Five decisions, each one a fork where the conventional answer was available and cheaper. Together they are the product.
org_id at the database, salary and engagement are stripped server-side before
serialisation, and one isomorphic permission matrix is imported by both the API that enforces and the
UI that hides./hr, /manager,
/me. Explicit, easy to reason about, and each one optimisable in isolation./dashboard route with three compositions. HR sees org
metrics, status and risk; a manager sees team to-dos, approvals and pulse; an employee sees their
balance, tasks and team.Navigation is organised by employee lifecycle rather than by internal department. Main, Employee Lifecycle, Administration, because that is how all five personas describe their own work. Every screen is a lens onto the same entity; changing route changes the view, never the source.
Three things arrived after this was first written. Compensation Review, which reads the salary bands and shows where a person sits against their own, so a pay conversation starts from the same number on both sides of the table. A notifications feed, because the bell in the header had been promising one for months. And a demo reset, so a visitor can change anything in the live demo without permanently breaking it for whoever opens it next.
Extracted from Figma through the MCP server
rather than transcribed by eye, and built on Untitled UI primitives. The values below are the real tokens
in globals.css, consumed through Tailwind v4's theme layer.
Accessibility baseline: body text meets WCAG AA, focus is visible on every interactive element, status is never encoded by colour alone, charts expose an accessible table equivalent, and ⌘K is reachable from anywhere with Esc closing every overlay.
An audit I ran on my own product, and the one finding that mattered more than any feature.
The question I set myself after launch was whether this would survive procurement at a company the size of Samsung or Google. The answer came back uncomfortable, and it had nothing to do with AI. Emplora was quietly showing a truncated company.
The roster was fetched whole on every page load, unpaginated. Supabase caps REST responses at 1,000 rows by default and raises no error when it does. So at 1,001 employees the product did not slow down and it did not fail. It displayed the wrong company with complete confidence: headcount short, payroll totals short, branches missing from the org chart, and nothing anywhere saying so.
I reproduced it rather than reasoning about it. A throwaway tenant with 1,200 employees, queried the way the code did: 1,200 rows in the organisation, 1,000 returned, no error raised. Every number on the dashboard is derived from that array, so every number was wrong.
Paging restored the right answer: the same tenant now returns all 1,200. It also took 3.9 seconds, and that number is its own argument. Fixing the truncation did not fix the design that wants an entire company in the browser so the client can add it up. Aggregates belong in SQL, and that is the next piece of work rather than a thing I am claiming to have finished.
The second half of the audit was less about code. Enterprise buyers do not evaluate AI first: SAML SSO and SCIM provisioning are routinely pass/fail items on the security questionnaire that gates the deal, and automatic deprovisioning gets scrutinised because manual deactivation is a compliance gap auditors ask about directly. The honest consequence is that no amount of AI gets Emplora into Samsung. SSO, SCIM, SOC 2 and data residency do. The AI is what wins the bake-off once procurement has cleared.
Three things I decided not to build, and the reasoning is the point: AI resume screening, performance prediction that ranks individuals, and anything that scores a person without showing its working. Each carries high-risk obligations under the EU AI Act, and each is what a works council vetoes. A feature you can ship is not the same as a feature you can defend in front of an HR director.
What the audit left standing is worth saying plainly, because it is the part that survives comparison with Workday or SuccessFactors. Tenant isolation here is enforced by the database rather than by application code, and compensation privacy is a column privilege rather than a hidden field. Most of the market enforces both in the application layer, where one missing clause leaks a roster. Emplora's database refuses. That is a narrow wedge, but it is a real one, and it only matters once the product can hold a real company.
Most of the P0 list has since been closed. The roster pages and checks its own row count, so a truncated read now fails loudly instead of rendering a short company. The auth endpoints are throttled, because an unthrottled login is a credential-stuffing target and nothing else. Security headers are set at the edge. The salary bands query was running as the caller and swallowing its own error, which meant a permission problem looked like an empty table: it runs as owner now and reports failure instead of quietly returning nothing. What is still open is the honest part, and it is the procurement list rather than the clever one.
Emplora is a design and engineering concept running on demo data, so these are the success metrics the product was designed against. Each with the baseline it is measured from, rather than adoption results from a customer base.
Portfolio work is usually presented as finished. This is more useful, and more honest, as a ledger.
"The research kept pointing at the same thing from different angles: this category is not short on features, it is short on products people will open. That reframed the whole project. The interesting work wasn't designing fourteen modules, it was deciding that the score has to show its factors, that scope belongs in the database, that the assistant's output has to arrive as a draft, and that the price goes on the landing page. None of those are screens. All of them are the reason the screens work. I also learned to distrust numbers that look fine: the salary-band bug returned a perfectly reasonable 50% for everyone, and it took asking why nothing was ever flagged to notice the signal had been silently deleted."