Skip to content
Engineering

Workplace Scientifics

In user testingFrom September 2025

Workplace Scientifics sent each inspection report to its client by email, one at a time. I designed and built a portal where every client signs in to its own reports, with the summary of each PDF pulled out automatically.

The reports page switching from a grid of report cards to a list and back

What I did

  1. Product design

    I designed the portal from the first idea through to both dashboards.

    All of it

  2. Backend

    I built the multi-tenant API and the access rules that keep each company and branch apart.

    All of it

  3. Extraction service

    I wrote the Python service that pulls the summary, findings and recommendations out of each PDF report.

    All of it

  4. Dashboards

    I built the admin and client dashboards, each with its own permissions.

    All of it

  5. Testing

    I tested it through development, and it is now in user testing.

    All of it

How it works

  1. Upload

    After a site visit, the company uploads the inspection report as a PDF.

  2. Read

    The portal pulls out the executive summary, key findings and recommendations by itself, so a client gets the gist before opening the file.

  3. File it

    The report goes to the right company and, inside it, the right branch. No other client can see it.

  4. Sign in

    Each client signs in to its own dashboard to view, filter and download its reports.

  5. Ask

    From the same place, a client can book an inspection, request a new one or ask about a report.

  6. Run it

    The company manages clients, branches, users and inspection reminders from a dashboard of its own.

At Workplace Scientifics

  1. 01Admin dashboard

    Staff upload inspection reports and manage clients, companies, branches and users. Only the admin role sees this side.

    • React 18
    • TypeScript

The platform

  1. 02API

    A multi-tenant API for report management, authentication and client administration. The .NET security layer enforces the boundary between the admin and client roles.

    • ASP.NET Core
    • REST
  2. 03Document Processor Service

    A Python microservice, called by the API over HTTP. It turns each uploaded PDF into structured data: the executive summary, key findings and recommendations.

    • Python
    • FastAPI
    • pdfplumber
  3. 04Database

    Reports, companies, branches and users, held with tenant isolation.

    • PostgreSQL

Each client, kept apart

  1. 05Company

    Each client organisation is its own tenant. Its account sees its own reports and nothing else.

  2. 06Branch

    Inside a company, each branch is isolated again. Visibility controls decide which branches a user can see.

  3. 07Client dashboard

    View, filter and download reports. Book inspections, request new ones and send clarification requests on a report.

    • React Query
    • Zustand
    • Axios
Simplified. One company with one branch is shown. Subsidiaries, user administration and the reminder schedule are left out.

Where it stands

It is built and in user testing. The company is not using it with clients yet.

It replaces a routine of emailing reports one by one with a single searchable place for each client, and gives the company one system for clients, scheduling and reports.

In 2025 the company supported over 300 businesses and completed 680 occupational hygiene assessments. Those are the company's figures, not the portal's. They are the scale it was built for.

  • 300+

    Businesses the company supported in 2025

    The company's figure, not the portal's

  • 680

    Occupational hygiene assessments the company completed in 2025

    The company's figure, not the portal's

  • 2

    Levels of tenant isolation: company and branch

  • 2

    Dashboards, admin and client, each with its own permissions

Built and in user testing. The company is not using it with clients yet.

The tenancy model covers a company's individual branches and subsidiaries within one platform, each isolated from the rest.

The extraction service returns the summary, findings and recommendations as structured data for quick client review. It is automatic extraction with pdfplumber.

What comes next

User testing comes first, then the move to full commercial use.

Built with

ASP.NET Core
The API, tenancy and access control
PostgreSQL
Reports, companies, branches and users
Python, FastAPI and pdfplumber
The Document Processor Service
React 18 and TypeScript
Both dashboards
Tailwind CSS and shadcn/ui
The interface
React Query, React Router, Zustand and Axios
Data, routing and state

In pictures

The admin dashboard: a welcome line, Upload Report and Schedule Inspection, four metric cards, the company list with three demo companies, and recent reportsThe admin dashboard with measurements laid over it: type sizes, padding, gaps, a button size, card radius and colour swatches
A noise assessment report opened at its summary tab: the extraction marked a success, and the executive summary pulled out of the PDF, with tabs for recommendations and the PDF itself
Upcoming inspections as a list of cards, each with the company, its site, a Fire Risk Assessment chip and the dateThe inspections list with measurements laid over it: type sizes, padding, gaps, chip and card sizes, and colour swatches
One demo company: its details, the branch visibility switch set to a unified view across branches, and its two branches with inspection statusThe company page with measurements laid over it: type sizes, padding, card and button sizes, radii and colour swatches
Explanation

Hi. Tell me your name and I will use it now and then as you look around. It stays on this device. I never collect it, so not even I will know.