The question a spreadsheet does not answer
A maintenance contract is not a line of revenue, it is a DEBT of visits. You sold fifteen mows, two hedge cuts and one weeding for the year. In July, the only question that matters is: how many have I done, on which site, and how many are left to fit in before the season ends? A diary answers «what is booked this week». An invoicing spreadsheet answers «what I have billed». Neither answers that one.
The drift builds quietly, because every instance is justified at the time: a week of rain, a mower off the road, a client who reschedules. Each postponement is reasonable; it is their accumulation across twenty sites that becomes impossible to hold in your head. You notice in October, when three visits are still owed to someone who has already paid for them.
The two halves of the trade are not filed the same way
A design-and-build PROJECT has a start, an end, a quote and a final payment: it is a project. A MAINTENANCE contract has an annual term and a list of planned visits: it is a subscription being consumed. Holding both in the same column forces you to pick between two bad answers — either you lose sight of what each contract still owes, or you log every mow as a mini-project and the file becomes unreadable.
Described as two distinct things, each keeps what is specific to it. The visit becomes the real unit of work: it carries its date, its site, the work done, the time spent, the crew — and its state, planned, done or postponed. That granularity is what tells you what is still owed, and lets you find out at year end how many hours a site actually cost against what it brings in.
- Clients: households, managing agents, local authorities, businesses
- Sites: one client may have several, each with its own access and constraints
- Maintenance contracts: term, services sold, number of visits, billing
- Visits: date, site, work done, time spent, crew, state (planned, done, postponed)
- Landscaping projects: quote, dates, progress
- Equipment: servicing, hours of use, allocation
The season, the equipment and the green waste
The trade is compressed: most of the work falls between March and October, and a week lost is not made up in January. A «visits behind schedule» indicator therefore does not mean the same thing in April and in September — it only becomes an alarm late in the season. Tracking visits completed per month makes that curve visible, and lets you compare one year against another instead of trusting the impression that «this year was busy».
Two cost centres almost always escape tracking because they are billed to nobody: equipment upkeep (servicing the ride-on, sharpening, belts) and green waste disposal. They are real, recurring costs all the same. Describing them as ordinary data — a service has a date and a cost, a tip run has a volume — is enough to make them show up in the year-end picture.
How the application is produced
You describe what your business does, in your own words — «visit», «mow», «hedge cut», «contract», «site». A plan is shown to you before anything is built: the entities kept, their fields, the screens, the indicators. You correct it until it matches how you actually work; nothing is built before you approve it.
The result is a standard Next.js and Prisma project. You can download it as a ZIP archive or push it to GitHub: the code is yours, and any developer can pick it up. Three generation levels exist (Sketch, Craft, Masterpiece), depending on whether you are testing an idea or want a finished application.
What the application is NOT
This page describes an internal tracking tool. Several needs of a grounds maintenance business fall outside what the product does, and it is better to know before you start than after:
None of these limits is permanent as far as the code goes — the project is exportable and a developer can extend it — but none is provided out of the box.
- No route optimisation: the application shows the visits that are planned, it does not work out an itinerary or an order of call.
- No connection to a weather service: rain pushes mowing back, and rescheduling stays a manual entry.
- No offline mode — the limit that matters most in this trade: the application opens in a phone browser, but a site without a signal will not let you record the visit on the spot.
- No GPS clocking and no crew tracking.
- It is not invoicing software: quotes and invoices stay in your current tool or with your accountant.
- Permissions are global (administrator, user, read-only) — no per-crew or per-area rights.
Getting your figures out at the end of the season
The data you enter stays yours and can be retrieved from the Settings screen, as JSON or CSV, one dataset at a time. That is the format that helps when renewals come round: a CSV opens in a spreadsheet, sorts by site, and can be cross-checked against your billing to see which contracts cost more hours than they earned.
Lists can be filtered and sorted, and a trash bin lets you restore a row deleted by mistake — useful when several people log the day's visits at the end of the afternoon.
Entities
- Clients
- Sites
- Maintenance contracts
- Visits
- Landscaping projects
- Equipment
Views
- Dashboard
- This week's visits
- Maintenance contracts
- Sites
- Landscaping projects
- Equipment and servicing
Indicators
- Visits completed in the period
- Visits still owed on live contracts
- Hours spent per site
- Contracts coming up for renewal
Frequently asked questions
Does the application plan my round for the day?
No. It shows the visits that are planned and lets you filter them by date, site or crew, but it works out no itinerary and does not order the calls. The order you drive in stays your decision.
Can a visit be recorded from site?
The application opens in a phone browser, so yes wherever there is a signal. There is no offline mode, however: on a site with no connection, recording will have to wait until you are back at the yard. That is a limit worth knowing before you organise around the tool.
Does this replace my quoting and invoicing software?
No. The application tracks your contracts, visits and projects; it issues neither quotes nor invoices and is not connected to any accounting tool. The amounts it holds export as CSV, and transferring them into your billing stays manual.
How do you handle a client with several sites?
The site is a thing in its own right, attached to the client: a managing agent with six blocks, or a household with a main home and a holiday home, is described without duplicating anything. Visits and contracts attach to the site, so hours are counted site by site.
What happens if we want to move to another tool later?
The project is standard Next.js and Prisma, exportable as a ZIP or pushed to GitHub, and your data exports as JSON and CSV. There is no proprietary format and no dialect only the vendor can read: leaving requires nobody's permission.
