Tools in production.
Real clients, real systems. The demos use each client's own design, with fictional data.
A CRM built around fish, boxes and grades.
- Client
Grenada Blue USA, Miami. Fresh whole tuna by air from Grenada and Trinidad, several flights a week, sold to restaurants and markets the same day.- Problem
- Inventory was whatever the last WhatsApp said. Unsold fish from Saturday vanished from view when Tuesday's flight landed. Landed cost per pound was calculated after the fact, if at all.
- Built
- Customers with product and channel preferences. Inventory by lot, box and grade, including a carried-over pool so nothing disappears until it's sold. Drag-and-drop allocation and pick tickets that work on an iPhone. Offers that write themselves from live stock and go out over WhatsApp or email with opt-in tracking. Daily recap by email. Receivables from QuickBooks.
- Stack
- Next.js, Supabase with row-level security, Vercel. Two-factor auth for staff. Audit log on every customer read and write. 241 automated tests.
- Result
- Packing lists and airfreight costs now land in the CRM weekly without anyone typing them. Every fish carries its cost per pound from the boat to the invoice.
A packhouse app for an island with bad wifi.
- Client
- Grenada Blue, at origin: the packhouse in Grenada that grades and boxes fish for the flight to Miami.
- Problem
- Grades, weights and box contents were on paper and in heads. Settlement with the boats depended on numbers nobody could audit. Airway bills occasionally went out blank.
- Built
- An iPad web app with PIN login and four roles enforced on the server: packers log and grade, quality control pre-plans sessions, the importer sees boat scores and settlement prices, admin manages accounts. Labels print to Bluetooth printers. Packing lists and airway bills are generated and emailed before the flight. A bearer-authenticated endpoint feeds the CRM.
- Stack
- Vite front end, Node API, managed Postgres with daily backups, staging environment, CI with secret scanning, over 180 production releases.
- Result
- Every grade and price change has an audit row. Settlement workings are visible to exactly the two people who should see them. No blank documents since.
An invite-only auction room for the day's catch.
- Client
- Grenada Blue, selling the top of the catch to the buyers who'll pay for it.
- Built
- Per-auction invite links, one photo per fish with a pinch-to-zoom lightbox, per-grade starting and reserve prices, outbid emails, results shown to each bidder when the room closes, and a clean export to the CRM. Photos are retained for thirty days and never hard-deleted by a sync.
- Detail
- Everything is built to be run from a phone by the person standing in the cold room: camera upload, HEIC handling, copy-link that survives iPhone Safari.
The auction is the same inventory, the same fish labels and the same customers as the CRM — one source of truth, three doors into it.
Landed cost per shipment, from the inbox.
- Client
Seasons Farm Fresh, Miami. Tropical and exotic fruit by air from Central America and the Caribbean.- Problem
- Freight, handling and broker charges arrived as PDFs across dozens of emails. Profitability per shipment was a guess until month end.
- Built
- A dashboard that treats one inbound email as one shipment, extracts the charges from the attached documents, classifies which business each line belongs to (the owner also handles fish), and shows cost per shipment and per box as the documents arrive.
- Rule
- Never double-count an airway bill's charge components. One shipment, one record, every component listed once.
- Also for this client
-
Guanabana packhouse. Farmers, batches and boxes for a soursop operation: weigh each box, print a QR label, settle with the farmer. Reversible deletes; pricing visible to admin only. When its database hit 91% full we found the cause, cleaned it from 402 MB to 24 kB, and verified every real record was unchanged.
Grove map. 735 mango trees in a South Florida botanic garden's grove, each with a four-state harvest status, harvester colors, live presence of who's in the grove, and tap-to-record voice notes from an iPhone.
Variety database. A mango variety reference with imports and PDF and Excel exports, used for the catalog and the retail program.
Website, product pages, catalogs. Redesign of the company site (seasonsfarmfresh.com (opens in a new tab) ↗), a landing page for a new frozen product, seasonal catalogs, and a 20-pound produce carton design taken from concept to print-ready.


Purchase orders in, draft invoices out.
- Client
Verea Clay Roof Tile, Miami. Spanish clay tile since 1967, sold through roofing distributors across Florida.- Problem
- Seven distributors, seven ERP formats, mostly scanned. Every PO was retyped by hand into the company's internal "pending invoice" document — slow, and the errors were expensive.
- Built
- An intake worker that watches a mailbox, reads the attachment, validates every line against the digitized price list, renders the pending invoice as a PDF in the company's own layout, and replies to whoever forwarded it.
- Stack
- Python, deterministic validation engine, headless Chrome for PDF, one small always-on machine. The model is called exactly once, for transcription.
- Result
- Turnaround measured in minutes. Fifty automated tests hold totals to the penny against real historic invoices.
The rules the code enforces are the company's rules, written down for the first time: squares from pieces, pallet breakdowns, billing weights, a stripping charge per partial pallet, freight passed through at the PO amount, list price always — with a yellow flag when the distributor's price disagrees. When something can't be resolved, the reply says exactly what and why. A new distributor is one row in a crosswalk table.


A dealer map every rep can carry.
- Client
- Verea Clay Roof Tile. Sales reps and contractors needed to see where the product was installed.
- Problem
- Installation records lived in a spreadsheet. Reps couldn't answer "what have you done near me?" on a job site, and the company couldn't show a contractor their own portfolio without showing everyone's.
- Built
- A mobile-first web app with a home-screen icon. Staff upload the spreadsheet; addresses are geocoded and cached. Contractor logins see only their roofs. Guest codes tied to a ZIP show every roof within thirty miles with no client attribution. Street and satellite basemaps.
- Stack
- Node, Postgres, open vector tiles and public imagery. Staff accounts require two-factor authentication.
- Result
- Cut over from the previous mapping tool. A sales conversation that used to need a laptop now happens on a phone in a driveway.
The logistics is the job. The software follows.


Sourcing and export programs
Supplier RFQs across multiple processors, spec and grade decisions, deposits and delivery windows, and full-container reefer moves routed through Miami to Caribbean consignees with the export paperwork handled on our side. The same discipline as the software: written down, dated, reconciled.
Airfreight and customs
Weekly tuna imports through MIA: airway bills, packing lists, broker coordination, and the tariff work — HTS classification, tariff-rate quota mechanics, and the marine mammal comparability rules that decide whether a fish can enter at all. Built a small tariff calculator so the answer is repeatable.
Sales and channel work
Placed excess 2+ grade yellowfin with Miami sushi, Nikkei, poke and steakhouse accounts from a built outreach list. Buyer outreach packs by region for a produce importer. Trade-show planning and booth economics for a national seafood expo. A tiered retail engagement program with a "meet the farmer" storytelling platform, tree-ripened mangoes as the hero.
Smaller tools that earn their keep.
| a | Tariff calculator | Static, single-purpose, stable since April. Enter the entry, get the duty. "Small and don't over-engineer it" is a design brief. |
| b | Personal operations desk | A phone app that reads the club's inbox read-only and syncs open tasks from each client's plain-text task file, so what we owe every client is one screen away. Built to run our own week the way we'd want a client's tools to run ours. |
| c | Email, identity and IT | Microsoft 365 and WhatsApp Business setup for two companies, mailbox authentication cleanups, the recurring "Outlook stopped working" calls. Not glamorous. Someone has to own it. |

Jack's Fish Club 




