Update 06.03.2026 — Contracts

So, I’ve already spent 12 hours working on the new section and realize it’s only the beginning.

  • The Contracts section has been added;
  • Each contract includes the basic fields: date, number, amount, term;
  • Contracts are linked to projects and counterparties (the parties);
  • For each party you can separately specify signatures and legal grounds for cooperation (charter, registration certificates, etc.);
  • Through counterparties contracts are linked to invoices. When creating a contract, a snapshot of the invoice is created and stored as a separate entity so later edits to the invoice won’t affect old contracts;
  • You can set a planned term for the contract. The system already shows how much time remains until the planned end date or highlights the amount of overdue time;
  • Contracts can be linked to files (for example, to upload originals);
  • Contracts have many statuses — and I’ve added functionality to view the history of contract status changes. This will be useful as automation improves.

Next I will work on linking contracts with other NormCRM entities — tasks, meetings, and so on. This will let you see, for example, how many hours were worked under a given contract and what the resulting hourly cost is if the contract was priced as a fixed-price (turnkey) job.

After that — generating derived documents in one click: issuing invoices and acceptance certificates.

During the process I came up with a couple of new ideas related to recording agreements even without formal contracts, as well as a unified end-to-end reminder system.

I’ve also recently worked on small fixes and improvements:

  • Not all menu items fit in the horizontal navigation anymore, so I added a "More" item that hides what doesn’t fit. I think this is a temporary solution and later I will switch to a vertical navigation menu;
  • I liked how the "More" menu looks, so I styled all other dropdown menus in NormCRM the same way;
  • Added row highlighting in tables on hover for desktops;
  • Found several places where English translations didn't apply because they were buried deep in JS or PY files. Fixed them;
  • Made modal windows with search fields (filters) stick to the top edge when their height changes instead of jumping around the screen.

Теги: Updates