Web Application

Montes del Acebo

When a batch has to be recalled, the difference between minutes and days is whether you can trace it. I built this system for Montes del Acebo, a food producer, to close that gap: every lot tracked from the truck that delivered it to the business that bought it, with a live picture of stock replacing a shared spreadsheet.

  • Angular
  • Spring Boot
  • Java
  • PostgreSQL
  • Docker
  • Jenkins
  • OpenAPI
  • End-to-end lot traceabilitySearch a single lot number and get its full genealogy — supplier, every processing split, every business it was sold to. What took a phone call to three people now takes one search.
  • Compliance built into the workflowTemperature and a food-safety checklist are logged automatically at every arrival and departure, and the report generates as a PDF the moment the check is done — no separate paperwork step.
  • Traceability survives processingWhen a lot is split into multiple products, each new lot inherits the parent's full history, so the chain never breaks at the butchery door.
  • Real-time stock, not a manual countAvailable, reserved, and in-transit quantities update the instant a purchase, split, or sale touches them — no more counting a cold room by hand.
Type in a lot number, get back its entire history — supplier, every split, every buyer.

One lot number, the whole chain

The core screen is this graph. Search a lot and the system reconstructs everything that happened to it: which supplier it came from, every product it was split into during processing, and every business it was ultimately sold to. Before this, that answer lived across a purchase invoice, a butchery logbook, and a stack of delivery notes — three separate places, and only if someone remembered to write it down. Now it's one search box.

Compliance starts at the loading dock

Temperature, a five-point food-safety checklist, and a lot number — captured the moment the truck arrives.

Every delivery gets logged against its purchase order: temperature on arrival, a checklist covering vehicle hygiene, pest absence, and product condition, and the lot numbers on the pallet. Nothing moves into inventory until that record exists, and the receiving report generates as a PDF automatically — no separate paperwork step after the fact.

A batch splits, the paper trail doesn't

One lot of raw chicken, broken into wings, breasts, thighs, and bones — each new lot still traces back to the original.

Processing is where traceability usually breaks: a batch goes into a room and comes out as a dozen different products, and the connection back to the source gets lost. Here it doesn't — registering a split divides the parent lot's weight across whichever products come out of it, and each resulting lot carries the parent's history forward. It's the reason the search in the first screen can fan out to every downstream product instead of stopping at the door.

Stock that doesn't lie

Available, reserved, and in-transit stock, product by product, in real time.

Every product — chicken, wings, thighs, whatever comes out of a split — shows available, reserved, and incoming weight, updated the moment a purchase, a split, or a sale touches it. No more counting a cold room by hand to find out what's actually free to sell.

The same rigor going out as coming in

Delivery mirrors receiving: temperature, checklist, lot numbers, and a full timeline from created to delivered.

Outbound deliveries get the same treatment as inbound ones — temperature logged, the checklist repeated, expiry dates tracked per lot, and a timeline recording when the order was created, prepared, and handed off. If a client calls about a batch six months later, the answer isn't "let me check" — it's already on screen.

It's a small system by scale, but it does exactly what a food producer needs from software: nothing gets lost, and nothing takes longer to find than a lot number.