BOTWAVE — Trades
BOTWAVE Trades is AI dispatch and crew management for trades businesses — plumbing, electrical, HVAC, and general contracting. Jobs come in by text. Dispatch goes out by text. Revenue summaries, unpaid invoices, job-site check-ins — answered by message, not a dashboard. Currently in private beta running on the operator's own plumbing crew.
4 trade bots live in production── What it looks like
Crews live in Telegram. The bot lives there too. No new app to install, no login to forget, no training required.
User: who still owes me money TRADES: Three open invoices. Garcia Plumbing Supply $2,400 NET-30 expires May 12 M. Torres $285 dispatched Apr 28, no reply Riverside Apartments LLC $950 partial — $500 received Total outstanding: $3,635 Run "/remind Torres" to queue a follow-up message. ───────────────────────────────────────────── User: what did I make in April TRADES: April revenue — $8,240 collected across 6 jobs. Three invoices still pending from that month ($1,235 total). Net April: $7,005 after materials ($1,205 logged). ───────────────────────────────────────────── User: schedule Rodriguez for leak repair tomorrow 9am TRADES: Scheduled. Crew: Rodriguez Job: Leak repair Time: Tue May 12 · 09:00 Confirmation sent to Rodriguez via Telegram.
── Features
Dispatch
SMS and Telegram Dispatch
Jobs assigned by message. Crew members confirm via the same thread. No phone tag, no missed dispatch, no whiteboard.
Morning Digest
Daily Crew Digest
Every morning before the first job: open tickets, crew assignments for the day, outstanding invoices. One message, no dashboard.
Job-Site Check-Ins
Timestamped Arrivals
Crew texts "on site" — arrival logged with timestamp and job ID. Departure same. Time-on-site calculated automatically per job, per crew member.
Scheduling
Calendar by Message
Schedule a job, reschedule it, check crew availability — by message. The bot resolves conflicts before confirming.
Invoicing
Revenue Tracking by Text
"Who owes me" pulls unpaid invoices. "How much this month" gives collected revenue, pending totals, and materials logged. No spreadsheet required.
Architecture
One Config, Four Trades
The same binary runs all four trades. Set BOTWAVE_TRADE=plumbing and it's a plumbing bot. Electrical, HVAC, GC — same code, different config.
# BOTWAVE_TRADE=plumbing sets everything below via config.json TRADE_KEY = os.environ["BOTWAVE_TRADE"].strip().lower() _TRADE_DIR = (_TRADES / TRADE_KEY).resolve() _TRADE_CFG = json.loads((_TRADE_DIR / "config.json").read_text()) # Config drives labor rates, company name, bot token, knowledge base. # Zero hardcoded trade logic in the core binary. LABOR_RATE = float(os.environ.get( "BOTWAVE_LABOR_RATE", _TRADE_CFG.get("default_labor_rate", 125) )) # Four systemd instances from one unit file: # botwave-sc@plumbing.service botwave-sc@electrical.service # botwave-sc@hvac.service botwave-sc@gc.service
Private beta. Open to trade owners.