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
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.
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.
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
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.
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.
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
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.
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.
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
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.
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.
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.
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
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
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
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