Covered HVAC

WhatsApp-first AI operations platform for HVAC contractors, powered by Amazon Nova.

Live demo: http://98.90.84.106

The Problem

Small HVAC contractors juggle phone calls, texts, and spreadsheets to diagnose equipment, quote jobs, and schedule techs. A single missed message means lost revenue. Hiring a full-time dispatcher costs $40K+/year — money most 2–5 person shops don't have.

The Solution

Covered is an AI dispatcher that lives on WhatsApp. Technicians text in flash codes and get back manufacturer-specific diagnostics. Customers request quotes and receive AHRI-certified proposals with real pricing. Dispatchers say "send her the quote" and a PDF lands in the customer's WhatsApp — no human touches it.

The key insight: LLMs orchestrate, but never calculate. Pricing, equipment sizing, and certification lookups are all deterministic Rust code. Nova decides what to do; pure math does the work.


Architecture

┌─────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  WhatsApp    │────▶│  Integration     │────▶│   Rust API      │
│  (Baileys)   │◀────│  Worker (TS)     │◀────│   (Axum)        │
└─────────────┘     └──────────────────┘     └────────┬────────┘
                           │    ▲                      │
                           │    │                      ▼
                      ┌────▼────┴────┐     ┌─────────────────┐
                      │   SQS        │     │  Orchestrator   │
                      │  (LocalStack)│     │  (Society of    │
                      └──────────────┘     │   Mind)         │
                                           └────────┬────────┘
┌─────────────┐                                     │
│  Web UI      │     ┌──────────────────┐           │
│  (Next.js)   │────▶│   PostgreSQL     │◀──────────┘
└─────────────┘     └──────────────────┘           │
                                                    ▼
                                           ┌─────────────────┐
                                           │  Amazon Nova    │
                                           │  (Bedrock)      │
                                           └─────────────────┘

Message flow: WhatsApp inbound → Worker normalizes → API ingests → Orchestrator classifies (TiageMind) → Specialist Mind runs tool loop → Response enqueued to SQS → Worker delivers via WhatsApp.


Key Features

Society of Mind

Every inbound message is classified by TiageMind (Nova Micro, <200ms) and routed to a specialist:

Mind Model Reasoning Purpose
TiageMind Nova 2 Micro None Intent classification via constrained decoding
DiagnosticMind Nova 2 Lite High Flash code diagnosis using equipment manuals
QuotingMind Nova 2 Lite Medium Equipment sizing → catalog search → quote draft
SchedulingMind Nova 2 Lite Medium Availability check → appointment booking

Zero-LLM Deterministic Crates

  • Manual-J Sizing (covered-manualj) — ASHRAE climate zone BTU estimation. Pure Rust math, no API calls.
  • Pricing Engine (covered-pricing) — Banker's rounding, tax computation. Reproducible to the penny.
  • AHRI Certification — Real cert numbers from database lookups, never hallucinated.

WhatsApp-Native

  • Baileys integration for direct WhatsApp messaging (no Twilio)
  • PDF quote delivery as WhatsApp document attachments
  • Media support: images, video, audio, documents normalized and base64-encoded
  • TCPA-compliant consent management (STOP/START keywords)

AI Reasoning Transparency

Every Nova turn — thinking text, tool calls, token counts — is persisted and visible in the web UI's real-time Reasoning Feed. Dispatchers see exactly why the AI made each decision.


Demo Walkthrough (3 minutes)

Minute 1: Field Diagnostic

A technician texts: "GSX14 won't start, 4 LED flashes" → Nova searches the actual Goodman service manual via docs_search → Returns: "4 flashes = open temperature limit device — likely dirty filter or restricted airflow" → Not hardcoded. Works for any model with an ingested manual.

Minute 2: AHRI Heat Pump Quote

A customer texts: "We need to replace our AC with a heat pump. 2200 sqft." → Manual-J sizes to 3 tons (pure Rust math) → catalog_search finds DSZC180361 with AHRI cert #202584561 → pricing::compute() calculates $3,050 + tax with banker's rounding → Quote rendered with share link — 5 tool calls, zero human intervention.

Minute 3: WhatsApp PDF Delivery

Dispatcher says: "Send Elena the quote as a PDF" → Nova calls quote_sendPdf tool → SQS message enqueued → Integration worker generates PDF with pdfkit → PDF document drops into customer's WhatsApp → Three services, one coherent action.


Getting Started

Prerequisites

  • Docker & Docker Compose
  • Rust toolchain (1.80+)
  • Node.js 20+
  • just command runner
  • AWS account with Bedrock access (Nova 2 Lite + Nova 2 Micro enabled in us-east-1)

Setup

# 1. Clone and configure
git clone https://github.com/trockhans/covered.git
cd covered
cp .env.example .env
# Fill in AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

# 2. Start everything
just demo-run

# 3. Open the UI
open http://localhost:3000

The demo-run command starts PostgreSQL, LocalStack (SQS), the Rust API, integration worker, and Next.js web UI via Docker Compose.

Key URLs (local)

Service URL
Web UI http://localhost:3000
AI Reasoning Feed http://localhost:3000/reasoning
Web Chat http://localhost:3000/chat
Rust API http://localhost:8080
Integration Worker http://localhost:3001

Project Structure

covered/
├── crates/
│   ├── core/             # Domain types (Job, Customer, Quote, etc.)
│   ├── db/               # PostgreSQL repos + 18 migrations
│   ├── api/              # Axum HTTP server + route handlers
│   ├── orchestrator/     # Bedrock client, tool registry (20 tools),
│   │                     # Society of Mind, loop runner, tool guards
│   ├── manualj/          # ASHRAE Manual-J BTU estimator (zero LLM)
│   ├── pricing/          # Deterministic pricing engine (zero LLM)
│   ├── workflow-engine/  # Configurable workflow runner
│   └── auth/             # Magic link + JWT + RBAC
├── apps/
│   ├── integration-worker/  # WhatsApp (Baileys) + SQS consumer (TypeScript)
│   └── web-ui/              # Next.js 15 ops dashboard
├── fixtures/
│   ├── seed.sql             # Demo data (tenant, customers, jobs, catalog)
│   └── demo_script.md       # Full demo walkthrough
├── tests/golden/            # 10 acceptance test scenarios
├── docker-compose.yml
├── docker-compose.prod.yml
└── justfile                 # All dev/test/CI commands

Built with Amazon Nova

Covered uses Amazon Nova 2 via Bedrock as its AI engine:

  • Nova 2 Lite — Main orchestration and specialist minds (diagnostic, quoting, scheduling). Extended thinking enabled for complex reasoning paths.
  • Nova 2 Micro — TiageMind intent classification. Constrained decoding via toolChoice: { tool: { name: "triage_classify" } } guarantees valid JSON output in <200ms.
  • Prompt CachingCachePointBlock inserted after the first system block. Subsequent turns within the 5-minute TTL read cached tokens at reduced cost.
  • Constrained Decoding — Tool schemas enforce additionalProperties: false on all 23 tools. TiageMind and QuotingMind use forced tool choice for deterministic first-turn output.
  • Session Concurrencypg_advisory_lock prevents race conditions when multiple messages arrive for the same phone number.
  • Tool Result Truncation — Results over 8,000 characters are truncated to prevent context window bloat.

Why Nova?

Nova's native tool use and extended thinking make it ideal for multi-step orchestration. The Society of Mind pattern — a cheap classifier routing to expensive specialists — keeps latency low and costs predictable. Constrained decoding eliminates JSON parsing failures entirely.


Tech Stack

Layer Technology
AI Engine Amazon Nova 2 Lite + Micro (Bedrock)
API Server Rust, Axum, SQLx
Web UI Next.js 15 (App Router), TypeScript
Messaging WhatsApp via Baileys, SQS (LocalStack)
Database PostgreSQL 16
Infrastructure Docker Compose, AWS EC2
PDF Generation pdfkit (Node.js)
Equipment Sizing Custom Rust crate (ASHRAE Manual-J)
Pricing Custom Rust crate (banker's rounding)

Testing

just test          # Rust unit tests
just test-api      # API integration tests (needs live DB)
just test-golden   # 10 golden transcript scenarios
just test-worker   # Integration worker (Vitest)
just test-ui       # Web UI components (Vitest)
just test-all      # Everything

License

Built for the Amazon Nova AI Hackathon 2026. #AmazonNova

Built With

Share this project:

Updates