Skip to case study

Full Stack Application Original · v2 · v3

ERL AssetHub

AssetHub helps equipment managers see who holds an asset, where it is, and what happened to it. Workspace permissions connect checkout, returns, maintenance, audits, and retirement with retained history.

Scope every workspace operation. Organization membership is checked on server requests, and tenant-specific relationships constrain records. Reads and writes use workspace scope rather than relying on client-side filtering. Related source

JavaScriptReactNode.jsExpressPrismaPostgreSQLViteVercelCodex

Opens workspace access. The public isolated-demo credentials reach a populated dashboard in the October 21, 2026 check. The gallery remains the published capture set.

Version history

How the project evolved.

Contribution and assistance by version.

v3

AI-assisted redesign, development, and deployment, with user research informing features. Published gallery captures are not assigned an unverified version.

View this version

System shape

How the pieces connect.

Workspace membership and role checks happen on the server before tenant-scoped records are read or changed.

Workspace request path

  1. React client
  2. Express API + membership checks
  3. Prisma
  4. PostgreSQL + activity history

Roles and scope

Who can do what.

Authentication identifies the user; an active membership is checked for the selected organization on protected requests. Choosing an organization alone does not grant access.

OWNER
Manages organization settings and people.
MANAGER
Manages inventory, locations, categories, maintenance, and audits.
MEMBER
Views workspace assets and reports issues.

Product flow

What it supports

  1. Staff with inventory permissions add equipment with its location and identifying details.
  2. A checkout records the custodian and expected return.
  3. Returned equipment, location changes, and maintenance remain in its history.
  4. Location audits compare a fixed snapshot and reject stale updates.
  5. Retired assets remain recorded rather than disappearing from the workspace.

Engineering choices

Further decisions

Protect concurrent custody changes

A database constraint allows only one open checkout per asset. Asset transitions and activity history are committed together. Conflicting attempts need an explicit response instead of assigning two custodians.

Related source

Preserve history through the lifecycle

Assets retire instead of being deleted. Version checks reject stale audit updates so a saved audit does not silently overwrite newer state. Retaining retired records uses storage in exchange for keeping the asset's context.

Selected source

Follow the claims into code.

Focused implementation and test links for technical review.

Published verification · October 7, 2026

Verification and limits

The published record includes tenant and permission checks, concurrent checkout, return and maintenance transitions, versioned audits, isolated demo workspaces, browser checks, and deployment verification. Its fixtures are synthetic; the record does not authenticate as an original user.

On October 8, the independent public check confirmed the sign-in page and health response only; no authenticated hosted session was created. The gallery uses genuine screenshots published in the project repository.

  • AssetHub is an educational portfolio project; no customer adoption or business outcome is claimed.
  • Invitations are copyable links; the application does not send email.
Open verification record