CRAWA Refrigeration & Air Conditioning

AirFlo Platform

AI-powered quoting, diagnostics, and automation for CRAWA's field operations. Built on AroFlo, Cloudflare Workers, and Claude.

Last updated: 14 May 2026
Built & Deployed

AroFlo API Connector Live

HMAC-SHA512 signed API proxy on Cloudflare Workers. Handles authentication, signing, and CORS so credentials never reach the browser. Tested and verified against live AroFlo data.

Endpoints: /api (AroFlo) · /auth (login) · /verify (session) · /ai (Claude proxy) · /parse-wo (document parsing) · /health

Tech Authentication Live

Field techs sign in with their existing AroFlo Field credentials. Server-side proxy validates against AroFlo Field, issues HMAC session tokens (24h expiry). No new passwords to manage.

Stateless tokens · no database required

AI Engine (Claude) Live

Claude Opus 4.6 proxied server-side via Cloudflare Worker. Supports SSE streaming for real-time analysis. API key never touches the client. Powers photo analysis, note structuring, and quote generation.

Model: claude-opus-4-6 · Streaming: SSE passthrough

Quoting Tool UI Live

Apple-inspired PWA for field use. Five-step flow: Job → Assess → Analyse → Quote → Review. Photo upload (camera or library), equipment readings, AI diagnostic chat, dual quote output (callout + works). Accept diagnosis → auto-navigates to quote draft with everything populated. Job notes, assets, and service history loaded per-task. Dual login support (AroFlo Field + 2FA).

Callout Fee Calculator Live

Built into the Review step. Standard rate ($205 first hour + $130/hr thereafter) or after-hours flat rate ($595). Generates a separate draft quote from the works quote.

Two draft quotes per job: callout invoice + works quote

Process Flow Documentation Live

Detailed process maps for current and optimised quoting workflows. Side-by-side comparison with Mermaid flowcharts, step mapping, and KPI targets.

Customer Portal Live

Client-facing dashboard with real AroFlo data. Tabs for jobs, quotes, invoices, sites & assets. Next scheduled visit card, quote approval actions, and service request submission with PDF work order upload.

Open customer portal → · Demo: City of Mandurah

AI Document Parser Live

PDF parsing via Claude on the worker proxy. Sends documents to Claude with type-specific prompts, extracts structured data. Supports work orders, SWMS, insurance certs, contracts, invoices, equipment manuals, and 15+ other document types.

Endpoint: /parse-wo · Model: claude-sonnet-4-6 · Tested end-to-end with Programmed FM work orders

Back-Office WO Intake Live

Upload PDF work orders, AI extracts all fields, auto-resolves client and location in AroFlo, maps priority and task type, creates the task. Staff login ties task to their AroFlo user.

Open WO intake → · AroFlo task creation: live

Office Upload Portal Live

General-purpose document upload for back-office staff. 24 document types across 6 categories. AI analyses each document with type-specific prompts, suggests classification, attach-to target, and visibility. User reviews and submits.

Open upload portal → · 24 doc types · 6 AroFlo visibility levels
In Progress

Multi-Unit Job Support Design

Sites with 100+ units need per-unit assessment (photos, notes, readings) with pause/resume capability. Unit picker UI, progress tracking, and bulk AI analysis grouped by fault type.

Depends on: AroFlo asset API access

Quote Submission to AroFlo In Progress

Push both draft quotes (callout + works) to AroFlo as draft quotes on the task. Write assessment notes and diagnosis back to the task. Attach photos to the job. AroFlo write endpoints (notes, materials, task update, substatus) confirmed working.

Pending: decision on exact data landing points in AroFlo

Email on Submit Planned

Send quote summary to three designated recipients on submission. Recipients not yet specified.

Depends on: Outlook API or SMTP integration

Search Integration Key stored

Serper.dev API key stored as worker secret. Proxy endpoint and tool wiring into the agent not yet built.

API: Serper.dev · Google search results

Email WO Intake Worker Built — Awaiting Deploy

Cloudflare Worker replaces the Sweeny/Entourage AI tool. MS Graph webhooks on service@crawa.com.au trigger instant processing. AI parses email body + PDF attachments, identifies client (10+ patterns), resolves AroFlo entities (client, location, task type, priority), two-layer dedup, creates task, sets substatus "New job to be booked in". Daily cron for subscription renewal + catch-up scan.

Blocked on: Entra ID app registration credentials (tenant ID, client ID, client secret)

Customer Portal Auth Planned

Magic link authentication for the customer portal. Verify email against AroFlo contacts, send one-time link, create session token. Client sees only their own data.

Pattern: Email → HMAC signed token → session
Outstanding Blockers & Limitations

AroFlo API User — Sweeny Account Retirement

The current API user (sweeny.studios1 / "The Entourage AI") has restricted permissions — no permission group assigned, so fields like assigneds always return empty. Cannot be fixed from the API side. Plan: deploy the wo-intake worker replacement, then retire this account and issue a new API key under Richard's profile with full permissions.

Blocks: Job assignment visibility · Task assignee lookup · Full API access

Entra ID App Registration — Pending

The email WO intake worker requires an Azure Entra ID app registration with Mail.Read permission on the service@crawa.com.au shared mailbox. Registration has been requested but credentials not yet received.

Blocks: Email WO intake worker deployment · MS Graph webhook subscription

AroFlo API — Asset/Location Access

Querying assets linked to a location (to support multi-unit jobs) requires the API user to have access to the assets and locations zones. Will be resolved when the new API key is issued under Richard's profile.

Blocks: Multi-unit job support · Asset history lookup · Prior work on unit

Parts & Supplier Price Data

No structured parts catalogue or supplier price index exists. The quoting tool currently relies on manual part entry by the tech. For the agent to auto-assemble quotes (as per the optimised process), it needs access to supplier price lists, CRAWA's markup rules, and a parts database.

Blocks: Automated quote assembly · Agent-driven parts lookup · Markup calculation

Customer Rate Card Engine

Different customers have different agreed rates. No structured rate card data exists — it's currently tacit knowledge held by the office expert. Needs to be captured and codified before the agent can apply correct pricing.

Limits: Automated pricing accuracy · Per-customer quote generation

Job Filtering by Tech

The quoting tool filters jobs using a schedule-based lookup as a workaround — the assigneds field on tasks always returns empty due to the sweeny.studios1 API user's missing permissions. Once a new API key is issued with proper permissions, job filtering will switch to using the assigneds field directly.

Limits: Tech-specific job list reliability · Depends on API user migration

Offline / Poor Connectivity

The quoting tool works as a web app but has no offline capability yet. Field techs in remote locations or basements may lose connectivity mid-assessment. A service worker with local state persistence would solve this.

Limits: Remote site usability · Data loss risk on connectivity drop

Google Workspace Verification

MX records have been set but domain verification is still pending from a previous session. Required for email sending via the platform.

Limits: Email-based quote delivery
Documents & Tools