How we build

Engineered AI-first. Owned by people.

AI agents work alongside our engineers on every part of the platform: planning, writing code, testing and documenting. Engineers stay in charge, and every change is reviewed and tested. The result is projects delivered faster, more consistently and better documented.

An AI-first change

What a feature looks like in practice

Our AI agents (Claude Code, Codex, Copilot) don't guess. They read the repo's own instructions first: the architecture, the coding rules and the docs that must change. Then they work through the same steps an engineer would, much faster.

Agents can work in parallel on separate copies of the codebase, so several features progress at once.

agent session
  1. plan Read CLAUDE.md: conventions, architecture, which docs to update
  2. plan Explore DeviceRegistry.Api/Endpoints and dashboard-ui/src/app/cloud
  3. edit Add endpoint · namespace + role check · structured logging
  4. edit Add dashboard view · standalone component · typed API model
  5. test Write unit tests, then run 800+ API tests and the UI specs
  6. docs Update docs/docs/cloud-api and docs/docs/dashboard in the same change
  7. review Open a pull request for a person to review
  8. ✓ ready for human review
Guardrails

Fast, but not reckless

AI speeds up the engineers; it doesn't replace them. Four guardrails keep the quality up.

People own every decision

Engineers set direction, review every pull request, and approve every release.

Tests prove the change

800+ API tests, integration tests against a throwaway database, and 125 UI spec suites.

Rules are written down

Security and quality rules live in the repo, so AI tools follow them every time.

Docs ship with the code

44 docs pages are updated with every feature, so knowledge never goes stale.

Straight from CLAUDE.md

Examples of the rules every AI agent reads before it touches the code:

  • API endpoints must check namespace ownership and role. Being signed in is not enough.
  • Structured logging only, never string interpolation in log calls.
  • Firebase queries must use indexed filters. Never fetch a whole collection.
  • Never .Result or .Wait(). Async all the way down.
  • Feature or API changes must update the docs in the same PR.
  • Never store auth tokens in localStorage.
Shipping cadence

1,700+ changes in twelve months

Commits to the platform each month. The peaks are major feature pushes, each one tested and released through the same pipeline.

0250500Sep 25OctNovDecJan 26FebMarAprMayJunJulAugSepOct
Source: git history of the core repository. October 2026 is month to date (hatched).
The framework

No project starts from a blank page

The hard, risky, repetitive parts are built once and tested on every project, so engineering time goes into what's unique to each client.

BuildAvailable now

Touch-panel API by attribute

Mark a method with [ApiTargetMethod] and the framework discovers it and exposes it to the touch panel automatically.

For the client: Panel features take minutes to wire, not hours of join numbers.

proAV.Net.Core/UI/ApiTargetMethodAttribute.cs
BuildAvailable now

proAV.Net.Core framework

A .NET 8 library on every Crestron 4-series processor — web server, real-time hubs, cloud connector, config, monitoring and scheduling built in.

For the client: Every project starts with connectivity, monitoring, cloud, config and UI plumbing already built and proven.

proAV.Net.Core/
BuildAvailable now

Driver library

Base classes and drivers for displays, cameras, audio, TCP/serial, Shelly, Q-SYS discovery, BACnet, MQTT, sensors and PDUs.

For the client: Integration work is reused across projects, not rewritten for each one.

proAV.Net.Core/DeviceSupport/
BuildAvailable now

iPad panel app

Turns an iPad into a room panel, with dedicated room-lock mode, PIN exit and unattended recovery.

For the client: A lower-cost panel option that still behaves like an installed touch panel.

docs/docs/panel-app/dedicated-panel-mode.md
BuildAvailable now

Touch-panel UI library

An Angular library for Crestron CH5 panels — live connection services, guards, theming and ready-made components.

For the client: Modern, consistent, brandable panel UIs on every project.

user-interface/projects/proav-ui-lib/
Under the hood

A panel feature in a few lines

Mark a method on the processor with [ApiTargetMethod]. The framework discovers it and the touch panel can call it straight away, with no join numbers or signal mapping. This is real code from our reference app.

TestApp/UI/Ch5ApiHandler.cs · processor
[ApiTargetMethod("GetRooms")]
public object GetRooms()
{
    var rooms = UxEnvironment.GetRooms();
    return rooms.Select(room => new
    { room.Id, room.Name, room.ScreenName });
}
touch panel (Angular)
this.api.invoke('GetRooms').subscribe(rooms => ...);

What this means for clients

Sooner. Shared building blocks and AI-assisted engineering shorten delivery.

Consistent. Every room runs the same tested platform, so behaviour and support are predictable.

Documented. Documentation is part of every change, not an afterthought at handover.