The problem
HACCP hazard-analysis documents were maintained by hand in Excel and Word, with the same ingredient data retyped in many product documents.
What I built
Started as a 2024 MVC app and rewritten in 2026 on .NET 10 + React: a reusable hazard library composed into per-product documents, with per-document overrides and exports that match the original form.
Key features
- Hazard library: item → hazard groups → control measures, with Q1–Q4 and CCP
- Per-product documents with document-only overrides
- Excel export in the original layout, plus A4 PDF
- Excel import shows new / unchanged / changed (field by field) before writing
- Dashboard with a severity × likelihood matrix
- Add/view/edit/delete permissions per menu
Under the hood
- One code path builds Preview, Excel and PDF; overrides are stored as patches and risk is computed from the matrix, never stored
- Re-imports keep existing IDs so overrides stay attached; control measures are de-duplicated by SHA-256 of normalised text
- PDFs render through Playwright on the installed Edge, and a test fails if any controller lacks its permission check