Jack's Fish Club Operations & software, Miami, FL, USA
Tool demos

Tools in production.

Real clients, real systems. The demos use each client's own design, with fictional data.

Case one

A CRM built around fish, boxes and grades.

Client
Grenada BlueGrenada 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.
Demo — all data is fictional
Grenada Blue's CRM design. Open the demo ↗
A tuna loin being cut and bagged
A school of yellowfin tuna
Case two

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.
Demo — all data is fictional
The packhouse app, as the floor sees it. Open the demo ↗
Tail-cut samples with grades written beside each
Fish being packed into insulated boxes
Case three

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.
Demo — all data is fictional
The bidder room and the staff side. Open the demo ↗

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.

Case four

Landed cost per shipment, from the inbox.

Client
Seasons Farm FreshSeasons 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.
Demo — all data is fictional
Guanabana packhouse. Open the demo ↗
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.

A hand holding a bunch of fresh lychees on the tree
Mamey sapote ripening on the tree
Case five

Purchase orders in, draft invoices out.

Client
VereaVerea 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.
Demo — all data is fictional
Verea's own invoice layout. Open the demo ↗

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 Spanish-style Miami home with a red clay barrel tile roof
Clay roof tiles in the foreground with the sea beyond
Case six

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.
Demo — all data is fictional
Verea's brand system. Open the demo ↗
Aerial view of a home with a graphite clay tile roof and pool
A Mediterranean-style home with a terracotta clay tile roof

The logistics is the job. The software follows.

Palletized cartons in a cold room
Boats at an origin dock

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

Smaller tools that earn their keep.

aTariff calculator

Static, single-purpose, stable since April. Enter the entry, get the duty. "Small and don't over-engineer it" is a design brief.

bPersonal 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.

cEmail, 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.