Skip to content
Shahab Hassan
All projects

Field quality assuranceWeb Development · 2026

LandscapeQC

A tool for landscaping companies to check the quality of their work on site and prove it with photos.

The LandscapeQC quality dashboard beside a mobile inspection form of star-rated services, and a site photo being annotated with “trim overgrowth” and “add mulch”
01Overview

Overview

Landscaping companies in the United States had no proper way to record how good their work actually was. Quality checks happened through photos buried in someone's phone, a quick verbal report, or a spreadsheet. That makes it hard to prove the standard of your work to a property manager, spot a crew whose work is slipping, or hold anyone accountable. LandscapeQC gives them a structured way to do it, and was built for a real client in that business.

A company signs up and adds the properties it maintains, each with the client's name, address and phone number. It then invites its field managers by email. Out on site, a manager picks the property and records an inspection covering up to nine services: mowing, pruning, weed control, mulch beds, gravel beds, plant health, turf health, floriculture health and irrigation. Each one gets a rating out of five, a written note, and up to five photos.

The photos are the point of the whole thing, so they can be marked up before they are attached. The annotation tool lets a manager draw freehand on the image, drop a text label, circle a problem area or box off a section, with undo and redo. Crucially it exports at the photo's real resolution rather than the size shown on the screen, so the detail that made the point in the first place survives into the report.

The part I like most is Lite mode. Crews often work where the signal is bad, and making someone create an account before they can record anything kills adoption on day one. So the entire app works with no account at all, storing properties, reports and photos in the browser itself. When that person signs up later, the dashboard notices the local data, shows them exactly what it found, and uploads everything in one click, converting the stored photos into hosted links and marking each report as synced so nothing goes up twice.

Back in the office, the dashboard shows the team's average rating, how many properties and reports there are, and how each number moved against last week. It ranks the top performers using a score that weighs their average rating at 70 percent and the number of inspections they did at 30 percent, so someone cannot top the list on volume alone. Every property carries a status worked out automatically from when it was last inspected: Current if it was within three days, Active within thirty, and Needs Attention past that, which turns a list of properties into a list of things to chase. Each property also has a six month trend chart and a per service breakdown.

All of it can be exported as a multi page branded PDF built entirely in the browser, opening with the business details, then a table of every property, then each inspection in full with its star ratings, inspector notes and the photos pulled in and embedded. That single file is what gets sent to a property manager who will never log into the system.

Team management sits on top: an admin invites someone by email and that person can join either by typing the code from the email or by clicking the link, whichever suits where they are. Members are either admins or managers, and the navigation changes to match. The platform was built using Next.js for front end with Redux Toolkit for state, an Express and MongoDB backend, and Cloudinary handling the photo storage and delivery.

02Features21

Features

  • A company signs up with its business details and invites its team
  • Add the properties you maintain, with client name, address and phone
  • Search properties by name, client, address or phone number
  • Inspect nine services, from mowing and pruning to turf health and irrigation
  • Rate each service out of five, with a written note and up to five photos
  • Draw on a photo to point out a problem: freehand, text, circles and boxes
  • Photos export at their real size, not the size shown on screen
  • Undo and redo while marking up an image
  • Works with no account at all, then uploads everything when you sign up
  • Dashboard showing team average, report counts and last week's change
  • Top performer ranking that weighs quality at 70 percent and volume at 30
  • Properties flagged Current, Active or Needs Attention by last inspection date
  • A property page with its full inspection history and a six month trend chart
  • Filter a property's reports by a single service to see how it is trending
  • Download a multi page branded PDF with photos and ratings included
  • Invite team members by email, joining by code or by link
  • Admin and manager roles, with the navigation changing to match
  • Admins can change a member's role or remove them from the business
  • Profile page with your own inspection count and average rating
  • Business settings the company can edit itself
  • Works on a phone in the field and on a desktop in the office
03Challenges & solutions5

Challenges and solutions

  1. 01
    Challenge

    Field crews often work where there is no usable signal, but forcing an account before they can record anything kills adoption.

    Solution

    Built Lite mode on localForage and IndexedDB so the full report flow, including photos held as base64, works with no account and no network. On signup the dashboard spots the stored data, shows exactly what will be uploaded, and syncs it in one click, marking each report as synced so nothing is duplicated.

  2. 02
    Challenge

    Photos shrunk to fit the annotation canvas would have exported at screen size, losing the detail that makes the evidence useful.

    Solution

    Tracked the scale factor between the displayed canvas and the real image, then applied its inverse on export, so annotations land in the right place on a full resolution photo. Undo and redo run off a 20 state ring buffer.

  3. 03
    Challenge

    A property that has not been inspected in weeks is the real problem, but nobody was going to check dates by hand.

    Solution

    Made the status a Mongoose virtual computed from the last report date, so it is always current with no background job, and used a post save hook on reports to keep that date in sync.

  4. 04
    Challenge

    Reports needed to be shareable with property managers who will never log in.

    Solution

    Generated a full multi page PDF in the browser with jsPDF, pulling each photo from Cloudinary and embedding it, so a business can send a complete branded inspection report as a single file.

  5. 05
    Challenge

    Invites had to work whether someone opened the email on their phone or moved to a laptop.

    Solution

    Sent both an OTP code and a signed JWT link in the same email, with either path leading to the same account setup, and a status flow of pending, verified, accepted or expired so an admin can see where an invite got stuck.


04The product15 screens

LandscapeQC screens