Home/Case Studies/Nexora (in-house product)
Enterprise Software · 2026

The HR, CRM, Contracts and Finance Platform Nexora Runs Itself

Nexora designed, built and operates one platform for HR, CRM, contracts and finance, including a payroll and tax engine that handles seven Vietnamese contract types.

Nexora (in-house product)

The HR, CRM, Contracts and Finance Platform Nexora Runs Itself

Client
Nexora (in-house product)
Industry
Enterprise Software
Engagement
In-house, live
Team

Results

6
Business modules on one platform
7
Employment contract types in the payroll engine
11
Background jobs, all idempotent
5
Next.js frontend apps

A Product We Run Ourselves

Most claims about building enterprise software are hard to check. This one is not. Nexora is the product owner of its own management platform: it designed it, built it and operates it, and the company runs its real HR, contracts, sales and finance on it. It is also the one system Nexora can open completely, with a live demo, a source code walkthrough and technical questions answered on the spot. The hardest part of the build was the payroll and tax engine, because the rules are dense, the law is specific and one wrong unit of currency is a real error.

What We Built

The platform has six modules on a shared database and a shared permission model. It is in production and developed continuously in versioned releases.

  • HRMS: employees, attendance, leave, worklogs, certificates and payroll
  • CLM: contract lifecycle management with renewal alerts
  • CRM: pipeline stages and ownership-scoped customer data
  • Finance: commissions, payments, cash ledger and reporting
  • Executive Dashboard with real-time updates
  • System Settings
Enterprise Software illustration
Six Modules, One Database
Six modules share one database and one permission model, in production and released in versions.

Architecture

The backend is ASP.NET Core 9 in four Clean Architecture layers, with dependencies pointing one way and checked at review. Six modules share one database context and one schema, so letting an inner layer know about an outer one would make splitting a module off later impossible. Five Next.js 16 apps sit in front, each with its own API route layer acting as a backend-for-frontend proxy. Tokens live in httpOnly cookies that client JavaScript cannot read, and middleware blocks routes by role before a page renders.

Access Control

Seven roles exist, and permissions are not flat by role. They are enforced at three levels: the route in the frontend, the endpoint in the backend and the individual data row. A sales user sees their own records, a team lead sees the team’s, and executives see all. Two security decisions are worth naming. The system returns 404 instead of 403 for records outside a user’s scope, because a 403 confirms the record exists and lets someone enumerate customers by scanning IDs. And when an admin deactivates an employee, any unexpired token stops working on the next request, since the employee’s status is re-read from the database each time and all refresh tokens and sessions are revoked.

Three Levels of Access Control
Permissions are enforced at the route, the endpoint and the individual data row.

Payroll and Accounting Logic

The business rules are where this platform earns its place in a portfolio, because dense rules cannot be built quickly and left. The payroll engine handles seven contract types, from probation to contractor service agreements, each with its own personal income tax, social insurance and exemption treatment under 2026 rules. Commission enters the tax base but not the insurance base. Commissions are tiered, adjusted once real costs are final, split across payment milestones and clawed back within 60 days if conditions lapse.

  • One payout path: internal commissions approved in Finance are paid only through payroll, inside one transaction at payroll close, so a double payment is structurally impossible
  • Two accounting bases in parallel: the profit and loss statement is accrual-based, while cash flow follows when money actually moved
  • An append-only cash ledger corrected by reversal entries, with atomic two-leg VND and USD transfers
  • Period close gates: accountants may close a period, only admins or the CEO may reopen it
  • A time-limited, off-by-default backfill mode for late timesheets, with a visible warning banner

Operations and Deployment

Eleven background jobs run on timers, each in its own dependency scope and each idempotent. They cover leave quotas, certificate expiry, contract renewal alerts, attendance sync retries and probation conversion. Attendance can be logged through a chat slash command that reaches the same check-in logic through an authenticated webhook. The stack deploys with Docker Compose: one API, five frontends and PostgreSQL, with non-root images and health checks. The JWT secret is validated at startup, so a weak key stops the app from booting. Engineering rules are firm. Main is production, merging to it needs a human approval each time, and any database change is announced, approved, backed up and verified afterwards.

Results

Nexora runs its own people, contracts, pipeline and money on this platform in production, with continuous releases. It supports a source-level walkthrough: how Clean Architecture is enforced, how authorization works and why the payroll rules are shaped the way they are. For a buyer, that means the engineering described in the other case studies can be checked instead of taken on trust.

ASP.NET Core 9PostgreSQL 16Next.js 16React 19TypeScriptSignalRDocker Compose
← All case studies

Got a similar project?

Tell us about it. First consultation is free.

Book a call