Client Work · Healthcare / Compliance
CorrectTrack
Health & safety incident, hazard, and audit tracking
correcttrack.com →68
domain entities
40
schema migrations
3
shipped languages
.NET 10
current runtime
The Problem
Safety and compliance work was living in spreadsheets, email threads, and paper inspection forms. Nobody could answer a regulator's question (what was the hazard, who was assigned, when was it closed, what evidence exists) without reconstructing it by hand from several sources. Reporting periods meant days of manual collation, and the answer was only as good as whoever assembled it.
The Approach
- 1
Model the regulatory workflow properly rather than digitizing the paper form. Hazards, controls, risk sources, likelihood and severity scoring, audit checklists, and corrective tasks are first-class entities with their own history, not free-text fields on a record.
- 2
Make every consequential change reconstructable. Hazard and control changes write to dedicated audit tables, and administrator impersonation is itself audited, so a support session can never be mistaken for the customer's own action.
- 3
Let each organization shape the system without a code change. Custom columns, saved queries, configurable dashboards, and per-tenant email templates are data, so a new customer with a different regulatory regime is a configuration exercise.
- 4
Treat the grid as a server-side concern. Filtering, sorting, and paging happen in the database against tenant-scoped queries, so the task and risk views stay fast as history accumulates instead of degrading with the third year of data.
What It Does
- Hazard register with risk scoring: likelihood and severity matrices, risk sources, and hazard controls with full change history
- Audit checklists with per-run history, so an inspection performed twice produces two independently reviewable records
- Corrective task management with recurrence, relationships between tasks, subscriptions, and status-change notifications
- Per-organization custom columns and saved queries, defined by the customer rather than requested as a feature
- Configurable dashboards built from widgets, charted with live compliance metrics
- Document and evidence attachment against hazards, tasks, and resources, stored in Azure Blob Storage
- Full localization in English, French, and Russian: ICU MessageFormat, database-backed entity translation, and per-user locale preference
- Source-control traceability: Git, Mercurial, and Subversion revisions link to the tasks they resolve, so a code change ties back to the safety finding that prompted it
- Administrator impersonation for support, recorded to a dedicated audit trail
Engineering Decisions
The choices worth defending in a technical conversation, and why they were made.
Multi-tenant from the first migration
Tenant isolation is enforced at the data-access layer rather than remembered at each call site, and tenant provisioning is declarative. Retrofitting isolation into a single-tenant schema is one of the most expensive mistakes available in this class of system, so it was never single-tenant.
Localization that survives contact with real grammar
ICU MessageFormat on both sides of the wire, a custom JSON string localizer on the server, and entity-level translation for customer-defined data. Pluralization and gendered agreement in French and Russian do not work with naive key/value string tables, so they were not used.
Assisted hazard analysis
An OpenAI-backed analysis pass proposes hazard classifications and controls from an incident description. The results persist as a suggestion attached to the hazard, reviewable and overridable. The model accelerates the safety officer's judgment; it does not replace it in the record.
Server-side grids, deliberately
An architecture decision record covers this specifically: task and risk grids page, filter, and sort in SQL. Client-side grids are pleasant for a demo dataset and unusable at the volume a real compliance history reaches.
The Stack
Backend
Frontend
Security & identity
Platform
Want something like this built?
Let's talk about what you're building and how we can help.