Blog

Insights on AI-powered support and growing your business from auxx.Ai

Record Rules: Building an Automation Engine That Survives Bulk Sync

Every CRM has 'when field X changes, do Y' automation. The hard part nobody writes about is what happens when 50,000 records change at once with events suppressed — our answer is a change manifest that turns O(records) events into O(1).

Markus Klooth
Markus Klooth
Read Record Rules: Building an Automation Engine That Survives Bulk Sync

How an Email Becomes a Ticket: Inside Our Ingestion Pipeline

Gmail push notifications, Outlook Graph subscriptions, and raw SES MIME all converge on one ingest function. A deep dive into the dedup cascade, threading, rate limits, and realtime fan-out that turn email into support tickets.

Markus Klooth
Markus Klooth
Read How an Email Becomes a Ticket: Inside Our Ingestion Pipeline

Connections, Part 2: The Secret Lifecycle — Masking, Merging, Refreshing

Editing, masking, and refreshing credentials without ever sending a secret back to the browser: sentinels, nesting-aware merges, and single-flight OAuth refresh. Part 2 of a two-part series on our connections model.

Markus Klooth
Markus Klooth
Read Connections, Part 2: The Secret Lifecycle — Masking, Merging, Refreshing

Connections, Part 1: One Model for Every Connection

How we collapsed OAuth2, client-credentials, API keys, and multi-field secrets into one blueprint table and one instance table — and made auth application declarative data instead of per-provider code. Part 1 of a two-part series.

Markus Klooth
Markus Klooth
Read Connections, Part 1: One Model for Every Connection

Self-Hosted Realtime, Part 1: Sockudo, Rooms, and Channel Auth

How we replaced hosted Pusher with a single Rust container and built a typed room registry with ACL dispatch on top of the Pusher protocol. Part 1 of a two-part series on our realtime architecture.

Markus Klooth
Markus Klooth
Read Self-Hosted Realtime, Part 1: Sockudo, Rooms, and Channel Auth

Building an AI Agent Engine, Part 3: The Domain Layer

A generic engine is a runtime, not a product. This is how ours becomes Kopilot: page-scoped tools, prompt assembly built for caching, reference cards the model renders into the UI, and autonomous runs. The final part.

Markus Klooth
Markus Klooth
Read Building an AI Agent Engine, Part 3: The Domain Layer

Building an AI Agent Engine, Part 1: A Domain-Agnostic Harness

How we built the runtime that powers Kopilot: parts-based messages, async-generator streaming, and the safety valves that keep a model from running away. The first of a three-part deep dive.

Markus Klooth
Markus Klooth
Read Building an AI Agent Engine, Part 1: A Domain-Agnostic Harness