Skip to content
Kyle Rivelli.

Schedule · Central time

Automation that is running right now.

I work in operations. The systems on this page run the day at a freight brokerage: posting loads, chasing carriers, reconciling reports, haggling by email, unattended and on a clock. Twenty-two of them, built in four months from inside the ops seat. The AI reads. Deterministic code decides. A person holds the kill switch.

Schedule of the unattended systems, Central time.

Syncing the Central clock.

// drawn from the real cron expressions and work-hour gates
systems in production
22
loads posted, 0 corrupted
4,342
carrier threads handled
3,808
carriers purged, each verified
2,464
unattended schedules
7

// every number sourced from production logs, ledgers and commit history

What I build

Six kinds of system. Pick one.

Each tile is a shape I have shipped more than once. Start with the smallest thing that hurts; one build is a real engagement.

Flagships

Three systems that carry the day.

Browser automationLive

The load-board refresh bot

Every 15 minutes a desk PC pulls the board from the TMS, wipes the stale postings on the load board, uploads the fresh file and posts it. Nobody touches it.

15 min
refresh cadence, unattended

// a zero-load pull never wipes the board; a failure after the wipe retries at once

How it works
Email botsShadow

The carrier negotiation bot

Haggles with carriers by email. Every dollar comes from a deterministic ladder; the AI only reads.

3,808
carrier threads handled

// the AI never touches a price; every dollar comes from a deterministic ladder, capped at 96 percent of sell

How it works
Email botsLive

The carrier ETA bot

The morning status chase, drafted, classified and followed up unattended every 20 minutes.

35
asks in the first cycle

// before the first live send: a 114-agent audit, 20 fixes, 223 passing checks

How it works

How it runs

One working day, in about a minute.

The day strip, then three of the cycles it runs: the load-board refresh, the negotiation loop, the ETA poll. Drawn from the real schedules, with synthetic data.

// plays only when you press play

The first interview

Interview the work before you interview me.

Negotiate a load against a working ladder. Drop an export in and watch it become clean postings. Type a carrier's reply and see how it gets classified. Nothing on this page is a recording.

  1. Negotiate a load
    Live Claude
    youCan you do 2,300?
    AI saw{ intent: "counter", amount: 2300 }
    codeUnder the ceiling. Up one rung: $2,300.
  2. Convert an export
    In your browser
    youA row with weight 2500
    parsed2500 lb, a weight
    codePosted. A weight can never become a date.
  3. Classify a carrier reply
    Live Claude
    youOut of office until Monday.
    AI saw{ verdict: "auto_reply" }
    codeIgnored. The ask stands.

Method

The method is the product.

The AI is boxed in

Claude reads; it never writes. Every dollar figure originates in a pure deterministic module; every routing decision is code. If the model hallucinates, the blast radius is a mislabeled reading, never a wrong price on the wire.

One-way doors get double guards

If a write cannot be undone, the state that justifies it is re-read immediately before executing. Date changes read back after writing. The one race that genuinely cannot be closed is documented, not hidden.

Shadow first, with independent kill switches

Every bot launched writing drafts, not sending. Separate mode switches, all defaulting to off. One v1 refuses live in code even though the database schema would allow it.

Some of your back office is buildable.

If your team is paying someone to post listings, chase status updates, or re-key one system into another, some of that is buildable. I can usually tell you which part in one conversation.

Or start in writing

Tell me about the manual work.

I read everything that comes in and reply myself, usually the same day.

// replies come from rivelli@kylerivelli.com