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).
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.
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.
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.
Self-Hosted Realtime, Part 2: Echo Suppression, Refcounting, and Live Editors
The client side of our realtime stack: one header that kills echo everywhere, refcounted subscriptions with useSyncExternalStore, and collaborative-ish TipTap editors without CRDTs. Part 2 of a two-part series.
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.
The built-in skills are a starting point. The real leverage is turning your team's best judgment into reusable, data-wired skills. Here's the pattern we use for every one.
Building a Data Connector Engine, Part 3: Slices, Webhooks, and Surviving 50,000 Records
The orchestration layer of our sync engine: bounded resumable slices, a three-state commit verdict, opaque cursors across six pagination styles, and why the webhook is the signal but the fetch is the truth. Part 3 of a three-part series.
Building a Data Connector Engine, Part 2: Identity, Relationships, and Reconciliation
How synced records stay the same record: the identity cascade, the bind table, deferred relationship resolution, and why deletes are the hardest part of sync. Part 2 of a three-part series.
Support isn't the only inbox that runs on repetitive prep. Three AI skills that research the account, brief the deal, and coach the call, off your CRM, not a blank page.
Building a Data Connector Engine, Part 1: Streams, Mappings, and the Entity Sink
How we built the sync engine that pulls Shopify orders, Stripe customers, and any REST API into our entity system: streams, recursive mapping trees, and one choke-point writer. Part 1 of a three-part series.
The tickets that hurt are the 40-message monsters you inherit halfway through. Four AI skills, run in sequence, turn 'read all this and figure it out' into a 30-second oriented start.