Skip to content

Sole engineer — CattleUSA, since 2018

I have been the only engineer on a live cattle auction platform since 2018.

CattleUSA runs livestock auctions over the internet — live video from sale barns, live bidding against it, mostly over rural connections that were never designed for either. I build and run all of it: the web app, the iOS client, the streaming pipeline and the infrastructure underneath.

Monthly active users
100,000
Registered bidders
300,000+
Sole developer
7 years
3 rebuilds
auction_floor.sh
  • latency --ping: Under 500ms , was 10s+
  • connections --success-rate: 99.8%
  • users --monthly-active: 100,000
  • app-store --rating ios: 4.7 ★ , 1,300+ reviews
  • Angular
  • WebRTC
  • WebSockets
  • RxJS
  • Ionic
  • ngrx
  • Laravel
  • PHP
  • Prisma
  • MySQL
  • SvelteKit
  • RabbitMQ

Capabilities_at_a_Glance

  • Live Video & Bidding

    WebRTC and WebSockets carry sale-barn video and bid traffic side by side in one Angular app. Adaptive bitrate, self-healing reconnects and a location-aware STUN/TURN pool keep it up on rural connections.

    Under 500mswas 10s+Glass-to-glass latency

  • Mobile Bidding

    An Ionic and ngrx iOS client on the same video path, tuned for mobile networks. Touch-first bidding, background audio and push alerts let buyers bid from the truck, the barn or the pasture.

    4.7 ★App Store, 1,300+ ratings

  • Platform Modernization

    A gradual move off a bespoke PHP and ODXML backend onto Laravel, Eloquent and Prisma, plus a custom OAuth server — all replaced while auctions kept running.

    3×Growth in user base

  • Running All of It

    The only engineer on the platform since 2018: the web app, the iOS client, the streaming pipeline and the infrastructure underneath, through three rebuilds.

    100,000Monthly active users

My_Origin_Story

Auctions run on a schedule nobody can rearrange. So I’ve rebuilt the platform three times while they kept running.

Since 2018 I’ve been the only engineer on CattleUSA, which runs livestock auctions over the internet: live video from sale barns, live bidding against it, mostly over rural connections that were never designed for either.

What I inherited was PHP and Flash, running more than ten seconds behind the ring. When Chrome started blocking Flash, we shipped a browser extension whose only job was turning it back on — and it bought the two years WebRTC needed. Latency is now under half a second.

Underneath, the backend moved to Laravel a piece at a time: Eloquent replaced hand-rolled SQL helpers, a Prisma-based system replaced a 26,851-element ODXML schema, and analytics finally showed whether a change had helped. With that to steer by, the user base roughly tripled.

Today I build and run all of it — the web app, the iOS client the buyers carry into the barn, the streaming pipeline and the infrastructure underneath.

“There is no benchmark for ‘auctioneer’s uplink in a metal building sixty miles from the nearest city.’ You ship a setting, you watch a sale, you adjust.”

— The Flash Years
  1. 2018

    Inherited a PHP & Flash platform

    Became the only engineer on CattleUSA, whose live video ran more than ten seconds behind the ring.

  2. 2019 – 2021

    Flash out, WebRTC in

    Kept Flash alive with a one-call Chrome extension while WebRTC was tuned against real barns, until “no fallback to flash” landed in August 2021.

    the-flash-years.md
  3. 2025

    New auth, new auction engine

    Moved sign-in to short-lived ES384 tokens without logging out a single user, and the timed-auction engine from Python to Go.

    three-tokens-per-login.md
  4. Dec 2025

    The upgrade week

    Took the shipping mobile app through Angular 20 and Capacitor 8 in a two-day blitz, with strict templates as the safety net.

    the-upgrade-week.md
  5. Now

    Running all of it

    The web app, the iOS client, the streaming pipeline and the infrastructure underneath, for 100,000 monthly active users.

Active_Deployments

Every one of these started with a real constraint on a live platform. Here is what made it hard, what I built, and what changed.
  1. Production — 500+ concurrent viewers

    Live video that holds up on a rural connection

    The CattleUSA auction floor, with live video beside the bidding panel

    Glass-to-glass latency

    Under 500ms was 10s+

    The Problem
    Buyers bid against a video feed. If the feed stalls, they miss the lot — and most of them are watching from places where bandwidth is scarce and unreliable. The platform I inherited was PHP and Flash, running more than ten seconds behind the ring.
    My Approach
    A WebRTC and WebSockets pipeline carrying both video and bid data inside the Angular app, with adaptive bitrate, reconnection logic that watches connection state and re-establishes on its own, and a global pool of STUN and TURN servers selected by location so connections survive firewalls and NATs.
    The Outcome
    Latency went from over ten seconds to under half a second. Connections now succeed 99.8% of the time, and a single auction carries 500+ concurrent viewers without the quality dropping.
  2. Live — App Store

    Putting the auction in a pocket

    The CattleUSA iOS app on two phones, showing a live auction and the lot list

    App Store, 1,300+ ratings

    4.7 ★

    The Problem
    Auctions run on a schedule nobody can rearrange their day around, and the people bidding are rarely at a desk. Being tied to a browser meant being tied to a building.
    My Approach
    An iOS client built with Ionic and ngrx: the same live video path tuned for mobile networks, touch-first bidding controls, background audio so the ring keeps playing while the phone is pocketed, and push notifications for lots a buyer is tracking.
    The Outcome
    It holds 4.7 stars across more than 1,300 ratings on the App Store, and buyers now take part from the truck, the barn, or the pasture.
  3. Production — rebuilt while auctions ran

    Rebuilding the platform underneath the business

    The original CattleUSA site, built in PHP with a Flash video player

    Growth in user base

    3×

    The Problem
    The original system stored its schema in a bespoke ODXML format, handled passwords in a way that would not survive scrutiny, and reported nothing back — there was no way to know whether a change had helped. All of it had to be replaced while auctions kept running.
    My Approach
    A gradual migration to Laravel, moving the data access layer onto Eloquent and replacing the ODXML schema system with a Prisma-based one. A custom OAuth server extending the PHP League implementation added Google and Facebook sign-in. A SvelteKit surface serves metadata to search crawlers, and analytics finally made the effects of a change visible.
    The Outcome
    The user base roughly tripled once there was instrumentation to steer by — to 100,000 monthly actives and over 300,000 registered bidders.

Live_DemoINTERACTIVE

A simulation of the auction floor behind Live video that holds up on a rural connection. Your screen sees each bid only after the glass-to-glass delay — switch to Legacy and watch it fall ten seconds behind the ring.

simulated — no real bids
auction_ring.ts — live
$ ./auction_ring --transport=webrtc --lot=0413 CONNECTED

Lot 0413 · simulated

18 head · Feeder steers

Weight class 450–500 lb

BIDDING
At the ring
$256.00
lot 0413 · now
On your screen
$256.00
lot 0413 · 300ms old

In step with the ring

Glass-to-glass300ms
bid_feedring → screen
  1. #372$256.00+0.25on screen
  2. #246$255.75+0.50on screen
  3. #754$255.25+0.25on screen
  4. #289$255.00+0.50on screen
  5. #768$254.50+0.50on screen
  6. #482$254.00+0.50on screen
  7. #228$253.50+1.00on screen

System Architecture

Sub-500ms video from sale barns on rural links

  1. sale_barn.camLive video from the ring
  2. webrtc.mediaAdaptive bitrate
  3. stun_turn.poolGlobal, selected by location
  4. viewers500+ per auction
websocket.bidsBid traffic, alongside the video path, inside the same Angular app
  • Under 500ms glass-to-glass (was 10s+)
  • 99.8% connection success
  • 500+ concurrent viewers per auction
  • Adaptive bitrate
  • Reconnects on its own
  • Survives firewalls and NATs

Field_Notes

Long-form write-ups from building and running the platform.
All field notes
  • 3 min read

    The 429 Storm and 300 Idle Swipers

    Performance forensics in a live auction viewer — one hidden request per bid per viewer, and a catalog tab that booted 300 carousels nobody asked for

    • Angular
    • Performance
    • Real-Time
  • 3 min read

    PDF Generation, Five Engines Later

    htmldoc, TCPDF, a Go service, Dompdf, then Chromium — and a 142-page catalog that went from 53.6 seconds to 1.9

    • PDF
    • Laravel
    • Performance

FAQ

The questions that come up most about how the auction platform works.

Something else? Ask me directly

  • What technologies power CattleUSA's real-time video streaming?

    CattleUSA uses WebRTC and WebSockets to deliver low-latency video streaming, enabling real-time participation in livestock auctions from anywhere. The system includes adaptive bitrate streaming and connection resilience features to ensure reliable performance even in rural areas with limited connectivity.

  • How does the CattleUSA mobile app enhance the auction experience?

    The CattleUSA iOS app, built with Ionic and ngrx, allows ranchers and buyers to participate in auctions, manage listings, and track transactions directly from their mobile devices. It features optimized video streaming, touch-friendly controls, and background audio mode for a seamless mobile auction experience.

  • What architectural improvements were made during CattleUSA's modernization?

    The modernization included transforming the data access layer with Laravel's Eloquent ORM, replacing a legacy ODXML schema system with a Prisma-based approach, implementing cross-platform compatibility improvements, and enhancing the platform's SEO through a SvelteKit implementation that serves optimized metadata to search engine crawlers.

  • What impact has the modernized CattleUSA platform had on the livestock trading industry?

    The modernized platform has increased auction participation by over 200%, reduced streaming latency from 10+ seconds to under 500ms, improved connection success rates to 99.8% even in areas with limited connectivity, and now supports over 500 concurrent viewers per auction without quality degradation.

  • How does CattleUSA handle network interruptions during live auctions?

    CattleUSA implements automatic reconnection logic that monitors connection state and attempts to reestablish connections when interruptions occur. The platform also uses a global network of STUN and TURN servers to facilitate connections through firewalls and NATs, with automatic server selection based on user location and network conditions.