Case study · Le Cube, freelance

K’Fet

A complete business platform built for a Martinique non-profit fighting food waste, from the collection van all the way to dispatching.

Role
Product engineer
Client
K’Fet, via Le Cube
Period
April 2026 — present

Context

K’Fet collects unsold food from bakeries, farms and restaurants across Martinique and redistributes it. The whole chain ran on informal messages and spreadsheets: nobody could say precisely what had been collected, weighed or stored, or what was nearing its expiry date. The team is about ten people split between the field and the depot, with very different needs depending on where they stand.

K’Fet back-office dashboard: alert banner for products nearing their expiry date, four daily indicators, table of the day’s collections and an activity log.
The back-office, in place of the spreadsheets: the day’s routes, the stock, what is nearing its expiry date and the kilos already redistributed, on one screen.

Screenshots taken from the running applications on the demo dataset — the partners shown are fictional. The apps themselves are French-only.

The chain, end to end

01
Collection route planning
Scheduling pickups at partner sites — bakeries, farms, restaurants — around available slots and expected volumes.
02
Geolocated field entry
The native iOS and Android apps record each collection on site, with position attached, even on a weak connection.
03
Intake and certified weighing
On arrival at the depot every batch is received and weighed; the certified weight is the reference for traceability and reporting.
04
FIFO / FEFO stock management
Stock follows FIFO and FEFO rules, with expiry alerts so whatever is closest to its date leaves first.
05
Dispatching
Food is allocated to redistribution destinations based on what is in stock and how urgent the dates are.
K’Fet iOS app, collection point screen: map of Fort-de-France showing the partner and the collector’s position, a 900-metre distance, expected categories, and Directions / Start entry buttons.
iOS — one stop on the route: the partner, the drive from the collector’s actual position, and the donation categories expected on site.
K’Fet Android app, new dispatch screen: choosing one of four product categories, then a destination site — animal feed, composting, cannery.
Android — the other end of the chain: a product category leaves the stock, towards one of the redistribution destinations.

Architecture

Field and depot don’t use the same tools: native apps for collection, a back-office for operations, one shared API for everything else. Traefik at the front, a single source of truth for the data.

Admin back-office
Managing routes, stock and partners for the depot team.
Angular 19 · standalone · NgRx Signal Store
Business API
The core: stock rules, weighing, traceability, REST surface.
NestJS · Prisma · MySQL 8
Native apps
Field collection, with camera, geolocation and fast data entry.
Swift / SwiftUI · Kotlin / Jetpack Compose
Infrastructure
Reverse proxy, certificates, environments and automated deployments.
Docker · Traefik · GitLab CI/CD
K’Fet field app in a mobile browser: connection status banner, partner Boulangerie Ti-Pain, an estimated weight of 12.5 kg of pastries, photo attachment, and a Validate collection button.
The same step in the browser: the collector estimates the weight per category, the certified weighing still to be done on the scales, back at the depot.

The plain-language assistant

Rather than adding yet another reporting screen, I wired a self-hosted RAG assistant (LangChain + Ollama) to an MCP server exposing the business API as tools. The team can ask “how many kilos of bread did we collect from our northern partners this week?” and get an answer grounded in the real data. Everything runs locally, which matters for a non-profit watching both its costs and its data.

Stack
RAG · LangChain · MCP · Ollama · NestJS · Prisma · Angular 19 · Swift / SwiftUI · Kotlin / Jetpack Compose · MySQL 8 · Docker · Traefik · GitLab CI/CD