An AI assistant drafts a roofing CEO's paperwork from voice notes
The CEO sends a voice note between roof inspections. His AI assistant finds the job and drafts an estimate or work order. Written instructions tell it to wait for his “approve” before saving or sending; it cannot send email.
CreditDesigned and built by our founder, as lead developer for a partner agency.
See it work
The assistant drafts an estimate for the CEO to approve
He replies: “Metal at 640 a square.”
- The CEO sends a voice note. He records the job details in the truck after an inspection. His own server turns the recording into text.
- The assistant finds the job. The assistant confirms the customer and address in one line.
- It drafts the estimate. One item has no price on file, so the assistant marks it for the CEO to fill in.
- He adds the missing price. He replies with the rate. The assistant updates the item price and the total.
- He approves it. He replies “approve”, and the estimate PDF is ready.
About Lone Oak Roofing
The CEO sells, inspects roofs, writes estimates and manages the crews. He spends much of his day driving between jobs.
Customers find the company through quote requests on its website, insurance-claim work and referrals. New leads arrive in a shared company inbox.
- Client
- Lone Oak RoofingA roofing, gutter and painting company in Texas with a team of 2 to 5
- Industry
- Home services (roofing)
- How they sell
- Owner-led, with in-home estimates
The problem
The CEO wrote estimates and work orders at night
He wrote documents after work
Estimates, work orders and photo reports were written at night, around field work. He wanted that time for inspections and sales.
He checked four apps to answer one question
“Where are we on that job?” meant checking the job system, the photo app, the lead system and his inbox, one after another.
Read leads still needed a reply
Several people read the lead inbox on their phones. A lead marked as read was not always a lead followed up.
Ready-made chat tools didn't fit
They don't know his jobs or read his systems. He also needed to keep his private financial files inaccessible to the assistant.
What was built
The assistant reads job records and drafts documents in one chat
It works from one Telegram chat
He types or sends a voice note in Telegram, the messaging app he already uses. His server turns voice notes into text.
It reads the tools he already uses
JobNimbus for jobs, CompanyCam for photos, GoHighLevel for leads and calls, and Google for his calendar, files and email. Nothing is replaced.
Paperwork comes back as a PDF
The assistant uses 4 templates to make PDF drafts for him to review. It updates the document when the source text changes.
It checks in twice a day
At 8 AM Central, he gets a summary of sales opportunities, inspections, overdue tasks, new photos and unread leads. At 6 PM Central, he gets a follow-up list that includes the shared inbox.
Control and safety
Written instructions require his approval before saving or sending
Notes, tasks, status changes, calendar events and messages are shown to him as drafts first. A vague “yes” is not enough. The assistant asks for “approve” against the specific draft.
- Email is read-only. The assistant cannot send email from either mailbox.
- Private files are out of reach. Google's own permissions block his private Operations folder.
- No invented numbers. It is instructed to leave missing prices and measurements open rather than guess.
- He chooses what runs on its own. Lookups and the two daily check-ins run by themselves. Written instructions require his approval before saving or sending.
For technical readers
How the system works
The assistant runs as one service on a small rented server. It fetches his Telegram messages itself, so the server has no open web ports. It follows written procedures (called “skills”) to read job records, draft PDFs and run the two daily check-ins.
Dashed lines show supporting connections, or parts that are paused or not yet built.
In more detail
Technology used (11 parts)Each part of the system, and why it was chosen.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Interface | Telegram bot, voice notes | He can use text or voice notes from the truck in an app he already uses. |
| Assistant service | OpenClaw gateway on one Hetzner server (4 vCPU, 8 GB, about €8 a month), run as a systemd service | One small service is easy to hand over and recover, with no containers to maintain. |
| AI model | OpenAI GPT-5.4 through OpenClaw's built-in Codex harness | The model can use the connected business tools. One setting changes the model; several were tried before the team chose this one. |
| Skills | 13 custom skills: 8 he talks to, 5 small connectors to other systems | Each job (estimate, work order, briefing) is its own written procedure, so behaviour is predictable and easy to change. |
| Business systems | JobNimbus, CompanyCam and GoHighLevel APIs | The connectors read job records. Written instructions require approval before changes; they do not enforce it in code. |
| Google Workspace | Calendar, Drive and Gmail through a service account with read-only access | Reads his schedule and both mailboxes, with no permission to send email. |
| PDF documents | Typst templates | The assistant writes a text file, then turns it into a PDF. A revision is a text change, not a redesign. |
| Speech | whisper.cpp on the server | Voice notes are turned into text on his own server, not sent to an outside service. |
| Memory and scheduling | Markdown workspace files, local search, nightly memory clean-up, OpenClaw scheduler in Central time | It remembers his jobs and preferences, and check-ins run on a schedule. |
| Security and backup | Gateway reachable only from the server itself, key-only SSH, firewall, fail2ban, nightly backup to a private Backblaze B2 bucket | Nothing is reachable from the public internet except secure login. A lost server can be rebuilt from a script. |
| Testing | A script that checks for made-up details, and scripts that test the Drive exclusion | Each document skill is run against real job records and checked against the file on disk. |
5 engineering decisions that matteredThe problem, what was done, and what it changed.
Missing numbers stay missing
A drafting tool that guesses a price is worse than no tool. Rules forbid inventing prices, measurements, suppliers or IDs, and the templates show gaps as “needs CEO”. Each test run compares what the assistant says about a file with the PDF actually saved.
His private folder is out of reach by design
A filter alone can fail because of a bug. The assistant's Google account was never given access to his Operations folder, so Google itself refuses to return it. A second filter checks each file’s parent folders as a backup; a script to move approved folders into a separate shared drive awaits his action.
Output rules keep working notes out of scheduled messages
Early-morning briefings leaked the model's working notes into Telegram, and a task scan picked up half-finished output. Changing the model did not fix it. Rules that set the first line of a scheduled run, and forbid handing off part-way through, did.
The same Gmail connection reads both inboxes
The same read-only Gmail connection checks the company inbox on a schedule because automatic message notifications support only one mailbox per assistant. It ignores read status because several people open the inbox on their phones. A 24-hour scan window prevents repeated leads.
He approves recurring tasks before they start
A scheduling rule tells the assistant not to create any repeating task until he approves what runs, how often and the rough cost.
Testing and build recordHow it was tested, and the build by the numbers.
Quality and reliability
- Each document skill is tested against real job records by a script that runs it on the server and checks the file it made. Each run used 21 to 34 tool calls.
- Separate scripts test that the private Drive folder stays out of reach along both access paths.
- Approval tests cover drafting before sending, refusing to send without approval, and refusing to reveal its own instructions. One test found the model could report a change as done when it had not been saved, so at hand-over he was advised to confirm changes in the job system. A lock built into the code was planned as a follow-up.
- Scheduled check-ins run through the same service and report whether they ran. The server's schedule shows both jobs switched on.
- The OpenClaw version is fixed, and upgrades follow a written guide. A scheduled check runs every 12 hours to limit AI cost while the assistant is idle.
- Daily off-site backups are kept for 14 days, and a rebuild script serves as the recovery plan.
By the numbers (build)
- 69 commits over about 4 weeks, from 11 April to 12 May 2026.
- 6 days from the onboarding call to all four document types passing.
- 13 custom skills, 4 PDF templates, 5 business systems connected plus Telegram.
- 2 scheduled check-ins a day and 2 mailboxes watched.
- 1 server, 1 service, no containers.
Is it a fit?
Could this work for your team?
- You run a home-services company. The person who sells also writes the paperwork, for roofing, solar, heating and cooling, windows, remodelling or landscaping.
- You keep job records in a customer management system and a photo app. We connect what you use instead of replacing it.
- You have your own estimate and work-order formats. We adapt the templates and load your price list, so fewer gaps are left for you.
- You want to approve the assistant’s actions. You decide which actions run on their own and which wait for you.
Discuss an assistant for your job paperwork
Conducted by Apurva · Not a sales call
Or write to care@brownmind.com