All work
Ongoing

LakePharma DPM

Data & process management platform for a US pharmaceutical research company.

Permissions architectureAudit systemsLaravelFull-stack
LakePharma DPM
27 configurable field types
4-layer permissions model
Core dev, team of 10

The problem

Pharmaceutical research generates data that has to be structured, permissioned, and traceable at the same time. Different research programmes need different data shapes. Different staff need different visibility — sometimes down to a single field on a single record. And every change has to be answerable later, because "who changed this and when" is a question with regulatory weight rather than a debugging convenience.

Those requirements pull against each other. A rigid schema can't model new research workflows. A loose one can't be permissioned or audited coherently. The platform had to do both.

What I built

27 configurable custom field types. Each with its own behaviour and validation rules, so research teams can model new data structures without an engineering ticket.

A four-layer dynamic permissions system — profile, user, criteria, and field level. Field-level permissions over user-configurable fields is the genuinely hard case here: the permission model has to stay coherent while the schema underneath it is still changing.

A system-wide audit trail and activity logger tracking every change across the platform. This is the component that makes the system defensible under review, which means it can never be the component that gets skipped under deadline.

SSO across multiple client applications, so one identity works consistently across the product suite.

A RabbitMQ-backed notification system for tasks and to-dos, decoupling notification delivery from the request cycle so a slow downstream never blocks a user action.

Batch record processing in Node.js and MongoDB for high-volume data operations.

Beyond the code

I own code review standards for the team and ongoing production support. Working on one platform for nine years means the architectural decisions I made early are still mine to answer for now — which is the most useful feedback loop an engineer can get, and the reason I argue hard about permissions and audit design on every project since.

Stack

Next.js · Node.js · Laravel · PHP (Zend 2) · MongoDB · MySQL · RabbitMQ