Skip to content
All projects

Cherry Bomb Vending Machine

building

Full-stack / IoT

A QR-code vending machine for handmade goods: one Pix covers a multi-item cart, and a payment webhook is the only thing allowed to move stock.

The repository is public, but this case study is published without a link while a credential found in its documentation is rotated.

// the case

problem
Selling handmade pieces in residential buildings means standing by a table for hours or trusting an honour box. A conventional vending machine does not fix it: a card reader charges a monthly fee and a per-transaction cut that an R$ 8.50 hair clip cannot absorb, and cash has to be collected and secured. The machine needed to sell twenty distinct items, unattended, at R$ 5.50 to R$ 24.50, with no hardware in the customer's path.
solution
The payment terminal was removed from the machine and replaced by a sticker. A QR code on the glass opens a mobile storefront that mirrors the machine's physical layout — a 4×5 grid where every card is a real coil, addressed A1 to E4. The customer fills a bag across several slots and pays one Pix for the whole cart: the backend totals it server-side, asks Mercado Pago for a single charge, and waits. Nothing about the order is trusted until the webhook reports approved.
impact
Not measured, and deliberately not claimed. The software path runs in production end to end — storefront, Pix charge, confirmation webhook, stock subtraction — but physical dispensing is not implemented: the ESP32 firmware file is empty and there is no MQTT publisher. The honest summary is a payment and inventory system working in production, attached to a machine that cannot yet turn its coils. Any figure about units sold would be fiction.

// my role

Sole author, over four days in April 2026 — product definition, FastAPI backend, PostgreSQL schema, Mercado Pago integration and webhook, Cloudinary image pipeline, the customer storefront, the admin panel, the visual identity, and deployment. The hardware protocol is mine too; the firmware that will consume it is not written yet.

// overview

The project starts from a constraint rather than a product idea. In Brazil, Pix is instant, free for individuals and already installed on every customer's phone as their banking app — which makes the phone a better payment terminal than anything that could be bolted to a vending machine. So the machine was designed with no payment hardware at all. The consequence is that almost the entire product is a web application, and the physical machine is reduced to a grid of coils, a controller and a QR sticker. The 4×5 grid is not a design flourish: slot C2 in the interface is coil C2 in the machine, which is what lets a single Pix drive several motors in one order.

The interface commits hard to one context — a stranger, standing at a machine, holding a phone, probably in a hurry. It is mobile-only by construction, since the only route in is the QR code on the glass. There are no hover states anywhere in the stylesheet, only an active state with a press-down scale, because nothing on a touchscreen hovers. The visual language is Y2K pop-punk neobrutalism: four colours and no more, 2px black borders on everything, hard offset shadows with zero blur, no rounded corners. It reads as a sticker on a machine rather than an e-commerce checkout, which is the point — the customer should feel like they are operating a vending machine, not entering a store.

// engineering notes

// screens

All projects