What it keeps track of
The work a contractor actually has to account for: who is assigned, where they are, what was agreed, what was billed and what has been paid.
Projects and contracts, with the variance kept visible
A project holds a budget and the contracts beneath it. Every contract keeps three numbers apart — what was bid, what was agreed, and what it has been adjusted to — so the gap between the bid and the current figure is a number you can read rather than one you have to reconstruct.
- Contracts belong to a project and a contractor
- Bid amount and adjusted contract amount tracked separately
- Projects move between In Progress and Completed
Subcontractors onboard by invitation
You invite a subcontractor to a specific contract. They get a link that expires, and registering through it creates their company, attaches it to your contract, and puts them on the job — without anyone retyping company details that already exist.
- Separate invitations for contractors, subcontractors and professional users
- Invitation links are encrypted and expire after a configurable window
- Registering through a project invitation links the company to the contract
Timesheets that record where the clock was pressed
Crews clock in and out against a site, and each punch stores its own coordinates. Hours are tied to a place, not just a day, so a timesheet query answers where the work happened as well as how long it took.
- Latitude and longitude captured at clock-in and clock-out
- Each entry is tied to a site, a subcontractor and a worker
- Open shifts are distinguishable from closed ones
Sites on the map, not in a spreadsheet
Each contract carries its sites, with full addresses and coordinates. Reporting rolls those up by state and county, so geographic spread is something the system already knows.
- Full address plus latitude and longitude per site
- Sites can be active or stood down
- State and county distribution available as reporting
Invoices with line items and a status that means something
Subcontractors invoice against a contract, itemised, with tax held separately from the net. An invoice moves through draft, sent, approved, paid, overdue or cancelled — so "where is this money" has one answer.
- Line items with quantity, unit price and amount
- Tax amount held apart from the invoice amount
- Six explicit statuses: draft, sent, approved, paid, overdue, cancelled
Payments recorded in three dates, not one
A payment keeps the date it was requested, the date it was paid and the date it was confirmed. Those three are what make average time-to-pay and a confirmation rate computable instead of anecdotal.
- Request, payment and confirmation dates tracked separately
- Payments tie an invoice to a contract and both companies
- Average payment time and confirmation rate reported
Reporting across six dimensions
One call returns the financial, project, workforce, contract, payment and geographic picture for a period — totals, averages and rates, computed in the database rather than assembled in a browser.
- Financial: project value, outstanding and paid invoices, time to pay
- Workforce: active workers, hours in period, site utilisation
- Contracts: bid variance and adjustment rate
Four roles, and row-level rules behind them
Regular user, contractor admin, payment admin and system admin. Access is not only a menu check: what a given user can read is filtered in the query itself, by the organisations they belong to.
- Regular user, contractor admin, payment admin, system admin
- Permissions applied as query filters, per entity
- Users belong to contractor and subcontractor organisations