The supply-chain graph editor shown as a tilted browser window among 3D-rendered carrots, its nodes wired left to right from raw materials through sorting to a product, recipe and batch group.

RobinFood

Client
RobinFood (now RegenOS)
Role
Founding Product Designer
Timeline
2024–2026
Deliverables
Field research, Marketplace data model, Frontend, built with AI, Design-to-deployment pipeline
Dutch regenerative farms, contracted
12
Dutch production companies, onboarded
4

RobinFood was a marketplace for the produce Dutch farms could grow but not sell: good crops rejected on appearance, with no way to price them below "perfect." It let farms sell by grade, with sorting and cutting as services, to production companies that could not otherwise use them.

I was the founding product designer on a four-person team of founder, data scientist, engineer, and me. I owned research, product strategy, and the frontend, which I designed and built with AI. The company later became RegenOS, and I worked through that pivot too; the screens here are all RobinFood-era.

The subject is also personal: my grandfather, Alfred Brugger, led Switzerland's wheat and grain department and later became its minister of agriculture. Two generations on, this was my version of the same work — the trade of agricultural commodities, pointed at food waste.

The problem

I spent discovery in dozens of interviews with Dutch growers and production companies, and structured what they told me into a jobs-to-be-done corpus: 120 job statements across seven roles, built as data so AI could keep working with it through design. Underneath everything sat one finding:

The farmers put a number on it:

Middlemen are sorting and grading my produce, and 20% gets wasted. I lose 20% of the capital I could have earned.

Grower, discovery interview

The buyer had the same problem, upside down:

Working with Grade B and C produce is impossible, because I don't have the standardized machinery to deal with this process.

Production manager, discovery interview

The farmer cannot sell it; the manufacturer cannot use it. The sorting and cutting had to happen somewhere, and nobody owned it. That became what the marketplace sold:

The solution

Everything from here on is work I led: the strategy, the data model built with the data scientist, the flows, the screens, and the frontend code.

Six operations, one carrot

Before designing anything I mapped the whole chain and named six products we could build on it:

Six product bets on one supply chain. RobinFood and Food Trust went first, as a pair.
OperationThe productCalled
RegenOSFarm production management: yield forecasting, sensors, field insightLater
RobinFoodBuy and request commodities, on spot or on contractNear term
Food TrustTraceability, from field to the shelf it sold onNear term
JuggernautThe manufacturer's own inputs and outputsLater
LabrattatouileDesign and dispatch recipes with production companiesParked
PitchforkA bridge from the production chain to consumersParked

Then the positioning. I plotted the tools these companies already used on two axes and asked the founders to place us:

StructuredFlexibleCollaborativeOut of the boxClassic ERPFood-specific ERPModular / low-codeSupplier portalsTraceability networksRobinFood
Incumbent tools plotted on structure and collaboration. RobinFood sits top-right: flexible and collaborative, the hardest quadrant to build for.
Chart data table
ProductFlexibleCollaborativeQuadrant
Classic ERP0.120.16Out of the box / Structured
Food-specific ERP0.300.10Out of the box / Structured
Modular / low-code0.850.22Out of the box / Flexible
Supplier portals0.180.72Collaborative / Structured
Traceability networks0.300.86Collaborative / Structured
RobinFood0.720.74Collaborative / Flexible

The model underneath

I built the data model with the data scientist, starting from a real grower's planning spreadsheet. It had a tell: columns for waste volume, almost always empty. Waste was not sellable, so nobody wrote it down.

The model resolved into seven domains:

The seven domains of the data model, resolved down to the individual bed so one crop can split across several chains.
DomainWhat it holds
UserWho is acting, and on whose behalf
CompanyThe farm or production company
GeospatialParcels, blocks and beds
OrganizationalHow those parcels are grouped and worked
Biological & ecologicalSoil type, condition, what the ground can support
TemporalCrop cycles: previous year, this year, next year
TransactionalListings, requests, offers, orders, invoices

Requests and listings are both batches, matched many-to-many: a 500 kg request is filled by several farms, which is why the buyer's dashboard leads with percentage fulfilled rather than an order status. None of this is hypothetical. It is visible in the pilot farm's real season plan:

The pilot farm's carrot crop, split across three concurrent chains. The unsold two-thirds is the row RobinFood exists for.
295 t of carrots, one parcelNational wholesalerBox-scheme retailerVia RobinFood
Volume100 t10–15 t185–195 t
Price per kg€0.69€0.85Open
ServicesNoneWashing, storage, processingVia the platform

Grade, specification, service

Grade is a first-class primitive and carries a price. The same crop lists as Grade A at €0.65 a kilo, Grade B at €0.45, Grade C at €0.35. Imperfect produce becomes a line item with a buyer.

The buyer's request book: volume, target price, grade and services per row, with fulfilment tracked at the top.

Specifications sit beside grades: a Grade 3 carrot at 50–60mm is a different product from one at any size, and the request can say so.

A single request: grade beside a 50–60mm size specification, washing required, matching offers below.

Following one lot through the chain showed why services had to be their own thing:

One lot, followed through
  1. 011000 kg carrotHarvested. Uncut, unwashed. One farm, one crop cycle.
  2. 02Washing serviceA third party, at their facility, at their price.
  3. 03Cutting serviceA second third party. Same lot, a second cost.
  4. 04500 kg → buyer ACut and washed, because that is what they specified and paid the services on.
  5. 05500 kg → buyer BThe lot splits here. Same crop, same farm, none of the work, a different price.
One lot, two buyers, two different amounts of work. If washing were an attribute of the carrot, the farm's inventory would stop adding up.

So services became conditions on the trade: requirements a buyer sets that must be met before a supplier is allocated into the chain. The work itself is done by third-party providers who get paid for it, so it costs extra and shows up in the contract. The production company will buy Grade B once it has been through a cutter.

An offer for a Grade B lot: crop photos, the farmer's note, and washing priced as its own row in the contract total.

Spot or request

There were two credible ways for a buyer to get produce, and for a while we designed both:

  1. Flow 1: browse the spot market

    Search a commodity, filter, add to cart, check out. A shop: it works the instant there is stock on the shelf, and not one minute earlier.

  2. Flow 2: post a request

    State commodity, volume, target price, grade, services and date. Farms answer with offers; you compare and accept. Works with an empty warehouse.

We went request-led. A purchase order starts from a demand-side need; nobody browses for carrots. Matching was a human trader at first, on purpose: every manual match was training data for the automation that would replace them.

The supply chain as a graph

After the trade, production companies describe what happens to the crop. The industry stores that as a table; we drew it as a graph, because the graph is what the auditor requires:

Help me be prepared when the auditor arrives, so I can stress less and focus on running my business.

Job to be done, production manager

Built in that shape, the compliance document becomes a byproduct of setup instead of a week of redrawing each year. Every branch is another sellable output (the team called it valorization), and AI drafts the first version from a plain-language description.

The chain editor: raw material → sorting → product → recipe → batch group → packaging → inspection, with an AI panel to draft the first version.

Two users, two complexity budgets

The same system serves a farmer checking prices between jobs and a production planner living in it all day, so the two sides got deliberately unequal interfaces.

The farmer product has five core modules: revenue, orders, crops, help and settings. Incoming requests are the heart of it.

The farmer dashboard: revenue, orders, and incoming requests, with the grade ladder priced as three offers on one crop.
My Crops: everything the farmer maintains. Three states per crop, nothing else to fill in.

The production product has twelve modules, because four jobs share one account: buying, running the lines, meeting the auditor, chasing the invoice. The split came from the jobs-to-be-done corpus. Density is a feature here and a failure two screens earlier.

The production side: a live batch table with recipe, line, size and progress, beside the twelve-module sidebar.

The design-to-code pipeline

I designed and built the frontend with AI, and in February 2026 wrote it up as an architecture proposal: design velocity was capped by frontend engineering capacity, and hiring for it would have spent the runway.

  1. Research

    Establish the technical patterns and constraints before design starts.

  2. Figma: flows and IA only

    No pixel-perfect screens; production fidelity gets decided in the component library.

  3. Component library in React + Tailwind

    The design system as real code, maintained by designers, consumed by engineers.

  4. AI as pair programmer

    Claude Code wires components to state and API contracts while the designer stays in product thinking.

  5. Sandbox

    Working software in front of stakeholders instead of static mockups.

  6. GitHub as the boundary

    Pull requests, not handoffs. Engineers review and merge.

The core argument: consistency is enforced through code, not documentation. Change a component and every screen changes; break its API and the type errors say where.

The impact

RegenOS moved the product a layer down, from trading the harvest to an operating system for the farm, built on the second research finding: no insight. I stayed on to design it.

RegenOS today: soil moisture, EC, temperature and NDVI per plot, with the reading left to the farmer.

My brief was a translation job. The data scientist's dashboard fused satellite indexes, radar and weather; it was correct, and almost unreadable. I rewrote it as problem–solution fit, in the farmer's sentences:

Problem–solution fit for the farmer
What the farmer saysWhat they get
“I don't know which fields to check first.”Fields coloured against their own historical normal: a priority list for this morning
“Is this field really behind, or just late?”This year's curve against the historical spread for that day of year
“Is it the weather or something else?”Rainfall and temperature plotted under the growth curve
“I only see problems when it's too late.”Season playback, plus a threshold they set themselves

One control matters most: the farmer sets the alarm threshold. A system that flags every deviation trains its users to ignore it. The dashboard shows what is happening and stops there; it supports the decision, the farmer keeps it.

Learnings

One idea never shipped: an emissions subsidy, minted by a platform treasury and applied at the moment of purchase.

The same trade priced two ways: the local lot lists $10 dearer, ends up $1.50 cheaper, and the farm is paid more.
Per 100 barrelsImported wheatLocal wheat
Listed price$100.00$110.00
Subsidy, minted by the treasury−$5.00−$16.50
What the buyer pays$95.00$93.50
What the farm receives$100.00$110.00

It was cut, rightly: it needed a token economy before the marketplace had a single completed transaction. What I keep from it, and from the whole arc:

  • Learning

    Value lives in the transaction, not the marketing

    Grade as a column, service as a priced condition, emissions as a price: three attempts at one idea. A sustainability product becomes real in its data model or stays a poster.

  • Learning

    Manual first, then automate

    The human trader was not a compromise: every match they made was ground truth for the algorithm that would replace them. Launching with the algorithm would have been guessing.

  • Learning

    Know why the prototype worked

    The no-code tool's one-table limit leaked into the first schema. Knowing which parts of a model come from the domain and which from the tool is most of the work of throwing a prototype away properly.