Borealis

operations · laravel · vue · 2023

Yard care crews, scheduled and documented on site

Eric's Yard Care, Canada

A field service portal for a yard care business: visits scheduled, work logged on site with photo evidence, and a history each customer can see for their own property.

The operation

A Canadian yard care business sending crews out to customer properties for mowing, pruning and cleanup.

The portal schedules and tracks those visits. Employees log the work as they do it, with photographs. Administrators see the whole operation on a calendar and on a map. Customers see the history of what has been done at their own property.

The part that was actually hard

Four kinds of user, seeing four different things. The permission hierarchy runs sysadmin, admin, employee, client, and it governs far more than which pages open. It decides what data each role can see at all: a customer sees only work done at their own locations, an employee sees only their own jobs, an administrator sees everything with filters by customer, employee or location. That is not a middleware check, it is conditional query building in every list, every calendar feed and every JSON endpoint, and getting one of them wrong shows one customer another customer's property.

A job is a thing with a lifecycle, not a row. An employee starts a visit, which records the time. Photographs go up while they are on site. They finish it, which records the time again. The system tracks running against finished, and renders it all onto a calendar with timezone handling underneath: stored in UTC, displayed in whatever zone the business configures.

Addresses become map pins on their own. Creating a location queues a job that geocodes the address through the Government of Canada's GeoGratis service, and those coordinates drive static map rendering with zoom, dimensions and retina support, all set from admin settings held in the database rather than hardcoded.

Where it stands

Built in 2023. It went live and ran the owner's scheduling and customer records.