UPFORGE LABS
the shop → upforge.io

Application-Development

Bidding a Lawn From Space, and Invoicing the Day It's Cut

Satellite-measured estimates, an optimized daily route, and per-cut invoicing in one system

Application-Development

Bidding a Lawn From Space, and Invoicing the Day It's Cut

Satellite-measured estimates, an optimized daily route, and per-cut invoicing in one system

4M Lawn Care ran a commercial route on manual invoicing and a drive to every property to produce an estimate. We replaced all of it with one system: paste an address and it measures the property from county parcel data and satellite imagery to produce a price, bundles estimates into a client proposal, converts an accepted proposal into a billing account, sequences the day into an optimized drive order, and invoices each cut the day it happens.

  • Custom Software Development
  • AI & Computer Vision
  • GIS & Mapping
  • Progressive Web App
  • Billing Automation

Where it landed

0

Property visits required to quote

Measured

1 day

Invoice turnaround

Measured

2-opt

Route optimization

Measured

Challenges

What stood in the way

4 problems, and what each one took to clear.

Challenge 01

  1. Problem

    Every estimate required driving to the property

    Quoting a new commercial property meant getting in a truck, looking at the lawn, and guessing at the areas that matter. That put a hard ceiling on how many properties could be bid in a week, and it made bidding a large portfolio impractical.

  2. Solution

    We built an estimating pipeline that starts from an address. It geocodes the property, pulls the county's own recorded parcel polygon, fetches satellite imagery sized to the lot, reads that image with AI to separate turf from canopy and beds, samples a USGS elevation grid to derive slope, and prices the result against a transparent model.

  3. Result

    Properties are bid from a desk in seconds, individually or as a pasted batch, with a per-cut price and an exportable spreadsheet.

Challenge 02

  1. Problem

    An AI estimate you cannot check is an estimate you cannot trust

    A pricing model that depends on a language model reading an aerial photo has a known failure mode: it will occasionally call a large house on a small lot a commercial property, and misprice the job.

  2. Solution

    We cross-check the model against physical reality. Parcel acreage overrides a commercial classification when the land does not support it, because a real commercial mowing job sits on real land. Every measurement carries a method and a confidence, and a low-confidence bid carries an internal advisory to walk the property before it goes out, so the estimator never has the tool's uncertainty hidden from them.

  3. Result

    Every measurement carries its method and a confidence level, and the bid surfaces its own weak spots to the estimator instead of presenting a shaky number as a certain one.

Challenge 03

  1. Problem

    The drive order and the billing roster could drift apart

    A route is only right if it holds exactly the properties the client is being billed for. Hold the drive order and the billing roster in two places and they drift: a property gets added to the account and never makes the drive, or a stop keeps getting cut after it comes off the books. Stops in the order they were added also produce long backtracking drives between neighbors.

  2. Solution

    We brought routing in-house and tied it to the customer records. A 2-opt optimizer refines the drive order on an open path, and adding a property automatically slots a stop into the route while removing one archives it, so the route and the billable roster can never drift apart.

  3. Result

    The daily drive order is derived from the same records that bill the client, so a property can't sit on one list without sitting on the other.

Challenge 04

  1. Problem

    Invoicing was manual, so cash arrived a month late

    Cuts were recorded one place and invoiced another, by hand, on a monthly cycle. For a per-cut commercial account that delay pushed payment out by weeks.

  2. Solution

    The crew works the route in an installed phone app that tolerates dead zones, tapping Navigate and then Complete, which stamps the cut with GPS and queues it. An end-of-day digest emails the client one invoice per cut, while monthly accounts stay on a scheduled batch. Both cadences read one field, so no account can ever be billed twice.

  3. Result

    For per-cut accounts, invoices leave the same day the work happens instead of at the end of the month.

Strategy

How the work ran

4 phases, in the order they happened.

  1. Phase 01

    Modeling the pricing

    We wrote the pricing logic down as an explicit rule set: a base rate per mowable acre, a floor price, and multiplier tables for tree canopy, planting beds and slope. Every price the software produces is inspectable and adjustable instead of a black box.

    • Pricing model
    • Multiplier tables for canopy, beds, and slope
    • Price-band validation
    • Property-type profiles
  2. Phase 02

    Measuring properties without visiting them

    We assembled a measurement pipeline from public data: county parcel services across four counties, satellite imagery, AI vision for surface composition, and USGS elevation for slope.

    • Multi-county parcel lookup
    • Satellite capture and projection
    • AI surface analysis
    • Elevation and slope derivation
  3. Phase 03

    Turning estimates into accounts

    We connected bidding to the rest of the business: estimates bundle into branded proposals, accepted proposals convert into billing accounts with property rosters, and every property carries its own price and cadence.

    • Proposal builder and PDFs
    • Account and property management
    • Bulk property import
    • Operations dashboard
  4. Phase 04

    Running the day and billing it

    We built the field app and the money path: an offline-tolerant route runner with GPS-stamped completions, an optimizer that refuses to make a route worse, and two invoicing cadences that cannot double-bill.

    • Crew progressive web app
    • 2-opt route optimizer
    • Per-cut invoice digest
    • Scheduled monthly invoicing

Results

What it delivered

Outcomes

Quotes without the drive

Properties are measured from parcel data and satellite imagery instead of a site visit, individually or in batches.

Same-day invoicing

Per-cut accounts are invoiced the day the work is completed rather than at month end.

Routing and billing share one record

The drive order is built from the same property roster that bills the client, so the route can't drift from the books.

Tech stack

What it's built with

10 technologies.

Next.js 16

React 19

TypeScript

Tailwind CSS

OpenAI GPT-4o Vision

Google Maps Platform

County ArcGIS Services

USGS Elevation

Netlify Blobs

pdfkit

Project details

What the job was

The particulars of the build, as the record states them.

Industry

Commercial Landscaping