Workplace Scientifics
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.

What I did
Product design
I designed the portal from the first idea through to both dashboards.
All of it
Backend
I built the multi-tenant API and the access rules that keep each company and branch apart.
All of it
Extraction service
I wrote the Python service that pulls the summary, findings and recommendations out of each PDF report.
All of it
Dashboards
I built the admin and client dashboards, each with its own permissions.
All of it
Testing
I tested it through development, and it is now in user testing.
All of it
How it works
Upload
After a site visit, the company uploads the inspection report as a PDF.
Read
The portal pulls out the executive summary, key findings and recommendations by itself, so a client gets the gist before opening the file.
File it
The report goes to the right company and, inside it, the right branch. No other client can see it.
Sign in
Each client signs in to its own dashboard to view, filter and download its reports.
Ask
From the same place, a client can book an inspection, request a new one or ask about a report.
Run it
The company manages clients, branches, users and inspection reminders from a dashboard of its own.
At Workplace Scientifics
01Admin dashboard
Staff upload inspection reports and manage clients, companies, branches and users. Only the admin role sees this side.
- React 18
- TypeScript
REST
The platform
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
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
04Database
Reports, companies, branches and users, held with tenant isolation.
- PostgreSQL
Scoped to company, then branch
Each client, kept apart
05Company
Each client organisation is its own tenant. Its account sees its own reports and nothing else.
06Branch
Inside a company, each branch is isolated again. Visibility controls decide which branches a user can see.
07Client dashboard
View, filter and download reports. Book inspections, request new ones and send clarification requests on a report.
- React Query
- Zustand
- Axios
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






