DashForge
← All work

Roofing

RoofWorks

From website enquiry to signed proposal, without the paperwork.

A roofing contractor's whole front office: homeowners request an estimate from the website, the crew triages requests, and proposals go out as a branded PDF and a link the customer can accept online.

CloudCustomLive demo
Enquiry to proposal
1 system

no rekeying between tools

Proposal delivery
PDF + link

accepted online, timestamped

Access control
Database-level

row-level security, not UI-only

What was going wrong

Estimate requests arrived by phone, text and a web form that emailed a single inbox. Nobody could say which ones had been answered. Proposals were built in a spreadsheet, exported by hand, and chased by phone — so the slow ones were the ones that got forgotten.

What we built

One system that owns the whole path. The website form writes straight into the database with the photos attached. Every request has a status and an owner, so the board tells you what is waiting on you. Proposals are assembled from priced line items and delivered two ways at once: a PDF for the customer's records, and a link they can accept from their phone. Access is enforced in Postgres with row-level security, so a crew member cannot read another crew's jobs even if the interface has a bug.

What it looks like

The screens this build was designed around.

The morning board

What is waiting on you, in the order it needs attention. Counts by status, newest requests, proposals sitting unanswered.

roofworks.ca/dashboard

New requests

7

3 today

Awaiting quote

12

2 over 5 days

Proposals out

9

$104,300 pending

Accepted this month

6

up from 4

Requests by status

New
7
Scheduled
11
Quoted
9
Accepted
6
Declined
2

Newest requests

View all
AddressJobStatus
114 Kathleen StFull replacementNew
87 Regent StLeak repairScheduled
2201 Long Lake RdInspectionQuoted
45 Elm St WShingle repairAccepted

Proposal builder

Priced line items, tax and totals computed as you type. The same data drives the PDF and the customer's accept page.

roofworks.ca/dashboard/proposals/PR-1042

Line items

PR-1042
ItemQtyRateAmount
Tear-off, 2 layers28 sq$95$2,660
Architectural shingles28 sq$310$8,680
Ice & water shield6 roll$118$708
Ridge vent42 ft$14$588
Disposal1$640$640
Subtotal
$13,276
HST (13%)
$1,725.88
Total
$15,001.88

Delivery

  • Branded PDFReady
  • Hosted linkNot sent
  • CustomerM. Tremblay

Once sent, the customer can

  • Read it on a phone, no login
  • Accept or decline in one tap
  • Download the same PDF you see

What it does

Who reaches for it, and when

The owner, first thing

Opens the board and sees the three requests nobody has answered and the proposal that has been sitting unopened for a week.

A crew lead on site

Pulls up the job, the photos the homeowner sent, and the measurements taken at the estimate.

The homeowner

Gets a PDF for their records and a link they can accept without printing, signing or scanning anything.

What makes this one different

  1. Permissions live in the database

    Row-level security means a crew member cannot read another crew's jobs even if a page has a bug in it. The interface checks are only there to avoid showing buttons that would fail.

  2. One document, two deliveries

    The PDF and the customer's accept page are rendered from the same priced line items, so the paperwork and the web page can never disagree about the price.

  3. Photos arrive with the enquiry

    The intake form uploads straight to storage, which is what removes the phone call that used to start every estimate.

Built with

What each piece is doing here — the people who read this section are usually the ones who would have to maintain it after us.

Want something like RoofWorks?

It does not have to be your industry — the underlying problem is nearly always the same. Tell us how the work moves through your business and we will tell you what it would take.

Every project is quoted on its own. Turnaround starts at two weeks.