Palmerston Moving is a white-glove delivery company in Toronto. Around 50 staff, more than 3,000 clients. We took over their existing legacy CRM and have been rebuilding it since, one person's job at a time, while the business keeps running.
An in-house CRM, a separate dispatch platform, an accounting system, a payments provider and a set of spreadsheets. Each held part of the day and they did not talk to each other, so staff moved information between them by hand.
We started by mapping what each system did and what each person used it for.
A portal where every person has their own set of tools, built for the job they do. It sits on top of the systems already in use and connects them.
In it today: crew check-in and check-out with automatic SMS reminders; tip allocation that reads payments and splits them across the crew on the job; sales commission and bonus reports generated from the accounting exports; daily route manifests in driving order; crew onboarding that texts the new hire their form; an AI assistant that answers questions across email, the CRM, manifests and payments; and a ticket system the owners use to raise work.
New tools are added continuously, and each is tested against a full duplicate of production first.
The original system still runs the business while the new one is built. It is maintained and improved in parallel. Nothing is switched off until its replacement is in use.
Crews write on paper all day: times, hours, who helped, what was used, what went wrong. Document AI and Gemini read those scanned sheets and turn them into structured records — across one sample, 2,227 stops over 69 days. No rules engine can read handwriting on a form that changes shape every day; this is the part that was impossible until recently.
The same layer runs retrieval across the company's mailboxes so the owner can ask plain-language questions about the business, and a tool-calling agent that queries the operational database, the payment system and the document store in one place.
Two small examples out of many.
The dispatch system already held arrival times, departure times, signatures and photos for nearly every stop. Nobody had ever read them back out, so a person transcribed the same information from paper each morning and payroll and billing were decided from that paper.
One defect found along the way had been silently discarding self-service check-outs, recording those shifts as zero hours. Fixing it restored 196 hours of unpaid work to the crews who had worked them, and corrected the affected payroll periods.
This platform runs a live business and holds client data, so only limited screens are shown here. A full walkthrough is available on a call.