Skip to content
Álvaro García

Product · 2026

Completed

CRM HVAC — Customer 360

A CRM proposal for Airzone: from lead to warranty in one system

Role
Product, business analysis and AI-directed development
Year
September 2026
Stack
  • Next.js 15
  • React 19
  • TypeScript
  • PostgreSQL 16
  • Prisma 6
  • Tailwind
  • Radix UI
  • Recharts
  • MQTT
  • Docker
  • Vitest
  • Playwright
CRM dashboard showing new leads, open opportunities, pipeline and tickets
Customer 360 company record with company details, signals and activity

Demo environment with fictional data. Independent proposal: not official Airzone software and contains no confidential information.

Overview

A Customer 360 CRM that connects the sales cycle with the installed base of climate-control equipment: leads, quotes, installations, warranties, tickets and field technicians.

Proposal / demo built with public industry information and fictional data. It is not official Airzone software.

data models (Prisma)
93
screens
134
roles, permissions enforced in SQL
14
E2E tests passingTwo consecutive runs, 24/09/2026
1344/1344

AI usage

Built with a Claude coding agent steered by project rules (CLAUDE.md), a spec and tests. Inside the product, a Claude-powered assistant summarises, suggests the next action and classifies — but never modifies business data.

Models: Claude (Anthropic Messages API)

No public demo: this project runs locally.

01 · Context

A product that lives for ten years in someone else’s building.

A climate-control manufacturer does not sell once and move on: its product is installed in someone else’s building, wired to another manufacturer’s machine and fitted by a third-party installer. The customer relationship continues for years of warranties, maintenance and renewals.

I put this proposal together for Airzone using public industry information only. The goal: show what a CRM that actually understands that business would look like, instead of a generic CRM forced to fit.

02 · Problem

Generic CRMs model customers and deals. That’s not enough here.

A standard CRM organises customers, opportunities and tickets. In HVAC the other half is missing: which equipment is installed, where, with which control system, under which warranty and with what technical history.

Without that seam, sales and support work from different data, equipment compatibility is assumed rather than verified, and maintenance or renewal opportunities are lost.

03 · Approach

Two worlds and the seam between them.

The system models the sales cycle and the installed base as a single journey.

  1. 01

    Lead

    Capture and scoring

  2. 02

    Opportunity

    Staged pipeline

  3. 03

    Configuration

    Verified compatibility

  4. 04

    Quote

    Immutable versions

  5. 05

    Installation

    Site · HVAC system · assets

  6. 06

    Warranty

    Activation and coverage

  7. 07

    Ticket

    SLA and work order

  8. 08

    Renewal

    Maintenance and upsell

04 · Product decisions

Three rules that define the product.

Compatibility is verified data
If no rule is registered for a machine model and a product, the status is “pending validation” and the configuration cannot be approved.
Commercial history is immutable
A sent quote version is never edited: the next one is created. The customer accepts or rejects it through a public tokenised link.
Authorisation is enforced in SQL
Every query is scoped to the role. If a permission is missing, the query returns zero rows, not all of them. 14 roles, from super admin to read-only.

05 · Product

What you can do with it.

Stills from the demo walkthrough (fictional data).

Customer 360 company record with company details, signals and activity
Customer 360 company record with company details, signals and activity
Sales pipeline in a Kanban view by stage
Sales pipeline in a Kanban view by stage
Versioned quote with line items, margins and an approval flow
Versioned quote with line items, margins and an approval flow
Connected installation with zones, set-points and MQTT remote diagnostics
Connected installation with zones, set-points and MQTT remote diagnostics
Sales analytics with revenue by product family
Sales analytics with revenue by product family

06 · Modules

A complete system, not a mock-up.

CRM and sales
Scored leads, contacts, companies with a 14-tab 360 view, Kanban pipeline, quotes with approvals, and orders.
Installed base
Sites, installations, HVAC systems, assets, warranties and a compatibility matrix.
Support and field
SLA-tracked tickets, work orders, technician scheduler, a “My day” mobile view and a CalDAV calendar.
Telemetry
Remote diagnostics for connected installations over MQTT, with a clearly labelled gateway simulator.
Marketing and analytics
Campaigns, GDPR consents, sales/customer/support analytics, a province map and a report builder.
Administration
Users, roles, teams, CSV import, automations, HMAC-signed webhooks and an append-only audit trail.

07 · Architecture

Layers with strict responsibilities.

Next.js App Router on PostgreSQL. Every external service follows an interface + mock + real adapter pattern.

  1. guard

    Authentication and authorisation required on every request.

    • DB sessions with hashed tokens
    • RBAC object · action · scope
  2. domain

    Pure, tested business rules.

    • Pricing
    • SLA
    • Warranties
    • Lead scoring
  3. services / actions

    Queries and mutations through Server Actions.

    • Prisma 6
    • zod
    • decimal.js for money
  4. providers

    Swappable integrations, all runnable locally with Docker.

    • SMTP · Mailpit
    • S3 · SeaweedFS
    • CalDAV · Radicale
    • MQTT · Mosquitto
    • AI · Claude

08 · AI workflow

I direct; AI executes; tests decide.

The code was written by a Claude agent. The decisions, the boundaries and the definition of done were mine.

  1. 01

    Spec

    Business, roles, flows and Definition of Done

  2. 02

    Rules

    CLAUDE.md: fixed stack, never invent confidential information, never expose secrets

  3. 03

    Build

    11 phases with a progress log

  4. 04

    Evaluation

    Review with the real toolchain: 62 bugs logged and fixed

  5. 05

    Verification

    typecheck, lint, unit, build and E2E before anything counts as done

A real example: reviewing the CalDAV integration showed any user could read the calendar; authentication was added to Radicale.

09 · Quality

Verified, not promised.

Engineering figures recorded in docs/testing.md on 24/09/2026. These are not business metrics: it is a demo.

unit tests across 34 suites
258
E2E tests passing, two consecutive runs
1344
access matrix: routes × roles
126 × 8
screens audited with axe (WCAG 2.1 AA)
28

10 · Learnings

AI writes fast. Judgement is still human.

A coding agent is extremely fast, but only useful if the problem is well defined. The most valuable part was not asking for screens: it was setting verifiable business rules and a definition of done that cannot be skipped.

I also learned to distrust “all green”: evaluating with the real toolchain surfaced security issues (IDOR, scope leaks, login throttling) that only appear when permissions are tested for real.