Internal system for a law firm
A registry of entities, projects and cases on a relational model — designed from scratch, schema to production.
A law firm needed order in its entities and cases instead of scattered spreadsheets. I built an internal system on a relational model: client and opposing party are roles in the context of a specific case, not duplicate records.
The brief
The same company is a client in one case and the opposing party in another. Kept in spreadsheets it exists twice, three times — and every copy raises the risk of an error that costs real money in law. The system had to separate entities from the roles they play.
What I did
I designed the database schema from scratch: an entity exists once, and a role (client, opposing party, others) attaches to a specific case as a relationship. Migrations and seeds keep the schema versioned and portable; the app runs on Next.js (App Router) with PostgreSQL and Prisma.
Outcome
- One entity = one record — no more duplicates and drifting data
- Roles read in the context of a case, exactly how the firm actually works
- A versioned schema with migrations: the system can grow without risking the data
Services