Built on Y Build Go from prompt to a deployed app on your own domain — no server. Start free
BuildShipCompareThe LabAbout Start building →
ybuild / Scenarios

CRM for Law Firms

A prospective client rarely calls one firm. They call three, describe their problem to whoever picks up, and retain the first lawyer who calls back. Meanwhile the two things that can end a small firm hide in that same intake: a conflict of interest missed because the adverse party is a current client, and a statute of limitations no one docketed. Most solo and small firms run this on a legal pad, a shared inbox, and memory. A CRM built for how a firm actually intakes and manages matters, one intake queue, a real conflict search, a matter board, and a deadline docket, is what keeps the good clients in and the malpractice claims out.

The problem

What you’d build

Intake queue with a conflict gate

One place every prospective client lands, from a web form, a forwarded call note, or a walk-in, with the practice area, the matter description, and every party named. Before a matter can be accepted, the intake must pass a conflict search across all contacts and parties in open, closed, and even declined matters, with the result recorded on the intake so you have proof you checked.

Matter board with parties

A drag-to-move board with your real stages, New Intake, Consult, Retained, Active, Discovery, Closed, where each card is a matter linked to a client contact and to every other party, each with a role. One matter can list a client, an adverse party, co-counsel, and a witness, so the record actually reflects who is on which side.

Deadline docket and task queue

A docket that surfaces statute-of-limitations dates, court deadlines, and filing dates with lead-time reminders, plus a daily task queue tied to matters and contacts. The soonest hard deadline is always the loudest thing on screen, so nothing critical slips between an accepted matter and the courthouse.

The data model

contacts
id, full_name, aliases, entity_type (individual/organization), email, phone, address, notes, created_at
intakes
id, contact_id, source (referral/web/phone/walk_in), practice_area, description, status (new/consult/conflict_pending/cleared/accepted/declined), conflict_checked_at, conflict_result, assigned_attorney_id, created_at
matters
id, matter_number, matter_name, client_contact_id, practice_area, stage, status (prospect/open/closed), responsible_attorney_id, opened_at, closed_at
parties
id, matter_id, contact_id, role (client/adverse/co_counsel/witness/related), conflict_relevant, created_at
deadlines
id, matter_id, title, type (sol/court/filing/internal), due_date, reminder_days, priority, status (open/done), responsible_id

A day in the system

  1. 8:40am: an overnight web intake and two referral calls are waiting in the queue. Each becomes an intake record with the source tagged, the practice area set, and the matter description captured while it is fresh, so no prospective client is left in voicemail limbo.
  2. Before booking a consult, you run the conflict search on the prospective client and every party they named. The system matches on full names and aliases across all contacts and parties, including closed matters and prior declined intakes, not just current clients.
  3. A hit comes back: the adverse party in this new dispute is a contact your firm represents on an unrelated matter. The intake flips to conflict_pending and routes to the responsible attorney to decline or pursue a written waiver, and the result is stamped on the record.
  4. A clean intake clears. You schedule the consultation, log it as an activity, and when the client retains you the intake converts to a matter, the client contact is linked, and the adverse party is added as a party with its role.
  5. You enter the statute-of-limitations date on the new matter. The docket immediately creates a SOL deadline with lead-time reminders, so the single date that can end the case is now a hard, visible obligation instead of a note.
  6. Midday: the matter board shows what moved. You drag a case from Retained to Active, another from Active to Discovery, and each card carries its client, parties, and open deadlines with it.
  7. The docket surfaces a court filing due in nine days and a SOL landing next month. You assign the filing task to an associate and confirm the reminder window is wide enough to actually act on.
  8. End of day: the dashboard shows intakes still awaiting a conflict check, deadlines due this week, and prospective clients not yet called back, so you leave knowing what is unresolved rather than hoping it is fine.

Where AI trips up

✓ Build first
  • An intake queue that captures every prospective client with source, practice area, description, and all parties, and blocks accepting a matter until a conflict search has run and been recorded.
  • A conflict search across all contacts and parties, open, closed, and declined, matching on names and aliases, with the result stamped on each intake as your proof you checked.
  • A matter board linked to a client and its parties, plus a deadline docket that flags statute-of-limitations and court dates with lead-time reminders.
— Skip for now
  • Trust accounting and IOLTA reconciliation, and client billing or invoicing: money is a separate, heavily regulated system, so keep it out of v1 rather than half-building it.
  • Document assembly, e-signature engagement letters, and court e-filing integrations: upload or link documents for now and automate the paperwork later.
  • Full time-tracking and billable-hour analytics: log activities on matters in v1 and add billing reporting once the intake and docket core is proven.

FAQ

Does it actually run a conflict check, or just store names?

It runs a real search. When you work an intake, it matches the prospective client and every named party against all contacts and parties across open, closed, and declined matters, on full names and aliases, then records the result. It flags potential conflicts for an attorney to clear or waive rather than making the ethical call for you, but it gives you the search and the paper trail Rule 1.7 assumes you performed.

Can it handle a matter where the same person is on the other side?

Yes, and this is the point of modeling parties separately. A contact exists once, and each matter links to it through a party record with a role, so one person can be your client in one matter and the adverse party in another without the two collapsing into a single confused record.

Will it stop me from missing a statute of limitations?

It is a system of record, not a substitute for docketing discipline, but it makes the date impossible to lose. SOL and court deadlines sit on a docket with lead-time reminders and the soonest hard date surfaced first, so the obligation is visible every day rather than buried in a calendar someone forgot to check.

Is client data kept confidential and secure?

Your CRM runs hosted on ybuild and served on your own domain, backed by a managed database and gated behind managed auth with per-user access, so privileged matter details stay in one controlled system instead of a shared inbox or an open spreadsheet.

Can I bring my existing client and matter list over?

Yes. Describe the columns in your current spreadsheet or export, names, matters, parties, practice area, key dates, and the app maps them into the contacts, matters, and parties tables so your conflict search covers your real history from day one, not a blank database.

Sources

Build this for your business

Describe it, go live on your own domain in one pass — hosted, full-stack, no server. Free to start.

Start building free →
Related on ybuild
SMB back-officeagencies & freelancers Managed DatabaseManaged AuthCustom Domain Hosting Database SchemaAuthenticationFull-Stack App
Related scenarios
Build an Appointment App for Your SpaBuild a Booking App for a Dental ClinicBuild a Booking App for Your SalonBooking App for Tutors: Recurring Lessons, Prepaid Hours & No-Show ControlBookkeeping App for Small BusinessCRM for Real Estate Agents
Build your own app
Free · no card
Start free →