Legal
Matter and deadline tracking for a small law firm
A small law firm tracks matters per client, each with deadlines, documents and time recorded against it. Deadlines that are close appear on a partner dashboard, and each matter shows billed versus unbilled time so nothing is written off by accident.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
The system must accurately surface upcoming deadlines and the billed/unbilled status of every matter to prevent missed dates and accidental write-offs.
Section 03 · Screens
Every screen, and what it is for.
- ›Partner Dashboard — A partner sees urgent deadlines and unbilled time totals. Upcoming deadlines must load instantly.
- ›Matters List — The team finds a specific matter by client or name. Filtering the list must be instant.
- ›Matter Detail — The team views all documents, deadlines, and time entries. The billed vs. unbilled summary must load instantly.
- ›Time Entry Form — A team member logs billable hours against a matter. Finding the matter to log against is instant.
- ›Client Directory — Any team member views or adds a new client. Searching for existing clients must be instant.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
User
id uuid, name text, email text, role enum('partner', 'associate')
Access · Partners can read all users; associates can read their own row.
Client
id uuid, name text, contact_info jsonb, created_at timestamptz
Access · Any authenticated user can read any client.
Matter
id uuid, client_id uuid, name text, status enum('active', 'closed', 'archived')
Access · Any authenticated user can read any matter.
Deadline
id uuid, matter_id uuid, due_date date, description text, completed_at timestamptz
Access · Users can read deadlines for any matter they can access.
TimeEntry
id uuid, matter_id uuid, user_id uuid, entry_date date, duration_minutes int, notes text, billed_at timestamptz
Access · Partners see all entries; associates see their own entries.
Document
id uuid, matter_id uuid, file_name text, storage_path text, uploaded_by_id uuid, uploaded_at timestamptz
Access · Users can read documents for any matter they can access.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
active → closed → archived
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Timezone differences cause missed deadlines if the firm operates across multiple zones.
Store all deadlines as `date` and define a single firm-wide timezone for cut-offs.
Concurrent time entries could lead to inaccurate 'unbilled time' totals on the dashboard.
Use database transactions to wrap time logging and summary calculations for data consistency.
Without versioning, replacing a document permanently deletes the old one, losing audit history.
Store each upload as a new row, never overwriting, and display only the latest.
Section 08 · Deliberately left out
What version one does not do.
- ×Automated invoice generation from time entries — adds complex integration logic. Defer until time tracking proves stable and adopted.
- ×Full-text search inside documents — requires significant indexing infrastructure. Defer until searching by filename and matter proves insufficient.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- How many existing matters and documents need to be imported before launch?
- Are there different billing rates per user, or is tracking time in minutes sufficient?
- What system holds your documents now, and does it provide an API for access?
Half of this already exists
Doc Intake
The paperwork half of this is a solved problem: documents read on arrival, validated against your rules, and a person asked only about what does not add up.
It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.