Setton Farms · day job · 2025 to now
Setton Farms
Line-of-business systems for a food processing operation. Orders, purchasing, inventory, quality, shipping and grower payments, plus the platform the other applications sit on. These are team systems. I lead the work on several of them and I maintain the foundations the rest are built on.
C# · .NET 8 and 10 · ASP.NET Core · EF Core · SQL Server · React 19 · TypeScript · TanStack Router and Query · MUI · AG Grid Enterprise · Hangfire · QuestPDF · Serilog
The ERP the business runs in
A replacement for the VB.NET desktop application that ran the company for years. Seventeen modules covering sales orders and contracts, purchasing, accounts receivable, inventory across several facilities, processing and grower payments, quality and lab results, manufacturing, and shipping.
.NET 8 behind a React and TypeScript client, with TanStack Router for file-based routing, AG Grid Enterprise for the data-heavy screens, and generated API clients so the frontend cannot drift from the backend contract. It reads across roughly eight SQL Server databases, and deploys blue and green, so a release is a slot swap rather than an outage.
A good chunk of my time on it has gone into moving reports off a client-side renderer and onto server-rendered PDFs: invoices, bills of lading, sales contracts, grower payment statements, receivable ageing and the rest.
Accounts payable, matched three ways
Vendor invoice against purchase order against packing slip. Invoices arrive by OCR from a watched folder through a background worker service, get matched and routed through an approval workflow with delegations and per-vendor rules, then batch out as NACHA ACH files transmitted to the bank and reconciled back into the accounting system.
The document viewer serves three scanned documents side by side. Rather than base64 the images into JSON and pay a third more bytes for it, the API returns a multipart response with the metadata in one part and the raw image bytes in the others, drawn in a deep-zoom viewer.
Cost allocation on .NET 10
Tracks invoices from the third-party managers who operate the orchards, and splits each one across a recursive tree of cost buckets, divided per block by acreage. Multi-stage approvals, budgets per bucket, and ACH payouts at the end of it.
Layered into domain, infrastructure, application and API projects, with EF Core migrations applied on startup and integration tests running against a real SQL Server in a container rather than an in-memory substitute. Data that belongs to the ERP is read through views mapped as keyless entities, so the two systems share information without sharing a schema.
The platform underneath
Background jobs used to run in-process inside each application, which meant a blue-green deploy could have two copies of the same job running at once. Now there is one Hangfire worker for the whole estate, with a job catalogue, run history, a kill switch, and a routing parameter that decides which facility's data a given run operates against.
I also maintain the shared C# libraries and the shared React packages the other teams build on: data access, Active Directory and Windows authentication, email and messaging, printing, the PDF reporting library, and a design-system package set. Six applications are built on them. It is a good deal of work that does not have my name on a screen anywhere.
Other pieces I work on
The Android side of the warehouse handheld app, a React Native build that locks a rugged Zebra device into a single application for scanner operators through device-owner provisioning. And a Windows service that ingests shipping scale documents, runs them through OCR and document conversion, and files them against the shipping records that the accounts payable matching later reads.